跟踪 PostgreSQL 数据库中的依赖关系

发布于 2024-10-21 20:35:05 字数 351 浏览 1 评论 0原文

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

我可以使用 DROP CASCADE 删除视图及其所有依赖项,但之后如何重新创建这些视图?这并不容易,因为即使我知道 VU 都取决于我想要更改的视图,我也不能随心所欲地创建它们。如果视图 V 依赖于 U,我必须先创建 V,然后再创建 U

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

In a complex database, Postgres refuse to alter a view since many rules, and many other views depends on it.

I can drop the view with all its dependencies with DROP CASCADE, but how will I recreate these views afterwards? It's not so easy, since even if I know that both V and U depends on the view I want to alter I can't just create them however I want. If view V depends on U, I must create V first and only then create U.

How can I trace which other views and rules depend on a certain view, so that I'll be able to alter it in the easiest way? I also want to generate a script so that everyone would be able to alter the view with my script, any easy way to generate that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与君绝 2024-10-28 20:35:05

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

Check the system table pg_depend to get the dependencies.

暖树树初阳… 2024-10-28 20:35:05

我不知道这对你有多有效,但最省力的方法可能是 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

不幸的是,这意味着您的数据库将在一段时间内丢失这些视图,因此您可能必须将其脱机以进行维护。

I don't know how well this will work for you, but the least laborous way would probably be DROP CASCADE and use apgdiff to re-create the dropped views:

  1. Run pg_dump -s -f old_schema.sql to create a schema dump -- which includes all views etc.
  2. Run DROP VIEW x CASCADE
  3. Run pg_dump -s -f new_schema.sql
  4. Run apgdiff new_schema.sql old_schema.sql > restore.sql -- create a script to restore the old schema in the database.
  5. psql -f restore.sql

Unfortunately this means that your database will be missing these views for a window of time, so you probably have to take it offline for maintenance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文