Liquibase generatechangelog 动态日期

Liquibase generatechangelog dynamic dates

我正在尝试使用 liquibase 生成变更日志。要求是使用动态日期构建 liquibase 脚本。这意味着无论何时脚本运行,日期都将根据当前日期计算。 有没有办法让 liquibase 以这种方式自动生成日期字段?

例子

<insert tableName="account">
        <column name="id" value="1"/>
        <column name="availablebalance" valueNumeric="36239.07"/>
        <column name="currentbalance" valueNumeric="36000.00"/>
        <column name="maturitydate" valueDate="2015-09-30"/>
        <column name="opendate" valueDate="2012-09-30"/>
        <column name="status" value="OPEN"/>
        <column name="title" value="Alpha Deposit"/>
        <column name="version" valueNumeric="0"/>
        <column name="type_id" valueNumeric="20"/>
        <column name="product_id" valueNumeric="2010101121"/>
    </insert>

应该是这样的

<insert tableName="account">
        <column name="id" value="1"/>
        <column name="availablebalance" valueNumeric="36239.07"/>
        <column name="currentbalance" valueNumeric="36000.00"/>
        <column name="maturitydate" valueDate="current_date + interval '-5 months'"/>
        <column name="opendate" valueDate="current_date + interval '-5 months'"/>
        <column name="status" value="OPEN"/>
        <column name="title" value="Alpha Deposit"/>
        <column name="version" valueNumeric="0"/>
        <column name="type_id" valueNumeric="20"/>
        <column name="product_id" valueNumeric="2010101121"/>
    </insert>

不,Liquibase 没有任何功能可以满足您的需求。您需要向 post 写入一些内容 - 处理 XML 以更改日期值。

一种可能是在 XML 中扫描具有 valueDate 属性的 <column> 元素,并用未扩展的属性替换值,这样 XML看起来像这样:

<insert tableName="account">
        <column name="id" value="1"/>
        <column name="availablebalance" valueNumeric="36239.07"/>
        <column name="currentbalance" valueNumeric="36000.00"/>
        <column name="maturitydate" valueDate="${todayMinusFiveMonths}"/>
        <column name="opendate" valueDate="${todayMinusFiveMonths}"/>
        <column name="status" value="OPEN"/>
        <column name="title" value="Alpha Deposit"/>
        <column name="version" valueNumeric="0"/>
        <column name="type_id" valueNumeric="20"/>
        <column name="product_id" valueNumeric="2010101121"/>
    </insert>

... 然后在文件顶部添加一个 <property> 标记,定义实际值应该是什么。那看起来像这样:

<databaseChangeLog 
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">

    <property name="todayMinusFiveMonths" value="2015-11-10"/>
    ...
    remainder of changelog
    ...

请注意,即使在那里,您也必须为日期输入一个预先计算的值 - 我认为 Liquibase 没有能力在运行时进行任何类型的日期评估。