PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Lista wszystkich kluczy obcych PostgreSQL

Klucz obcy może być oparty na wielu kolumnach, więc conkey i confkey z pg_constraint są tablicami. Musisz rozpakować tablice, aby uzyskać listę nazw lub typów kolumn. Możesz użyć tych funkcji:

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

Funkcje mogą być bardzo przydatne podczas wykonywania zapytań o ograniczenia i indeksy. Dzięki nim Twoje zapytanie jest proste i przyjemne:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle odpowiednik Postgresa DISTINCT ON?

  2. @BatchSize inteligentne czy głupie zastosowanie?

  3. Aplikacja Django w kontenerze Docker nie może znaleźć postgres

  4. Jak używać funkcji PostgreSQL upper() z innymi ustawieniami regionalnymi?

  5. Jak poprawić szybkość zapytań?