首页 > 解决方案 > 如何使用 runAlways SQL changeSet

问题描述

我正在测试 LiquiBase,所以我创建了第一个更改日志来测试安装和设置并且它有效

--liquibase formatted sql

--changeset bob:1
create table test1 (
    id int primary key,
    name varchar(255)
);

我要测试的是runAlways,所以我创建了新的变更集:

-- liquibase formatted sql

-- changeset betlista:4
-- runAlways: true
insert into test1(id, name) values( 
      (select nvl(max(id) + 1, 1) from test1)
    , 'test ' || sysdate
);

我的期望是,当我运行它(不增加版本)时,它会将新记录插入表中,但事实并非如此。仅在我增加版本时才插入。

标签: oracleliquibase

解决方案


哦,我发现了一个问题

  • 后面不能有空格runAlways:
  • 它必须与变更集在一条线上

这对我来说很好

-- liquibase formatted sql

-- changeset betlista:8 runAlways:true
insert into test1(id, name) values( 
      (select nvl(max(id) + 1, 1) from test1)
    , 'test 8 ' || to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')
);

选择

在前面的示例中,更改日志是基于 SQL 的,当然,这不是唯一的选择。

我更喜欢将 changelog 作为 XML(因为我可以在我的 IDE 中完成代码)并将脚本作为 SQL(因为大多数人都熟悉它)。

所以解决方案是

<?xml version="1.0" encoding="UTF-8"?>
<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"
    xmlns:pro="http://www.liquibase.org/xml/ns/pro"
    xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd
    http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd
    http://www.liquibase.org/xml/ns/pro http://www.liquibase.org/xml/ns/pro/liquibase-pro-3.8.xsd ">

    <changeSet id="10" author="betlista" runAlways="true">
        <sqlFile path="insert_test1.sql" relativeToChangelogFile="true" />
    </changeSet>

</databaseChangeLog>
insert into test1(id, name) values( 
      (select nvl(max(id) + 1, 1) from test1)
    , 'test 10 ' || to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss')
);

推荐阅读