PostgreSQL データベースを使用する場合、多くの場合、テーブルが特定のスキーマに存在するかどうかを確認する必要があります。この検証は、テーブルがパブリック スキーマと企業固有のスキーマの両方に存在する可能性がある場合に特に重要になります。
質問で説明されている状況と同様に、テーブルはさまざまな「company」スキーマ (company1、company2、companynn など) に存在する可能性があり、これらの特定のスキーマ内でのみチェックする必要があります。これにより、次のような課題が生じます。
この問題を効果的に解決するには、情報スキーマに依存しないようにしてください。情報スキーマは、ユーザーの権限によりテーブルの存在を正確に反映していない可能性があります。代わりに、システム カタログ 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」に変換することが含まれます。
<code class="language-sql">SELECT 'schema_name.table_name'::regclass;</code>
指定されたスキーマにテーブルが存在しない場合、このメソッドは例外をスローします。この例外を処理すると、必要な検証が行われます。
この改訂された出力では、元の書式とイメージが維持されますが、中心的な意味を変更することなく文と段落を言い換えることができます。
以上が私の PostgreSQL テーブルは特定のスキーマに存在しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。