带有 PostgresQL 和 H2 的 Liquibase 脚本
Liquibase scripts with PostgresQL and with H2
目前我的默认 Liquibase 脚本设置没有提供 dbms - 这应该被视为 'is valid for all databases'。
一些脚本依赖于数据库特定的功能,如 JSONB:
POSTGRES
<changeSet id="add_jsonb_field" author="me" dbms="postgresql">
<preConditions />
<addColumn tableName="postgresTable">
<column name="someField" type="JSONB" />
</addColumn>
<rollback />
</changeSet>
H2
<changeSet id="add_text_field" author="me" dbms="h2">
<preConditions />
<addColumn tableName="postgresTable">
<column name="someField" type="text" />
</addColumn>
<rollback />
</changeSet>
我目前的假设是,在没有指定 dbms 的情况下,该脚本适用于任何数据库。指定 dbms 后,它仅适用于给定的数据库类型。
因此 h2 应该执行所有通用脚本以及带有 h2 标记的脚本。
我的假设是否正确,或者 h2 是否会遗漏不带 dbms 标记的脚本?
我会采用不同的方法来避免必须将 <addColumn>
写两次。
在您的“主要”变更日志中(在任何其他变更集之前),放入以下 属性 定义:
<property name="json_type" value="jsonb" dbms="postgresql"/>
<property name="json_type" value="text" dbms="h2"/>
那么您只需要一个变更集(没有 dbms
属性),它使用数据类型的占位符:
<changeSet id="add_json_column" author="me">
<preConditions />
<addColumn tableName="postgresTable">
<column name="someField" type="${json_type}" />
</addColumn>
<rollback />
</changeSet>
目前我的默认 Liquibase 脚本设置没有提供 dbms - 这应该被视为 'is valid for all databases'。
一些脚本依赖于数据库特定的功能,如 JSONB:
POSTGRES
<changeSet id="add_jsonb_field" author="me" dbms="postgresql">
<preConditions />
<addColumn tableName="postgresTable">
<column name="someField" type="JSONB" />
</addColumn>
<rollback />
</changeSet>
H2
<changeSet id="add_text_field" author="me" dbms="h2">
<preConditions />
<addColumn tableName="postgresTable">
<column name="someField" type="text" />
</addColumn>
<rollback />
</changeSet>
我目前的假设是,在没有指定 dbms 的情况下,该脚本适用于任何数据库。指定 dbms 后,它仅适用于给定的数据库类型。
因此 h2 应该执行所有通用脚本以及带有 h2 标记的脚本。
我的假设是否正确,或者 h2 是否会遗漏不带 dbms 标记的脚本?
我会采用不同的方法来避免必须将 <addColumn>
写两次。
在您的“主要”变更日志中(在任何其他变更集之前),放入以下 属性 定义:
<property name="json_type" value="jsonb" dbms="postgresql"/>
<property name="json_type" value="text" dbms="h2"/>
那么您只需要一个变更集(没有 dbms
属性),它使用数据类型的占位符:
<changeSet id="add_json_column" author="me">
<preConditions />
<addColumn tableName="postgresTable">
<column name="someField" type="${json_type}" />
</addColumn>
<rollback />
</changeSet>