我尝试DROP SEQUENCE
我的表中不应该存在的序列CASCADE
。 The documentation很明显,如果使用dev=> SELECT sequence_name, last_value FROM mytable_columnname_seq;
sequence_name | last_value
-----------------------+------------
mytable_columnname_seq | 2
(1 row)
选项,将删除依赖于该序列的对象。你如何确定那些对象(如果存在)?
具体来说,在生产数据库中运行之前,我需要验证是否会删除任何关键字。
我可以确定是否使用了序列:
last_value
在上面我们看到2
是V
,这意味着它已被使用。但它并没有通过 来表示。
决议(感谢a_horse_with_no_name和kiln;我无法接受这两个答案,这是一种耻辱):
依赖' object是表的序列所分配列的默认值。如果可以安全地删除列的默认值,则删除序列同样安全:不会删除任何行或表,并且它们的值将保持不变。
答案 0 :(得分:2)
这对我有用:
select n.nspname as table_schema, cl.relname as table_name
from pg_class s
join pg_depend d on d.objid=s.oid and d.classid='pg_class'::regclass and d.refclassid='pg_class'::regclass
join pg_class cl on cl.oid = d.refobjid
join pg_namespace n on n.oid = cl.relnamespace
join pg_attribute a on a.attrelid = cl.oid and a.attnum=d.refobjsubid
where s.relkind='S'
and d.deptype='a'
and n.nspname = 'schema of the sequence'
and s.relname = 'sequence name'
答案 1 :(得分:1)