如果条目不存在,则插入到表列中

Adr*_*ian 4 java xml liquibase

在 Liquibase 中,如果尚未设置值,我想插入值。对于普通插入,我怀疑如果该值已经存在,则插入的值将覆盖先前的值。如果它不存在,我希望它插入任何内容。这能做到吗?

现在我正在使用插入,如下所示:

<insert tableName="state">
  <column name="name" value="fooFoo"/>
  <column name="enabled" valueBoolean="true"/>
</insert>
Run Code Online (Sandbox Code Playgroud)

hts*_*ame 6

执行此操作的正确方法是使用preConditions.

有一个<sqlCheck> 前提条件

sql检查

执行 SQL 字符串并检查返回值。SQL 必须返回具有单个值的单行。要检查行数,请使用“count”SQL 函数。要检查值的范围,请在 SQL 中执行检查并返回一个可以轻松进行比较的值。

<sqlCheck expectedResult="1">SELECT COUNT(1) FROM pg_tables WHERE TABLENAME = 'myRequiredTable'</sqlCheck>

有了它,您的变更集将如下所示:

<changeSet id="foo" author="bar">
    <preConditions onFail="MARK_RAN">
        <sqlCheck expectedResult="0">
            SELECT COUNT(*) FROM state WHERE name='fooFoo' AND enabled=true;
        </sqlCheck>
    </preConditions>
    <insert tableName="state">
      <column name="name" value="fooFoo"/>
      <column name="enabled" valueBoolean="true"/>
    </insert>
</changeSet>
Run Code Online (Sandbox Code Playgroud)