メインコンテンツまでスキップ

TABLE_OR_VIEW_NOT_FOUND エラークラス

SQLSTATE: 42P01

テーブルまたはビュー <relationName> 見つかりません。 スキーマとカタログのスペルと正確性を確認します。

スキーマで名前を修飾しなかった場合、current_schema() 出力を確認するか、正しいスキーマとカタログで名前を修飾します。

ドロップ時のエラーを許容するには、DROP VIEW IF EXISTS または DROP TABLE IF EXISTS を使用します。

パラメーター

  • relationName : 見つからない指定されたリレーション (テーブルまたはビュー) の名前。

説明

永続化されたテーブルとビューは、 <catalog>.<schema>.<relation>の 3 つの名前の部分で構成されます。名前の 3 つの部分をすべて指定しない場合、名前は現在のカタログまたは現在のスキーマを使用して暗黙的に完了します。これは、パスを完全に指定しない限り、ファイルシステムの作業ディレクトリが表示できるファイルに影響を与える方法と似ています。

テンポラリビューまたは共通テーブル式 (CTE) は、セッションまたはクエリ内にのみ存在し、修飾することはできません。

テーブルまたはビューが見つからない最も一般的な理由は次のとおりです。

  • オブジェクトが存在しないだけです。
  • オブジェクト名、スキーマ、またはカタログのスペルが間違っていました。
  • オブジェクトが現在のスキーマにありません。
  • ユーザーはオブジェクトにアクセスできないため、オブジェクトを表示できません。

緩和

エラーの軽減策は、原因によって異なります。

  • テーブル名、ビュー名、スキーマ名、またはカタログ名のスペルが間違っていませんか?

    スペルを修正します。

  • 名前を完全修飾しておらずVALUES current_schema()の結果がテーブルまたはビューの修飾名と一致しませんか?

    スキーマとカタログでrelationNameを明示的に修飾するか、USE SCHEMA コマンドを発行して目的の暗黙的なスキーマを設定します。

  • 一時的なビューを参照しましたが、それは前のセッション、期限切れのセッション、または別のセッションにありましたか?

    CREATE TEMPORARY VIEW \<relationName\> …を使用して一時ビューを再作成するか、永続ビューの使用に切り替えます。

  • 共通テーブル式 (CTE) を参照しましたが、スコープ外ですか?

    CTE の定義を最も外側のクエリに移動します。 これがステートメントの始まりであるため、ステートメント内のどこにでも表示されます。

  • オブジェクトが存在する場合に備えて、'DROP TABLE' などの DDL ステートメントを発行しますか?

    IF EXISTS節を使用して、次のようなステートメントを発行します。 DROP TABLE \<relationName\> IF EXISTS

  • オブジェクトが存在することは知っていますが、 SHOW TABLEでは見ることができませんか?

    管理者に連絡して、付与されたテーブルへのアクセス権を取得してください。 これには、スキーマとカタログへのアクセスも含める必要がある場合があります。

  • テーブルまたはビューを解決できない理由が不明です。

    名前解決の詳細については、 テーブルとビューの解決 を参照してください。

SQL
-- 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;

関連