【问题标题】:How to insert using a sequence with Liquibase如何使用 Liquibase 插入序列
【发布时间】:2015-07-27 11:27:16
【问题描述】:

我想做一个 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" />

但是当我进行插入时,这些都没有在键中放入任何东西(插入在空主键上失败)。

如何做到这一点?

【问题讨论】:

    标签: hsqldb liquibase


    【解决方案1】:

    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"/>
    

    【讨论】:

    • h2 有类似的东西吗?
    • H2 具有此处引用的 Oracle 兼容模式 (h2database.com/html/features.html) 但我还没有尝试过,所以 YMMV。如果您发现它有效,请随时在此处发帖!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多