我推出了该应用程序的第一个版本,并为此安装了一个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:diff
和changelog
)创建差异target db
。就我而言,只有一个生产数据库。
答案 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>