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)
执行此操作的正确方法是使用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)