如何使用 Liquibase 强制列顺序?

Posted

技术标签:

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

设置:

    liquibase 3.3.5 PostgreSQL 9.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

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

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

【讨论】:

以上是关于如何使用 Liquibase 强制列顺序?的主要内容,如果未能解决你的问题,请参考以下文章

液化石油气。如何跟踪存储过程更改

无法使用 Liquibase 中的序列在表中插入值

使用 liquibase 构建测试脚本以使用普通脚本按顺序执行

如何使 liquibase 的 LoadData 标签不区分大小写?

Liquibase:如何使用 CURRENT_TIMESTAMP 加载数据?

如何从数据库中删除最后执行的 liquibase 变更集