postgresql使用navicat软件导出数据库表,在导入会数据库的操作。
postgresql 的自增字段 是通过 序列 sequence来实现的。
1、先删除导出的数据库表中的自增属性
2、导入数据库表之后,需要创建序列。
注:一般序列名称由数据表名+主键字段+seq组成 (通常情况下主键字段即为自增字段),如下表名为cof_table_hot_analysis,主键字段为 id
create sequence cof_table_hot_analysis_id_seq start with 1 increment by 1 no minvalue no maxvalue cache 1;
3、设置表字段(id)自增sql
alter table cof_table_hot_analysis alter column id set default nextval('cof_table_hot_analysis _id_seq ');
4、上面三步设置完之后
自增字段id默认值是1,如果需要设置自增之后的其实数值,例如16
函数 | 返回类型 | 描述 |
---|---|---|
nextval(regclass) | bigint | 递增序列对象到它的下一个数值并且返回该值。这个动作是自动完成的。即使多个会话并发运行nextval,每个进程也会安全地收到一个唯一的序列值。 |
currval(regclass) | bigint | 在当前会话中返回最近一次nextval抓到的该序列的数值。(如果在本会话中从未在该序列上调用过 nextval,那么会报告一个错误。)请注意因为此函数返回一个会话范围的数值,而且也能给出一个可预计的结果,因此可以用于判断其它会话是否执行过nextval。 |
lastval() | bigint | 返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 |
setval(regclass, bigint) | bigint | 重置序列对象的计数器数值。设置序列的last_value字段为指定数值并且将其is_called字段设置为true,表示下一次nextval将在返回数值之前递增该序列。 |
setval(regclass, bigint, boolean) | bigint | 重置序列对象的计数器数值。功能等同于上面的setval函数,只是is_called可以设置为true或false。如果将其设置为false,那么下一次nextval将返回该数值,随后的nextval才开始递增该序列。 |
注意序列名中有大写字母时,regclass参数值需要用双引号括和单引号一起括起来,比如:
select nextval('"ACT_ChecklistItem_Id_seq"');
除了setval函数,还有另一种方法也是修改sequence的start_value,也是会更新序列的当前值:
项目部署上去需要插入一些基础数据,所以新增数据的ID不是从1开始,修改sequence的start_value (下次执行nextval得到的是start_value,而不是start_value+1) 。
alter sequence s_seq restart with 2
相当于select setval('s_seq',2,false)
select setval('cof_table_hot_analysis_id_seq', 16)
5、清空表格时要重置序列新数据才会从1开始自增
truncate table cof_table_hot_analysis restart identity
扩展:
删除序列:
drop sequence [ if exists ] name [, ...] [ cascade | restrict ]
修改序列:
alter sequence name [ increment [ by ] increment ] [ minvalue minvalue | no minvalue ] [ maxvalue maxvalue | no maxvalue ] [ start [ with ] start ] [ restart [ [ with ] restart ] ] [ cache cache ] [ [ no ] cycle ] [ owned by { table.column | none } ]alter sequence name owner to new_owneralter sequence name rename to new_namealter sequence name set schema new_schema
补充:pgsql添加自增序列、设置表某个字段自增
添加自增序列
create sequence 表名_id_seqstart with 1increment by 1no minvalueno maxvaluecache 1;
设置表某个字段自增
alter table表名 alter column id set default nextval(‘表名_id_seq');
从当前最大id依次递增
select setval(‘表名_id_seq',(select max(id) from 同一个表名));
大写字符的表需要加双引号。
例如:
select setval('“表名_id_seq”',(select max(id) from “表名”));
标签:postgresql,seq,nextval,sequence,设自增,导入,序列,table,id
From: https://www.cnblogs.com/javaxubo/p/17498244.html