sql >> Database teknologi >  >> RDS >> PostgreSQL

Liste over alle fremmednøgler PostgreSQL

En fremmednøgle kan være baseret på flere kolonner, så conkey og confkey af pg_constraint er arrays. Du er nødt til at fjerne arrays for at få en liste over kolonnenavne eller typer. Du kan bruge disse funktioner:

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
$$;

Funktionerne kan være meget praktiske, når du forespørger på begrænsninger og indekser. Din forespørgsel er god og enkel med dem:

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. Erklærer variabel MySQL-trigger

  2. Sådan begrænser du brugen af ​​en formular eller begrænser adgangen

  3. Hvorfor returnerer SQLAlchemy create_engine med charset=utf8 pythontypen <str> og ikke <unicode>?

  4. Overvågning af Percona XtraDB Cluster - Nøglemålinger