ホームページ > データベース > mysql チュートリアル > 私の PostgreSQL テーブルは特定のスキーマに存在しますか?

私の PostgreSQL テーブルは特定のスキーマに存在しますか?

DDD
リリース: 2025-01-22 15:57:10
オリジナル
375 人が閲覧しました

Does My PostgreSQL Table Exist in a Specific Schema?

指定された会社スキーマにテーブルが存在するかどうかを確認する方法

PostgreSQL データベースを使用する場合、多くの場合、テーブルが特定のスキーマに存在するかどうかを確認する必要があります。この検証は、テーブルがパブリック スキーマと企業固有のスキーマの両方に存在する可能性がある場合に特に重要になります。

問題の定義

質問で説明されている状況と同様に、テーブルはさまざまな「company」スキーマ (company1、company2、companynn など) に存在する可能性があり、これらの特定のスキーマ内でのみチェックする必要があります。これにより、次のような課題が生じます。

  • テーブルが「public」などの他のスキーマに存在する場合でも、指定された会社のスキーマに存在するかどうかを判断します。

解決策: システム ディレクトリと直接クエリ

この問題を効果的に解決するには、情報スキーマに依存しないようにしてください。情報スキーマは、ユーザーの権限によりテーブルの存在を正確に反映していない可能性があります。代わりに、システム カタログ 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>
ログイン後にコピー

このクエリは、指定された 'schema_name' にテーブルが存在することを確認し、他のスキーマを除外します。

代替: regclass に変換します

別のアプローチには、テーブル名を「regclass」に変換することが含まれます。

<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>
ログイン後にコピー

指定されたスキーマにテーブルが存在しない場合、このメソッドは例外をスローします。この例外を処理すると、必要な検証が行われます。

この改訂された出力では、元の書式とイメージが維持されますが、中心的な意味を変更することなく文と段落を言い換えることができます。

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

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