【问题标题】:Flyway repeatable migration for a view can't be dropped无法删除视图的 Flyway 可重复迁移
【发布时间】:2019-12-21 06:14:45
【问题描述】:

我们在 postgres 中有一堆视图,它们由 Flyway 创建为可重复的迁移。

我们遇到的错误是,如果我们想使用CREATE OR REPLACE VIEW重命名一个列,postgres会抛出一个错误并且不能这样做。

一种选择是先删除视图。但是,如果其他东西依赖于视图,这会导致问题,这也会引发错误。

有没有什么方法可以解决这个问题,而不必编写复杂的脚本来删除任何依赖于该视图的表/视图,因为这也需要重新创建其他视图。这个过程会变得非常混乱,想知道是否有更优雅的解决方案?

【问题讨论】:

    标签: sql postgresql flyway create-view


    【解决方案1】:

    你不能使用CREATE OR REPLACE,因为它是为扩展列列表而设计的:

    CREATE VIEW

    CREATE OR REPLACE VIEW 类似,但如果同名视图已存在,则将其替换。 新查询必须生成与现有视图查询相同的列(即相同的列名、相同的顺序和相同的数据类型),但它可能会添加额外的列列表的末尾。产生输出列的计算可能完全不同。

    选项:

    • 进行向后兼容的更改,即仅添加新列

    • 删除并重新创建视图(您需要处理对象依赖关系)


    Flyway 是基于迁移的工具,您可以搜索 PostgreSQL 的“基于状态”的迁移工具(SQL Server 有 SSDT)。相关State- or migrations-based database development

    6 Version Control tools for PostgreSQL

    基于状态的工具 - 通过将数据库结构与模型(标准具)进行比较来生成数据库升级脚本。

    基于迁移的工具 - 帮助/协助创建迁移脚本以将数据库从一个版本移动到下一个版本。

    【讨论】:

      猜你喜欢
      • 2022-01-01
      • 2018-10-14
      • 2023-04-02
      • 1970-01-01
      • 2018-01-22
      • 2020-05-13
      • 2017-08-13
      • 2020-11-15
      • 2017-11-26
      相关资源
      最近更新 更多