如何使用 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"/>
我想做一个 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"/>