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 に表示されませんか?

    許可されたテーブルにアクセスするには、管理者に問い合わせてください。 これには、スキーマとカタログへのアクセスも含める必要がある場合があります。

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

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

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