使用Liquibase将数据库从一个版本迁移到另一个版本

时间:2019-07-18 12:11:19

标签: database-migration liquibase liquibase-hibernate

我推出了该应用程序的第一个版本,并为此安装了一个Postgres服务器。

我计划推出第二个版本的应用程序,该版本在表中进行了结构更改。

例如:我的App表中有一个名为version的列,现在我还有另一个名为releaseVersion的列,我必须应用alter来添加此列。在这种情况下,如何使用{{1 }}生成/应用liquibase脚本?

migration能够做到liquibase吗?

简而言之,在我的第一个版本中,我使用DDL创建了表格

migration

现在我的数据库在上面的列中。

我需要使用CREATE TABLE App (version varchar); // I manually generated this using liquibase offline mode and my metadata. 生成alter来添加列。像这样

liquibase

是否可以使用ALTER TABLE App ADD releaseVersion varchar; ,因为它是Liquibase的行业标准。

我使用了migration,但是它只能从两个数据库(liquibase:diffchangelog)创建差异target db。就我而言,只有一个生产数据库。

1 个答案:

答案 0 :(得分:1)

是的,有可能。

创建一个changeSet,如:

<changeSet author="foo" id="bar">
    <preConditions onFail="MARK_RAN">
        <and>
            <columnExists tableName="App" columnName="version"/>
            <not>
                <columnExists tableName="App" columnName="releaseVersion"/>
            </not>
        </and>
    </preConditions>
    <renameColumn tableName="App" oldColumnName="version" newColumnName="releaseVersion" columnDataType="varchar(100)"/>
</changeSet>

并使用liquibase update命令应用它。

如果您只需要添加一个新列,那么您的changeSet将如下所示:

<changeSet id="foo" author="bar">
    <preConditions onFail="MARK_RAN">
        <not>
            <columnExists tableName="App" columnName="releaseVersion"/>
        </not>
    </preConditions>
    <addColumn tableName="App">
        <column name="releaseVersion" type="varchar(100)"/>
    </addColumn>
</changeSet>