PostgreSQL
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на прозоречни функции в изявление за актуализиране

  2. PostgreSQL е най-добрата база данни в света

  3. JDBC транзакция с потребителско въвеждане

  4. Как да създадете n-gram в postgresql

  5. Агрегатна функция на Postgres за изчисляване на векторна средна скорост на вятъра (векторна величина) и посока на вятъра (векторна посока)