liquibase:你能用 liquibase addColumn 指定“列后”吗?

Posted

技术标签:

【中文标题】liquibase:你能用 liquibase addColumn 指定“列后”吗?【英文标题】:liquibase: can you specify "after column" with liquibase addColumn? 【发布时间】:2014-02-06 10:21:57 【问题描述】:

有没有办法编写一个 liquibase addColumn 变更集,以便它生成类似 sql

ALTER TABLE xxx ADD COLUMN yyy AFTER zzz;

我的意思是,有没有办法在 liquibase 行话中添加相当于“列后 zzz”的内容?

【问题讨论】:

liquibase.org/documentation/modify_sql.html 【参考方案1】:

在 Liquibase 3.1 中,列标签上有新的“afterColumn”、“beforeColumn”和“position”属性。

http://www.liquibase.org/documentation/column.html 的文档刚刚更新以包含它们。

【讨论】:

这些列属性尚未生效。相关错误报告:liquibase.jira.com/browse/CORE-1745【参考方案2】:

在this 修复之前,您可以使用modifySql。

<changeSet id="1-1" author="david">
    <comment>Add column field to example table</comment>
    <addColumn tableName="example">
        <column name="name" type="VARCHAR(50)" defaultValue="">
            <constraints nullable="false"/>
        </column>
    </addColumn>

    <!-- Use modifySql so we can insert it in the desired position -->
    <modifySql>
        <append value=" AFTER some_column"/>
    </modifySql>
</changeSet>

【讨论】:

BTW append 当字段具有唯一约束时在 H2 上失败(因为在这种情况下将生成 2 个 ALTER TABLE 命令)。

以上是关于liquibase:你能用 liquibase addColumn 指定“列后”吗?的主要内容,如果未能解决你的问题,请参考以下文章

Liquibase endDelimiter 用法

[心得] 如何利用liquibase進行資料庫版本控制 - 基礎觀念

是否存在 liquibase 锁定超时?

如何使用 Liquibase 强制列顺序?

使用 Liquibase 创建雪花存储过程

Liquibase-数据库版本管理使用