Alter sequence in H2

心已入冬 提交于 2020-05-13 05:27:13

问题


I'm using Postgres database in production and H2 for tests. I want to create a new sequence for an existing table - so in Liquibase I wrote this:

<changeSet id="Add sequence for BOOKS" author="library">
    <createSequence sequenceName="BOOKS_SEQ" incrementBy="500" startValue="1"/>
</changeSet>

My Entity looks like this:

@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;
...

}

Now, since I already have entities in this table (with Ids from the last sequence I used), I need to set the current value of this sequence accordingly. For that matter I wrote:

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

In Postgres (production), it seems to work just fine - but in H2 I get an error message "The sequence named [BOOKS_SEQ] is setup incorrectly. Its increment does not match its pre-allocation size".

According to this - I need to set the start_value (or current value) to something greater than 500 - but I can't figure out how this can be done in H2.

So my question is: How can I set the current value of a sequence in H2?


回答1:


Have you tried with this?

alter sequence <your_sequence_name> restart with <next_value>

For example:

alter sequence BOOKS_SEQ restart with 500

When I run the above command, I have BOOKS_SEQ set its current value to 499 (so the next value will be 500).



来源:https://stackoverflow.com/questions/41100306/alter-sequence-in-h2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!