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');