无法删除视图的Flyway可重复迁移

时间:2019-08-14 16:47:06

标签: sql postgresql flyway create-view

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

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

一个选择是首先删除视图。但是,如果其他因素依赖于视图,则会导致问题,这也会引发错误。

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

1 个答案:

答案 0 :(得分:0)

您不能使用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

  

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

     

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