Postgres约束写入和删除表的顺序

时间:2011-10-04 00:17:04

标签: database postgresql database-design

我在postgresQL数据库中工作,该数据库有200多个表,其中一些表有许多(15+)个约束,这些约束是对其他表的引用。我能够列出pg_constraints表中的所有约束 我试图映射每个表引用的依赖项和表,以便能够管理从Web应用程序写入表。如果表具有依赖关系,我需要确保在该表之前写入依赖表,并且如果该表由另一个表引用,则在查询引用它的表之前,给定表具有必要的行。如何按照需要写入的顺序获取表的列表,反之,从多个表中删除需要遵循的顺序?

2 个答案:

答案 0 :(得分:1)

两条建议:

  • 可能存在循环依赖关系,尤其是触发器和规则。在像你这样的情况下并非不可能。这是完全可以接受的设计,触发器/规则/外键等中的编程逻辑必须注意不要进入无限循环。 (RDBMS可以在它们发生时检测到它们。)但是你在关系层面上绘制依赖关系的任务可能会引导你进入圈内。

  • pgAdmin(当前版本1.14)在主界面中有“Dependencies”和“Dependents”的专用标签。单击任何对象并获取完整列表。这可能对你的情况很有帮助 - 甚至可能是你所需要的。 您还可以turn on statement-logging数据库,并阅读pgAdmin如何在日志中检索该信息。为此目的设置log_statement = all 不要忘记重置log_statement,否则你的日志文件会变得很大。

答案 1 :(得分:1)

您还可以尝试将约束更改为deferred