【问题标题】:Liquibase generatechangelog dynamic datesLiquibase generatechangelog 动态日期
【发布时间】:2016-03-11 12:34:15
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

  • 如果您添加一个示例可能会有所帮助。你指的是什么日期?我认为generateChangeLog 本身没有这样的功能。但对我来说,在运行generateChangeLog 时,您希望计算出什么样的日期并不清楚?

标签: liquibase


【解决方案1】:

不,Liquibase 没有任何功能可以执行您正在寻找的任何事情。您需要编写一些东西来对 XML 进行后处理以更改日期值。

一种可能性是扫描 XML 以查找具有 valueDate 属性的 &lt;column&gt; 元素,并将这些值替换为未扩展的属性,以便 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>

... 然后在文件顶部添加一个&lt;property&gt; 标记,用于定义实际值应该是什么。看起来像这样:

<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 无法在运行时进行任何类型的日期评估。

【讨论】:

  • 这是我一直在努力避免的,但我认为我不会
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2021-10-10
  • 2014-08-29
相关资源
最近更新 更多