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的序列。
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
| 归档时间: |
|
| 查看次数: |
5201 次 |
| 最近记录: |