带有 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>