liquibase 中的自动增量

Dan*_*eda 6 java postgresql liquibase

如何使用 liquibase 在 PostgreSQL 中的列上使用“startWith”设置自动增量属性?

由于某种原因,它总是从 1 开始。我尝试使用自定义序列,但这也没有帮助。

<column autoIncrement="true" startWith="100" name="id" type="bigint">
Run Code Online (Sandbox Code Playgroud)

这是我当前的列定义,但不起作用。

编辑:

我想使用 liquibase 从 csv 导入数据。我尝试了以下方法:

<changeSet author="author" id="createSequence">
    <createSequence
                    incrementBy="1"
                    sequenceName="mytable_id_seq"
                    startValue="1000"/>
    </changeSet>
</changeSet>


<changeSet author="author" id="1-mytable">
    <createTable tableName="mytable">
        <column name="id" type="BIGSERIAL" defaultValueComputed="nextval('mytable_id_seq')">
              <constraints primaryKey="true" primaryKeyName="mytable_pkey"/>
        </column>
    </createTable>

    <loadData encoding="UTF-8"
              file="liquibase/data/mytable.csv"
              separator=","
              tableName="mytable">
    </loadData>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样做,我会收到以下错误“序列“table_id_seq”的currval在此会话中尚未定义”,并且我认为它使用公共模式中的序列而不是我设置为liquibase的序列。

  1. 我尝试的另一件事是手动更新它:

ALTER SEQUENCE mytable_id_seq 以 100 重新启动;

在这种情况下,使用的序列是公共模式中的序列,但我想使用设置为 liquibase 的模式

小智 1

如果您要设置自己的增量和序列,请不要使用 bigserial(这是 postgres 特有的自动增量 bigint),而是使用 bigint。“数据类型smallserial、serial和bigserial不是真正的类型,而仅仅是创建唯一标识符列的符号方便(类似于其他一些数据库支持的AUTO_INCRMENT属性)。在当前的实现中,指定:”

CREATE TABLE tablename (
    colname SERIAL
);
Run Code Online (Sandbox Code Playgroud)

是相同的

CREATE SEQUENCE tablename_colname_seq AS integer;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;
Run Code Online (Sandbox Code Playgroud)

从这里

https://www.postgresql.org/docs/12/datatype-numeric.html