TABLE_OR_VIEW_NOT_FOUND (clase de error)

SQLSTATE: 42P01

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

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

Para tolerar el error al quitarlo, 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

El nombre de las tablas y vistas persistentes consta de tres partes: <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 deben calificarse.

La razón más común para no encontrar una tabla o vista es:

  • El objeto sencillamente no existe.
  • El nombre del objeto, el esquema o el catálogo se ha escrito mal.
  • 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 incorrectamente la tabla o vista, el esquema o el nombre del catálogo?

    Corrija el nombre.

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

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

  • ¿Hizo 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. Este sería el principio de la instrucción, por lo que es visible en todas partes dentro de la instrucción.

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

    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. Esto también puede requerir incluir el acceso al esquema y al catálogo.

  • ¿No está claro por qué no se puede resolver la tabla o la 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;