Condição de erro TABLE_OR_VIEW_NOT_FOUND
A tabela ou view <relationName>
não pode ser encontrada. Verifique a ortografia e a exatidão do esquema e do catálogo.
Se você não qualificou o nome com um esquema, verifique a saída current_schema () ou qualifique o nome com o esquema e o catálogo corretos.
Para tolerar o erro no drop, use DROP VIEW IF EXISTS ou DROP TABLE IF EXISTS.
Parâmetros
- relationName : O nome da relação especificada (tabela ou view) que não pode ser encontrada.
Explicação
As tabelas e visualizações persistentes consistem em três partes: <catalog>.<schema>.<relation>
.
Se você não especificar todas as três partes do nome, ele será preenchido implicitamente usando o catálogo atual ou o esquema atual.
Isso é semelhante à forma como o diretório de trabalho do seu sistema de arquivos influencia quais arquivos você pode ver, a menos que você especifique totalmente o caminho.
A visualização temporária ou as expressões de tabela comum (CTE) só existem na sessão ou na consulta e nunca devem ser qualificadas.
Os motivos mais comuns para não encontrar uma mesa ou view são os seguintes:
- O objeto simplesmente não existe.
- O nome do objeto, esquema ou catálogo foi escrito incorretamente.
- O objeto não está localizado no esquema atual.
- O usuário não tem acesso ao objeto e, portanto, não pode vê-lo.
Mitigação
A mitigação do erro depende da causa:
-
O senhor escreveu incorretamente o nome da tabela ou view, do esquema ou do catálogo?
Corrija a ortografia.
-
O senhor não qualificou totalmente o nome e o resultado de
VALUES current_schema()
não corresponde ao nome qualificado da tabela ou view?Qualifique explicitamente o site
relationName
com seu esquema e catálogo ou emita um comandoUSE SCHEMA
para definir o esquema implícito desejado. -
O senhor fez referência a um site temporário view, mas ele estava em uma sessão anterior, expirada ou diferente?
Recrie o view temporário usando
CREATE TEMPORARY VIEW \<relationName\> …
ou passe a usar um view permanente. -
Você fez referência a uma expressão de tabela comum (CTE), mas ela está fora do escopo?
Mova a definição do CTE para a consulta mais externa. Esse é o começo da declaração, então ela é visível em todos os lugares dentro da declaração.
-
O senhor deseja emitir uma instrução DDL, como "DROP TABLE", apenas para o caso de o objeto existir?
Emita a declaração usando a cláusula
IF EXISTS
, como:DROP TABLE \<relationName\> IF EXISTS
. -
Você sabe que o objeto existe, mas não consegue vê-lo em
SHOW TABLE
?Entre em contato com seu administrador para obter acesso à tabela concedida. Talvez isso também precise incluir acesso ao esquema e ao catálogo.
-
Não está claro por que o senhor não consegue resolver a tabela ou view?
Consulte Resolução de tabela e view para obter uma descrição detalhada da resolução de nomes.
Exemplos
-- 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;