ホームページ >データベース >mysql チュートリアル >特定の PostgreSQL スキーマ内のテーブルの存在を確実に確認するにはどうすればよいですか?
PostgreSQL スキーマ内のテーブルの存在の確認
PostgreSQL データベースでは、パブリック スキーマやさまざまな組織のカスタム スキーマなどのスキーマがよく使用されます。 これには、特定のスキーマ内のテーブルの存在を確認するための信頼できる方法が必要です。
情報スキーマの制限
情報スキーマはデータベース テーブルのビューを提供しますが、現在のユーザーがアクセスできるテーブルに制限されます。 この制限により、偽陰性が発生する可能性があります。 情報スキーマを使用した次のクエリは、テーブルの存在を正確に反映していない可能性があります:
<code class="language-sql">SELECT EXISTS ( SELECT FROM information_schema.tables WHERE table_schema = 'schema_name' AND table_name = 'table_name' );</code>
システム カタログを使用した信頼性の高い方法
より包括的なチェックを行うには、PostgreSQL のシステム カタログを利用してください。 以下のクエリは、pg_class
と pg_namespace
を使用して、ユーザーの権限に関係なく、テーブルが存在するかどうかを確実に判断します。
<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' -- only tables );</code>
テーブルが存在する場合、このクエリは true
を返します。
テーブルの存在検証のための型キャスト
別の手法では、テーブル識別子を regclass
型にキャストします。 キャストが成功すると、テーブルが存在することが暗示されます。失敗すると例外が発生します。
<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>
to_regclass
の使用 (PostgreSQL 9.4 以降)
PostgreSQL 9.4 以降のバージョンの場合、to_regclass
関数はより堅牢なソリューションを提供します。 テーブルが存在しない場合は NULL
を返し、例外を回避します:
<code class="language-sql">SELECT to_regclass('schema_name.table_name');</code>
以上が特定の PostgreSQL スキーマ内のテーブルの存在を確実に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。