1、建立表接口
drop table if exists ncc_apple;
CREATE TABLE ncc_apple (
id BIGSERIAL NOT null PRIMARY KEY,
apple_name VARCHAR(128),
creator BIGINT,
create_time timestamp DEFAULT CURRENT_TIMESTAMP,
updater INT8,
update_time timestamp DEFAULT CURRENT_TIMESTAMP,
updated_dept BIGINT,
deleted SMALLINT DEFAULT 0
);
2、查看表接口的序列字段,以及名称
--nextval('ncc_apple_id_seq'::regclass)
3、插入id为1的数据,库里存在id为1的1条数据
INSERT INTO ncc_apple
(id, apple_name)
VALUES(1, '系统执行');
SELECT * FROM ncc_apple;
4、清除数据
--truncate 表之后,序列不受影响TRUNCATE TABLE ncc_apple;
5、再次插入id为1 的数据,出现违反唯一约束(这种场景出现在:当项目需要导入库内数据,且表与表之间的关系式根据主键id来的,那么数据就会存在重复)
6、解决重复问题,重置序列的最大值
【重置序列的最大值的语句具体讲解如下:】
从1中可以看出,这里的表名为ncc_apple, 主键为id,因因此是max(id), id主键的类型是BIGINT, 且默认值nextval('ncc_apple_id_seq'::regclass),所以,setval('ncc_apple_id_seq', .....)。
--重置序列的最大值
select setval('ncc_apple_id_seq',(select max(id) from ncc_apple)::BIGINT);
注意:如果要手动重置序列:ALTER SEQUENCE ncc_apple_id_seq RESTART WITH 2;
这里使用这句设置为从2开始,不起作用,因此这里本人选择使用重置序列的最大值