跟踪PostgreSQL数据库中的依赖项

时间:2011-03-15 19:27:58

标签: postgresql views

在复杂的数据库中,Postgres拒绝改变视图,因为许多规则和许多其他视图都依赖于它。

我可以使用DROP CASCADE删除包含所有依赖项的视图,但之后如何重新创建这些视图?这并不容易,因为即使我知道VU取决于我想要改变的视图,我也不能按照我的意愿创建它们。如果视图V取决于U,我必须先创建V,然后再创建U

如何跟踪哪些其他视图和规则依赖于某个视图,以便我能够以最简单的方式更改它?我还想生成一个脚本,这样每个人都可以用我的脚本改变视图,生成它的任何简单方法都可以吗?

2 个答案:

答案 0 :(得分:1)

检查系统表pg_depend以获取依赖项。

答案 1 :(得分:0)

我不知道这对你有多好,但最不费力的方法可能是DROP CASCADE并使用apgdiff重新创建已删除的视图:

  1. 运行pg_dump -s -f old_schema.sql以创建架构转储 - 其中包括所有视图等。
  2. 运行DROP VIEW x CASCADE
  3. 运行pg_dump -s -f new_schema.sql
  4. 运行apgdiff new_schema.sql old_schema.sql > restore.sql - 创建一个脚本以恢复数据库中的旧架构。
  5. psql -f restore.sql
  6. 不幸的是,这意味着您的数据库会在一段时间内丢失这些视图,因此您可能必须使其脱机以进行维护。