如何使用 Liquibase 插入序列

How to insert using a sequence with Liquibase

我想做一个 liquibase 插入,主键是根据数据库中定义的序列自动生成的。目标数据库是 HSQLDB。

执行指定主键值的插入操作有效

<insert ...>
   <column name="TAG_ID" valueNumeric="2"/>

我找到了这个(诚然较旧)conversation about it,但问题仍然存在。建议的修复不适用于 HSQLDB。

看着 the docs 我已经尝试了一些东西,比如

<column name="TAG_ID"  defaultValueSequenceNext="TAG_ID_SEQ" />

<column name="TAG_ID"  defaultValueSequenceNext="TAG_ID_SEQ.NEXTVAL" />

<column name="TAG_ID"  valueComputed="TAG_ID_SEQ.NEXTVAL" />

<column name="TAG_ID"  autoIncrement="true" />

但是其中 none 在我执行插入操作时将任何内容放入键中(插入操作因主键为空而失败)。

如何做到这一点?

HSQLDB 有使用 Oracle 语法的设置。您可以将 HSQLDB 设置为使用 oracle 语法,如下所示:

<changeSet ...
    <sql dbms="hsqldb" >SET DATABASE SQL SYNTAX ORA TRUE</sql>
</changeSet>

之后,它可以像这样进行插入:

<insert ...
    <column name="TAG_ID" valueComputed="TAG_ID_SEQ.NEXTVAL"/>