TABLE_OR_VIEW_NOT_FOUND (clase de error)
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 comandoUSE 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;