如何在postgres中获取所有约束,它们的表和它们的列的列表?

时间:2018-12-30 21:02:04

标签: postgresql

我想获取所有约束的列表,它们的表和它们的列,例如

constraint                    | table | columns
------------------------------|-------|---------------
table1_colum1_colum2_key       table1   {colum1, colum2}

这怎么办?

1 个答案:

答案 0 :(得分:1)

可以通过pg_constraint查询约束。表包含在pg_class中,列包含在pg_attributes中。架构位于pg_namespace中。

以下内容可能对您有用。

SELECT con.conname "constraint",
       concat(nsp.nspname, '.', rel.relname) "table",
       (SELECT array_agg(att.attname)
               FROM pg_attribute att
                    INNER JOIN unnest(con.conkey) unnest(conkey)
                               ON unnest.conkey = att.attnum
               WHERE att.attrelid = con.conrelid) "columns"
       FROM pg_constraint con
            INNER JOIN pg_class rel
                       ON rel.oid = con.conrelid
            INNER JOIN pg_namespace nsp
                       ON nsp.oid = rel.relnamespace;