【问题标题】:How to enforce column order with Liquibase?如何使用 Liquibase 强制列顺序?
【发布时间】:2015-06-03 17:15:42
【问题描述】:

设置:

  1. liquibase 3.3.5
  2. PostgreSQL 9.3
  3. Windows 7 旗舰版

已使用

设置 Liquibase.properties 文件
changeLogFile = C://temp/changeset.xml, 

我使用 Liquibase (3.3.5) 创建了一个差异文件。

liquibase.bat diffChangeLog

检查 changeset.xml 文件显示

-<addColumn tableName="view_dx">
         <column type="int8" name="counter" defaultValueNumeric="0" defaultValue="0"/>
</addColumn

问题是什么时候

 liquibase.bat update

运行时,更改的表与参考表的列顺序不同。这会导致使用 SETOF 返回表行的存储过程出现问题。

在不破坏目标数据库现有表的情况下,如何使用 Liquibase 强制执行列顺序?

TIA

【问题讨论】:

    标签: postgresql liquibase


    【解决方案1】:

    我认为您通常无法让 Liquibase 强制执行列排序。您可能需要更改存储过程以使用列名而不是依赖位置,这无论如何都是一个好习惯。

    【讨论】:

    • 同意...不幸的是,我正在使用存储过程来反馈到似乎需要“SETOF”表示法的实体框架,因此列顺序至关重要。想法?
    • 我认为此时您唯一的办法就是开始查看 Liquibase 源代码,看看您是否可以编写一个表达您的要求的测试。如果您可以修改 Liquibase 源代码本身以执行您想要的操作,您可能可以将其合并。您也可以编写一个 Liquibase 扩展来执行您想要的操作。
    【解决方案2】:

    您是否尝试过使用addColumn 标签的afterColumn 属性?

    【讨论】:

      猜你喜欢
      • 2017-04-02
      • 1970-01-01
      • 2015-07-27
      • 2010-12-23
      • 2015-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      相关资源
      最近更新 更多