Sql 如何使用Postgres Pg_表格-比较合同

Sql 如何使用Postgres Pg_表格-比较合同,sql,postgresql,foreign-keys,views,constraints,Sql,Postgresql,Foreign Keys,Views,Constraints,我正在开发一个更新版本的系统,添加和删除了一些列、表、约束和视图。我能够使用pg_表将列与此查询进行比较: select table_name, column_name from pg_tables join information_schema.columns on pg_tables.tablename = columns.table_name where schemaname = 'public' order by tablename, colum

我正在开发一个更新版本的系统,添加和删除了一些列、表、约束和视图。我能够使用pg_表将列与此查询进行比较:

select 
    table_name, column_name
from 
    pg_tables 
join information_schema.columns on pg_tables.tablename = columns.table_name
where 
    schemaname = 'public'
order by 
    tablename, column_name;

但是,我不知道如何比较表的约束。迫切需要实施这些措施。请帮忙。谢谢

您通常需要查询目录以提取此类信息:

学习它更简单的方法是运行
psql-E
,以便显示隐藏的查询。这将让您看到显示表信息时执行的查询(例如使用
\d
)。(可选)根据需要在视图中包装查询

例如,以下视图将产生检查约束:

CREATE SCHEMA IF NOT EXISTS system;

CREATE OR REPLACE VIEW system.constraints AS
SELECT  con.conrelid::regclass,
        con.conname,
        con.conkey,
        ARRAY(
        SELECT  att.attname
        FROM    pg_attribute as att,
                generate_subscripts(con.conkey, 1) as k
        WHERE   att.attrelid = con.conrelid
        AND     att.attnum = con.conkey[k]
        ORDER BY k
        ) as conkey_names,
        pg_get_constraintdef(con.oid, true) as condef
FROM    pg_constraint as con
WHERE   con.contype = 'c';

COMMENT ON VIEW system.constraints IS
'Scans check constraints.';

SELECT * FROM system.constraints;
此处有更多与此相同的视图: