【问题标题】:Set initial value in liquibase with postgresql database使用 postgresql 数据库在 liquibase 中设置初始值
【发布时间】:2018-07-25 02:00:03
【问题描述】:

我有一张桌子,我需要它的 ID 从 1000000 开始。 我为 liquibase 设置了此代码:

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

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

【问题讨论】:

  • PostgreSQL 有串行类型:serialbigserial,默认从 1 开始,递增 1。我不熟悉 liquibase,但如果它允许你处理序列,你可以试试ALTER SEQUENCE your_seq RESTART WITH 1000000

标签: sql postgresql hibernate liquibase


【解决方案1】:

只是 alterSequence 无济于事:

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

运行 Liquibase 时出现意外错误:ERROR: START value (1) cannot be 小于 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>

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

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

      1. 丢弃序列
      2. 创建序列

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-04
        • 2021-08-16
        • 2014-04-28
        • 2020-09-25
        • 2014-05-12
        相关资源
        最近更新 更多