Sql 如何使用Postgres Pg_表格-比较合同
我正在开发一个更新版本的系统,添加和删除了一些列、表、约束和视图。我能够使用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
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;
此处有更多与此相同的视图: