TABLE_OR_VIEW_NOT_FOUND 错误类
找不到表或视图 <relationName>
。 请验证架构和目录的拼写和正确性。
如果未使用架构限定名称,请验证 current_schema() 输出,或使用正确的架构和目录限定名称。
若要容许删除时出错,请使用 DROP VIEW IF EXISTS 或 DROP TABLE IF EXISTS。
参数
- relationName:无法找到的指定关系(表或视图)的名称。
说明
持久化表和视图由三个名称部分组成:<catalog>.<schema>.<relation>
。
如果未指定名称的所有三个部分,则会使用当前目录或当前架构隐式填写名称。
这类似于文件系统的工作目录如何影响显示的文件(除非指定完整路径)。
临时视图或通用表表达式 (CTE) 仅存在于会话或查询中,绝对不可限定。
找不到表或视图的最常见原因是:
- 该对象不存在。
- 对象名称、架构或目录拼写错误。
- 该对象不在当前架构中。
- 用户无法访问该对象,因此看不到它。
缓解措施
错误的缓解方法取决于具体原因:
表或视图、架构或目录的名称是否拼写错误?
更正拼写。
是否未完全限定名称,并且
VALUES current_schema()
的结果与表或视图的限定名称不匹配?使用架构和目录显式限定
relationName
,或发出USE SCHEMA
命令以设置所需的隐式架构。是否引用了在以前的、已过期的或不同会话中的临时视图?
使用
CREATE TEMPORARY VIEW <relationName> …
重新创建临时视图,或改用永久视图。是否引用了超出了范围的通用表表达式 (CTE)?
将 CTE 的定义移到最外层查询。 该位置是语句的开头,因此该定义在语句中的任何位置都可见。
是否要发出 DDL 语句(例如“DROP TABLE”)以防该对象存在?
使用
IF EXISTS
子句发出语句,例如:DROP TABLE <relationName> IF EXISTS
。你是否知道该对象存在,但在
SHOW TABLE
中看不到它?请联系管理员以获取对表的访问权限。 还可能需要请求对架构和目录的访问权限。
不清楚为什么你无法解析表或视图?
有关名称解析的详细说明,请参阅表和视图解析。
示例
-- 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;