特定の PostgreSQL スキーマ内のテーブルの存在の確認
PostgreSQL データベースはスキーマ内でテーブルを編成します。 指定されたスキーマ内にテーブルが存在することを確認するには、次のメソッドを使用します:
方法 1: 直接システム カタログ クエリ
このアプローチは、pg_class
システム カタログに直接問い合わせます。
<code class="language-sql">SELECT EXISTS ( SELECT FROM pg_catalog.pg_class c JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE n.nspname = 'schema_name' AND c.relname = 'table_name' AND c.relkind = 'r' -- restricts to tables only );</code>
方法 2: 情報スキーマ クエリ (注意事項あり)
information_schema
(例: information_schema.tables
) の使用は一見簡単ですが、アクセス許可の制限により偽陰性が発生する可能性があることに注意してください。 このメソッドは、現在のユーザーのアクセスを確認する必要がある場合に役立ちます:
<code class="language-sql">SELECT EXISTS ( SELECT FROM information_schema.tables WHERE table_schema = 'schema_name' AND table_name = 'table_name' );</code>
方法 3: regclass
スキーマ修飾されたテーブル名を regclass
型にキャストすると、テーブルが存在しない場合に例外がトリガーされます。これにより、二重引用符で囲まれた識別子によるあいまいさが回避されます:
<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>
方法 4: to_regclass()
関数 (PostgreSQL 9.4 以降)
PostgreSQL 9.4 以降のバージョンの場合、to_regclass()
関数はよりクリーンなソリューションを提供します。 オブジェクトが見つからない場合は NULL
を返します:
<code class="language-sql">SELECT to_regclass('schema_name.table_name');</code>
重要な考慮事項:
pg_class
または to_regclass()
が推奨されます。search_path
設定は、pg_class
または to_regclass()
を使用する場合の結果には影響しません。以上がテーブルが特定の PostgreSQL スキーマに存在するかどうかを確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。