更改H2中的序列

Noa*_*oam 5 java h2 eclipselink liquibase

我正在生产中使用Postgres数据库,并在H2中使用它进行测试。我想为现有表创建一个新序列-因此在Liquibase中我这样写:

<changeSet id="Add sequence for BOOKS" author="library">
    <createSequence sequenceName="BOOKS_SEQ" incrementBy="500" startValue="1"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

我的实体看起来像这样:

@Entity
@Table(name = "BOOKS")
@SequenceGenerator(name = "BOOKS_SEQ", allocationSize = 500)
public class Book {

    @Id
    @GeneratedValue(generator = "BOOKS_SEQ", strategy = GenerationType.TABLE)
    private Long id;

    @ManyToOne
    @JoinColumn(name = "AUTHOR_ID")
        private Author author;
...

}
Run Code Online (Sandbox Code Playgroud)

现在,由于我已经在该表中有了实体(带有我使用的上一个序列的ID),因此需要相应地设置该序列的当前值。为此,我写道:

<changeSet id="Alter sequence for BOOKS" author="library">
    <sql dbms="postgresql">select setval('BOOKS_SEQ', (select nextval('OLD_SEQUENCE_UID')))</sql>
</changeSet>

<changeSet id="Add default value to BOOKS.ID" author="library">
    <addDefaultValue tableName="BOOKS" columnName="ID" defaultValueSequenceNext="BOOKS_SEQ"/>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

在Postgres(生产环境)中,它似乎可以正常工作-但在H2中,我收到一条错误消息“名为[BOOKS_SEQ]的序列设置不正确。其增量与预分配的大小不匹配”。

根据这个 -我需要设置START_VALUE(或电流值)的东西大于500 -但我无法弄清楚如何能够在下半年完成

所以我的问题是:如何在H2中设置序列的当前值?

小智 7

你尝试过这个吗?

alter sequence <your_sequence_name> restart with <next_value>
Run Code Online (Sandbox Code Playgroud)

例如:

alter sequence BOOKS_SEQ restart with 500
Run Code Online (Sandbox Code Playgroud)

当我运行上面的命令时,我将BOOKS_SEQ的当前值设置为499(因此下一个值将是500)。