postgresql删除表

postgresql删除表,postgresql,Postgresql,我有两个表tbl和tbl_new,它们都使用相同的序列tbl_id_seq。我想放下其中一张桌子。在tbl上,我删除了修饰符NOTNULL default nextval'tbl_id_seq':regclass,但该修饰符仍保留在tbl_new上。我得到以下错误: 错误:无法删除表tbl,因为其他对象依赖它 详细信息:表tbl_新列id的默认值取决于顺序tbl_id_seq 审查后 看起来只有“级联”和“限制为”选项。您需要查看序列及其所属的表: ALTER SEQUENCE "tbl_id_

我有两个表tbl和tbl_new,它们都使用相同的序列tbl_id_seq。我想放下其中一张桌子。在tbl上,我删除了修饰符NOTNULL default nextval'tbl_id_seq':regclass,但该修饰符仍保留在tbl_new上。我得到以下错误:

错误:无法删除表tbl,因为其他对象依赖它 详细信息:表tbl_新列id的默认值取决于顺序tbl_id_seq

审查后 看起来只有“级联”和“限制为”选项。

您需要查看序列及其所属的表:

ALTER SEQUENCE "tbl_id_seq" OWNED BY NONE;
我想它是通过将tbl的tbl_id字段定义为SERIAL来创建和绑定的。

要通过column default查找序列和依赖序列的所有表,请执行以下操作:

SELECT sn.nspname || '.' || s.relname AS seq
      ,tn.nspname || '.' || t.relname AS tbl
FROM   pg_class s
JOIN   pg_namespace sn ON sn.oid = s.relnamespace
LEFT   JOIN pg_depend d ON d.refobjid = s.oid AND d.deptype <> 'i'
LEFT   JOIN pg_attrdef ad ON ad.oid = d.objid
LEFT   JOIN pg_class t ON t.oid = ad.adrelid
LEFT   JOIN pg_namespace tn ON tn.oid = t.relnamespace
WHERE  s.relkind = 'S'
AND    s.relname ~~ '%part_of_seq_name%' -- enter search term here
ORDER  BY 1,2;
现在使用左连接来显示独立序列。 然后可以使用@Milen post方法使序列独立


几天前我发了帖子。

您是如何创建tbl\u id的?你是如何放弃tbl的?请提供一些代码。我刚刚测试了它,它对我来说工作得很好,所以很可能问题出在这里没有提供的细节上。