【问题标题】:Handling of multiple parameter values in liquibase在 liquibase 中处理多个参数值
【发布时间】:2015-06-27 07:34:29
【问题描述】:

我们将使用 liquibase 参数值来控制多个支持的数据库引擎上的列类型。我希望能够在更改日志文件中指定列类型。首先针对所有 dbms 和(即来自 java.sql.Types.* 的内容),然后针对某些特定的内容覆盖它。

它可能看起来像这样:

<property name="DATETIME.type" value="TIMESTAMP"/>
<property name="DATETIME.type" value="DATE" dbms="oracle" />

但 Liquibase 似乎采用了第一个找到的参数值(所以在 oracle 上,上面示例中采用了 TIMESTAMP 类型)。 我可以通过像这样简单地更改行的顺序来可靠地达到预期的结果吗?:

<property name="DATETIME.type" value="DATE" dbms="oracle" />
<property name="DATETIME.type" value="TIMESTAMP"/>

编辑: 我想要存档的是支持新数据库而不需要更改类型映射 - 因此要对数据库使用 liquibase 默认值(java.sql.Types.* 类型),这与我们的旧数据库不兼容 -需要版本控制工具。

【问题讨论】:

    标签: liquibase


    【解决方案1】:

    我问过一个类似的问题,关于如何区分 liquibase here 中的数据库。

    虽然是关于序列,但我认为可以使用相同的方法来处理不同的列类型:

    <changeSet id="1" author="bob">
        <preConditions onFail="CONTINUE">
            <not>
                <dbms type="oracle" />
            </not>
        </preConditions>
    
            // contents of your changeset here
            <property name="DATETIME.type" value="TIMESTAMP"/>
    
    </changeSet>
    

    【讨论】:

    • 我们目前在变更日志中有超过 1500 个变更集,从我们的数据库导入。我无法想象,如何以这种方式实现数据库独立性。我们的 Oracle“整数”用“Number(9)”而不是 Number(10) 表示,“LONGVARBINARY”在 mssql 上用“IMAGE”表示。而且我必须确保 liquibase 版本控制与我们以前的旧版 db-versioning 工具的兼容性。
    • 我认为 - 通常 - 数据库独立性已经(或应该)内置于 liquibase 本身,因此您根本不必考虑它。 Liquibase 带有数据库方言,当它解析您的更改日志时,它会将数据库转换为特定数据库的正确数据类型。这就是它应该如何工作的方式。但是,如果您有需要其他类型的需求,您可能必须使用 preConditions 之类的东西来处理它。
    • 另一种方法可能是使用 liquibase 提供的扩展系统,并根据您的特定要求覆盖默认类型处理。但不知道扩展系统是否允许你拦截类型处理...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多