sql >> データベース >  >> RDS >> PostgreSQL

テーブル、フィールド、スキーマ名を使用して、参照されているテーブル名を検索します

    これを別のRDBMSに移植する必要がない場合は、多くの pg_catalogのカタログテーブルをより速く簡単に使用できます 標準の情報スキーマの代わりに:

    SELECT c.confrelid::regclass::text AS referenced_table
         , c.conname AS fk_name
         , pg_get_constraintdef(c.oid) AS fk_definition
    FROM   pg_attribute a 
    JOIN   pg_constraint c ON (c.conrelid, c.conkey[1]) = (a.attrelid, a.attnum)
    WHERE  a.attrelid = '"Schema2"."TableB"'::regclass   -- table name
    AND    a.attname  = 'A_Id'                           -- column name  
    AND    c.contype  = 'f'
    ORDER  BY conrelid::regclass::text, contype DESC;
    

    返品:

     referenced_table | fk_name  |  fk_definition
    ------------------+-------------------------+----------------------------------------------
     Schema1.TableA   | b1_fkey  | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")
    

    メモ

    • 追加の2つの列は、方向付け専用です。 Qによると、必要なのは最初の列だけです。

    • これはすべてを返します 複数の列に対するFK制約を含む、指定された列名を含むすべての外部キーによってテーブルを参照しました。

    • 名前は、現在のsearch_pathによって設定された可視性に応じて、自動的にスキーマ修飾されるかどうかになります。 。名前も必要に応じて自動的にエスケープされます(違法または大文字、予約語など)。

    pg_constraintの詳細を確認してください およびpg_attribute マニュアルで。また、オブジェクト識別子の種類についても詳しく説明します。

    関連:

    • 名前が不明なPostgreSQLドロップ制約
    • すべてのPKとFKを取得する



    1. MySQLおよびMariaDBサーバーで人気のあるDockerイメージ

    2. SelectでID列名を指定せずにID列の値を取得する方法-SQLServer/T-SQLチュートリアルパート46

    3. TODATETIMEOFFSET()SQLServerの例

    4. PHPの致命的なエラー:クラス'PDO'が見つかりません