在MySQL
我有一个很好的方法来抑制密钥检查,我就是这样做的:
SET FOREIGN_KEY_CHECKS = 0;
之后我可以轻松放下任何桌子。我想,在Postgresql
我可以做同样的事情,如果我跑:
SET CONSTRAINTS ALL DEFERRED;
但问题是,当我尝试删除一些表之后,我得到一个错误列表,说一些表依赖于另一个表blablabla。那么,我做错了什么,我该如何解决呢?谢谢!
答案 0 :(得分:5)
SET CONSTRAINTS ALL DEFERRED;
仅对DML语句有效(insert
,update
,delete
)和仅,如果受影响的外键定义为deferrable
。
由于您希望删除表(而不是删除行),因此延迟约束无关紧要。要删除作为外键目标的表,请使用:
drop table foobar CASCADE;
这将删除表foobar和任何外键引用该表(显然和foobar引用另一个表的外键)。
手册中的更多详细信息:http://www.postgresql.org/docs/current/static/sql-droptable.html