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 没有能力在运行时进行任何类型的日期评估。
我正在尝试使用 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 没有能力在运行时进行任何类型的日期评估。