sql >> Databáze >  >> RDS >> PostgreSQL

Vypsat všechny cizí klíče PostgreSQL

Cizí klíč může být založen na více sloupcích, takže conkey a confkey z pg_constraint jsou pole. Chcete-li získat seznam názvů nebo typů sloupců, musíte pole rozpojit. Můžete použít tyto funkce:

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

Funkce mohou být velmi užitečné při dotazování na omezení a indexy. Váš dotaz je s nimi pěkný a jednoduchý:

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. Rozdělit hodnotu oddělenou čárkou ze sloupce tabulky do řádků pomocí mysql?

  2. Získávání sekund mezi dvěma časovými razítky Oracle

  3. Snow Leopard + Ruby 1.9.1 + MySQL Gem =Obrovské problémy

  4. Nelze použít DROP TABLE IF EXISTS v schema.sql pro aplikaci Spring Boot