【问题标题】:Tracing dependencies in PostgreSQL database跟踪 PostgreSQL 数据库中的依赖关系
【发布时间】:2011-03-15 19:27:58
【问题描述】:

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

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

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

【问题讨论】:

  • 将来在版本控制中获取您的对象。这样你至少知道你有什么对象,你可以在一个空的数据库中重新创建它们,然后做一个对象转储,然后你可以做一个 diff 来查看你的 prod 数据库与源代码控制相比有什么或没有什么。这假设您在发布过程中维护您的版本控制系统。
  • 我需要更改客户端的实时数据库,我不明白版本控制下的架构如何在这方面帮助我。我可以弄清楚架构。
  • 啊,我明白了。我以为这是一个内部数据库系统。

标签: postgresql views


【解决方案1】:

查看系统表pg_depend获取依赖关系。

【讨论】:

  • 能否请您参考使用示例?举个例子比较容易理解。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 2021-02-21
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多