postgresql自增主键这样设置

"id" int2 NOT NULL DEFAULT nextval('process_map_id_seq'::regclass)

配置自增序列后,java 新增对象时不用维护id 属性;

1.postgresql序列,mysql对比

在mysql 中创建自增主键:

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Task ID',

postgresql中也有自增主键,但不是这样创建。

2. postgresql序列,创建

序列相当于mysql的自增主键,一个序列用于一张表,有两种创建方式,建议使用第一种。

2.1 建表时,创建并使用

serial4 代表了一种类型,如同mysql的 int4 auto_increment,我们完全不用管其内部的原理。

-- 建表时注明,这个字段使用序列,建表时会自动创建和绑定序列,
-- 使用默认序列命名:表面名称_字段名称_seq
id           serial4 NOT NULL,

这就代表创建并绑定序列了,相比第二种方式有两个优点:
一、不用再手动单独的创建序列,删表时也不用级联删除序列。
二、最大的优点,数据库迁移的时候,不用二次迁移处理序列。
参考
https://www.cnblogs.com/alianbog/p/5654604.html

2.2 先创建,再使用
-- 先创建序列,再使用序列
CREATE SEQUENCE process_map_id_seq START 10;
-- 建表sql,使用序列
"id" int2 NOT NULL DEFAULT nextval('process_map_id_seq'::regclass),

navicat 给某个字段新增或删除序列
在这里插入图片描述

3. postgresql序列,删除
-- 删除表时,需要删除序列
--  drop table process_map;
drop SEQUENCE process_map_id_seq CASCADE;
4. postgresql序列,主键冲突

创建序列后,不允许手动再数据库创建数据,不然,之后的新增接口会报错,主键冲突,
如何解决,执行下面的sql

-- 给序列设置新的起始值
SELECT setval('dim_product_check_list_pool_id_seq ', 2);
-- 序列id加一 SEQUENCE
SELECT setval('process_map_id_seq ', (SELECT MAX(id) FROM process_map)+1);

5. 给指定的字段添加序列

有时候现有表和数据,需要在已有字段基础上添加序列;

select max(id) from ac_user; -- 1841

CREATE SEQUENCE ac_user_id_seq START 1841; -- 创建后自动增加

alter table ac_user alter column id set default nextval('ac_user_id_seq');
6. 重新设置序列初始值

将已有的数据库和序列复制后,需要重新设置序列初始值:

ALTER SEQUENCE sys_log_id_seq RESTART WITH 1;

SELECT nextval('sys_log_id_seq');
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐