ホームページ > データベース > mysql チュートリアル > 特定の PostgreSQL スキーマ内のテーブルの存在を確実に確認するにはどうすればよいですか?

特定の PostgreSQL スキーマ内のテーブルの存在を確実に確認するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-22 16:07:09
オリジナル
350 人が閲覧しました

How to Reliably Check for a Table's Existence in a Specific PostgreSQL Schema?

PostgreSQL スキーマ内のテーブルの存在の確認

PostgreSQL データベースでは、パブリック スキーマやさまざまな組織のカスタム スキーマなどのスキーマがよく使用されます。 これには、特定のスキーマ内のテーブルの存在を確認するための信頼できる方法が必要です。

情報スキーマの制限

情報スキーマはデータベース テーブルのビューを提供しますが、現在のユーザーがアクセスできるテーブルに制限されます。 この制限により、偽陰性が発生する可能性があります。 情報スキーマを使用した次のクエリは、テーブルの存在を正確に反映していない可能性があります:

SELECT EXISTS (
   SELECT FROM information_schema.tables 
   WHERE  table_schema = 'schema_name'
   AND    table_name   = 'table_name'
   );
ログイン後にコピー

システム カタログを使用した信頼性の高い方法

より包括的なチェックを行うには、PostgreSQL のシステム カタログを利用してください。 以下のクエリは、pg_classpg_namespace を使用して、ユーザーの権限に関係なく、テーブルが存在するかどうかを確実に判断します。

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
   );
ログイン後にコピー

テーブルが存在する場合、このクエリは true を返します。

テーブルの存在検証のための型キャスト

別の手法では、テーブル識別子を regclass 型にキャストします。 キャストが成功すると、テーブルが存在することが暗示されます。失敗すると例外が発生します。

SELECT 'schema_name.table_name'::regclass;
ログイン後にコピー

to_regclass の使用 (PostgreSQL 9.4 以降)

PostgreSQL 9.4 以降のバージョンの場合、to_regclass 関数はより堅牢なソリューションを提供します。 テーブルが存在しない場合は NULL を返し、例外を回避します:

SELECT to_regclass('schema_name.table_name');
ログイン後にコピー

以上が特定の PostgreSQL スキーマ内のテーブルの存在を確実に確認するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート