【发布时间】:2013-10-23 14:25:38
【问题描述】:
我想知道是否有一种快速有效的方法可以在 PostgreSQL 中订购表,这样,如果我运行 DELETE FROM <table_name>,它们都会成功而不会破坏参照完整性。
例如如果表是USER -->* ACCOUNT -->* TRANSACTION,我想先删除 TRANSACTION,然后是 ACCOUNT,然后是 USER,因为任何其他顺序都会破坏外键关系。
我以前通过查询系统表并在某些脚本语言的内存中构建参照完整性树来对其他数据库进行此操作。但我想知道是否有一种快速(更好)的方法来生成这样的列表。
【问题讨论】:
-
标题写着
truncate,但帖子本身写着delete- 你打算用哪个? -
重要吗?最终结果是相同的,擦除所有数据并拥有一个空架构
-
我有点希望你有 FK,所以你可以做
TRUNCATE TABLE users CASCADE,让 postgres 担心订单。 -
@amphibient:
DELETE或TRUNCATE在谈论参照完整性时很重要。 Read the fine manual here。无论哪种方式,您都可以找到两种不同的方法来获取引用表的递归树in this related answer。
标签: sql postgresql foreign-keys referential-integrity