在复杂的数据库中,Postgres拒绝改变视图,因为许多规则和许多其他视图都依赖于它。
我可以使用DROP CASCADE
删除包含所有依赖项的视图,但之后如何重新创建这些视图?这并不容易,因为即使我知道V
和U
取决于我想要改变的视图,我也不能按照我的意愿创建它们。如果视图V
取决于U
,我必须先创建V
,然后再创建U
。
如何跟踪哪些其他视图和规则依赖于某个视图,以便我能够以最简单的方式更改它?我还想生成一个脚本,这样每个人都可以用我的脚本改变视图,生成它的任何简单方法都可以吗?
答案 0 :(得分:1)
检查系统表pg_depend以获取依赖项。
答案 1 :(得分:0)
我不知道这对你有多好,但最不费力的方法可能是DROP CASCADE并使用apgdiff重新创建已删除的视图:
pg_dump -s -f old_schema.sql
以创建架构转储 - 其中包括所有视图等。DROP VIEW x CASCADE
pg_dump -s -f new_schema.sql
apgdiff new_schema.sql old_schema.sql > restore.sql
- 创建一个脚本以恢复数据库中的旧架构。psql -f restore.sql
不幸的是,这意味着您的数据库会在一段时间内丢失这些视图,因此您可能必须使其脱机以进行维护。