使用postgresql数据库在liquibase中设置初始值

时间:2018-02-14 13:15:32

标签: sql postgresql hibernate liquibase

我有一张桌子,我需要它的ID以1000000开头。 我为liquibase设置了这个代码:

        <column name="id" type="bigint" autoIncrement="true" startWith="1000000">
            <constraints primaryKey="true" nullable="false"/>
        </column>

但它在postgres中不起作用,生成的序列生成器以1开头。 有没有人对此有任何想法?如何启用表从liquibase中与postgresql一起使用的值开始? 提前谢谢!

3 个答案:

答案 0 :(得分:2)

只是alterSequence无济于事:

    <alterSequence 
            minValue="1000000"
            sequenceName="t1_id_seq"/>
  

运行Liquibase时出现意外错误:ERROR:START值(1)不能   小于M INVALUE(1000000)[失败的SQL:ALTER SEQUENCE   public.t1_id_seq MINVALUE 1000000]

根据文档,您无法使用alterSequence启动序列,因此您必须createSequence使用

<createSequence 
        sequenceName="seq_id"
        startValue="1000000"/>

然后将其“指定”为bigint列的默认值

  <sql dbms="postgresql" endDelimiter=";\n"  splitStatements="true"
        stripComments="true">ALTER TABLE t1 ALTER COLUMN id SET DEFAULT nextval('seq_id');
  </sql>

或最初使用bigserial和sql重启序列:

<changeSet author="Vao" id="1">
    <createTable tableName="t2">
        <column name="id" type="bigserial">
            <constraints primaryKey="true" primaryKeyName="t2_pkey"/>
        </column>
    </createTable>
</changeSet>

<changeSet author="Vao" id="2">
  <sql dbms="postgresql" endDelimiter=";">ALTER SEQUENCE t2_id_seq restart with 1000;
  </sql>
</changeSet>

答案 1 :(得分:2)

不幸的是,startWith似乎不适用于postgres db。 您可以使用(使用yaml配置):

- changeSet:
  id: add-auto-increment-postgres
  author: me
  dbms: postgresql
  changes:
    - createSequence:
        sequenceName: my_sequence
        startValue: 1000
    - addDefaultValue:
        columnName: id
        defaultValueSequenceNext: my_sequence
        tableName: my_table

答案 2 :(得分:0)

谢谢!删除并创建新的 - 帮助

  1. dropSequence
  2. 创建序列