找不到表或视图 <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;