我有一张桌子,我需要它的ID以1000000开头。 我为liquibase设置了这个代码:
<column name="id" type="bigint" autoIncrement="true" startWith="1000000">
<constraints primaryKey="true" nullable="false"/>
</column>
但它在postgres中不起作用,生成的序列生成器以1开头。 有没有人对此有任何想法?如何启用表从liquibase中与postgresql一起使用的值开始? 提前谢谢!
答案 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)
谢谢!删除并创建新的 - 帮助