如何查询PostgreSQL中未关联表的序列并重新关联?
获取PostgreSQL中未关联表的序列及重新关联方法
一、查询未关联任何表的序列
可以通过PostgreSQL系统表筛选出无表字段引用的序列,以下是可用的SQL语句:
SELECT s.relname AS sequence_name, n.nspname AS schema_name FROM pg_sequence s JOIN pg_class c ON s.seqrelid = c.oid JOIN pg_namespace n ON c.relnamespace = n.oid WHERE NOT EXISTS ( SELECT 1 FROM pg_depend d JOIN pg_attribute a ON d.refobjid = a.attrelid AND d.refobjsubid = a.attnum WHERE d.objid = s.seqrelid AND d.classid = 'pg_class'::regclass AND d.refclassid = 'pg_class'::regclass );
说明
- 该查询通过
pg_sequence获取所有序列,再通过pg_depend系统表检查序列是否存在关联的表字段依赖,无对应依赖记录的即为未关联表的序列。 - 若仅需关注关联整数类型字段的序列,可在子查询末尾添加
AND (a.atttypid = 'int4'::regclass OR a.atttypid = 'int8'::regclass)缩小范围。
二、将序列重新关联到表字段
确定序列对应的目标表和字段后,使用ALTER SEQUENCE命令完成关联:
ALTER SEQUENCE schema_name.sequence_name OWNED BY table_name.column_name;
说明
- 替换
schema_name、sequence_name、table_name、column_name为实际名称即可。 - 关联后,若使用
DROP TABLE ... CASCADE删除对应表,序列会被自动删除;如果序列原本由SERIAL或IDENTITY生成,该操作可恢复默认依赖关系。
内容的提问来源于stack exchange,提问作者Arun C O
相关产品推荐
相关产品推荐

