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

すべての外部キーを一覧表示するPostgreSQL

    外部キーは複数の列に基づいている可能性があるため、conkey およびconfkey pg_constraintの 配列です。列名または列タイプのリストを取得するには、配列のネストを解除する必要があります。次の機能を使用できます:

    create or replace function get_col_names(rel regclass, cols int2[])
    returns text language sql as $$
        select string_agg(attname, ', ' order by ordinality)
        from pg_attribute,
        unnest(cols) with ordinality
        where attrelid = rel
        and attnum = unnest
    $$;
    
    create or replace function get_col_types(rel regclass, cols int2[])
    returns text language sql as $$
        select string_agg(typname, ', ' order by ordinality)
        from pg_attribute a
        join pg_type t on t.oid = atttypid,
        unnest(cols) with ordinality
        where attrelid = rel
        and attnum = unnest
    $$;
    

    この関数は、制約やインデックスを照会するときに非常に便利な場合があります。クエリは素晴らしくシンプルです:

    select 
        conrelid::regclass,
        get_col_names(conrelid, conkey) col_names,
        get_col_types(conrelid, conkey) col_types,
        conname
    from pg_constraint
    where contype ='f';
    
     conrelid | col_names | col_types |        conname         
    ----------+-----------+-----------+------------------------
     products | image_id  | int4      | products_image_id_fkey
    (1 row)
    



    1. SQL Serverとは何ですか?

    2. Oracle:算術演算でオーバーフローが発生しました

    3. 行の最大値を見つける方法

    4. PDOプリペアドステートメント