Compartir a través de


Condición de error TABLE_OR_VIEW_NOT_FOUND

SQLSTATE: 42P01

No se encuentra la tabla o vista <relationName> . Compruebe la ortografía y corrección del esquema y el catálogo.

Si no ha calificado el nombre con un esquema, compruebe la salida de current_schema() o califique el nombre con el esquema y el catálogo correctos.

Para tolerar el error al eliminar, use DROP VIEW IF EXISTS o DROP TABLE IF EXISTS.

Parámetros

  • relationName: nombre de la relación especificada (tabla o vista) que no se encuentra.

Explicación

Las tablas y vistas persistentes constan de tres partes de nombre: <catalog>.<schema>.<relation>. Si no especifica las tres partes del nombre, se completa implícitamente mediante el catálogo actual o el esquema actual. Esto es similar a la forma en que el directorio de trabajo del sistema de archivos influye en qué archivos puede ver, a menos que especifique completamente la ruta de acceso.

Las vistas temporales o expresiones de tabla comunes (CTE) solo existen dentro de la sesión o consulta y nunca se deben calificar.

El motivo más común para no encontrar una tabla o vista es:

  • El objeto simplemente no existe.
  • Se ha escrito mal el nombre del objeto, el esquema o el catálogo.
  • El objeto no se encuentra en el esquema actual.
  • El usuario no tiene acceso al objeto y, por tanto, no puede verlo.

Mitigación

La mitigación del error depende de la causa:

  • ¿Ha escrito la tabla o vista, el esquema o el nombre del catálogo incorrectamente?

    Corrija la ortografía.

  • ¿No ha especificado completamente el nombre y el resultado de VALUES current_schema() no coincide con el nombre calificado de la tabla o vista?

    Califica explícitamente el relationName con su esquema y catálogo, o emite un comando USE SCHEMA para establecer el esquema implícito deseado.

  • ¿Ha hecho referencia a una vista temporal, pero estaba en una sesión anterior, expirada o diferente?

    Vuelva a crear la vista temporal mediante CREATE TEMPORARY VIEW \<relationName\> …o cambie a mediante una vista permanente.

  • ¿Ha hecho referencia a una expresión de tabla común (CTE), pero está fuera del ámbito?

    Mueva la definición del CTE a la consulta más externa. Es el principio de la declaración, por lo que es visible en todo dentro de la declaración.

  • ¿Desea emitir una instrucción DDL, como "DROP TABLE" solo en caso de que exista el objeto?

    Emita la instrucción mediante la cláusula IF EXISTS, como: DROP TABLE \<relationName\> IF EXISTS.

  • ¿Sabe que el objeto existe, pero no puede verlo en SHOW TABLE?

    Póngase en contacto con el administrador para obtener acceso a la tabla concedida. Es posible que tenga que incluir también el acceso al esquema y al catálogo.

  • ¿No está claro por qué no se puede resolver la tabla o vista?

    Consulte Resolución de tabla y vista para obtener una descripción detallada de la resolución de nombres.

Ejemplos

-- The table is located in othercat.someschema
> SELECT count(*) FROM t;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `t` cannot be found.

> VALUES current_schema();
 default

-- Change the current schema
> USE SCHEMA othercat.someschema;
> SELECT count(*) FROM T;
 1

-- Alternatively qualify the table
> SELECT count(*) FROM othercat.someschema.t;
 1

-- A reference to a CTE in the wrong scope:
> SELECT count(1) FROM (WITH v(c1) AS (VALUES (1)) VALUES(2)) AS t(c1), v;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `v` cannot be found.

-- Move the CTE to top level
> WITH v(c1) AS (VALUES (1))
  SELECT count(1) FROM VALUES(2) AS t(c1), v;
 1

-- Dropping a non existing view
> DROP VIEW v;
 [TABLE_OR_VIEW_NOT_FOUND] The table or view `v` cannot be found.

> DROP VIEW IF EXISTS v;