PostgreSql 项目实战 9 - 主键自增处理

34 阅读1分钟

1. 创建序列

CREATE SEQUENCE verifac_software_info_id;	-- 序列

2 修改序列所有者为 postgres(与表一致)

ALTER SEQUENCE verifac_software_info_id OWNER TO postgres;	-- 序列

3. 修改现有表的主键为使用序列

ALTER TABLE "public"."verifac_software_info"  -- 表
ALTER COLUMN "id" SET DEFAULT nextval('verifac_software_info_id');	-- 主键字段名 + 序列

4. 将序列的当前值设置为表中最大ID+1

SELECT setval('verifac_software_info_id', COALESCE(MAX("id"), 0) + 1) -- 序列 + 主键字段名
FROM "public"."verifac_software_info"; -- 表

5. 将序列与表列关联

ALTER SEQUENCE verifac_software_info_id -- 序列
OWNED BY "public"."verifac_software_info"."id";	-- 表 + 主键字段名

------------------------------------- 异常处理 ---------------------------------------------

6 查看序列和表的所有者

SELECT schemaname, sequencename, sequenceowner 
FROM pg_sequences 
WHERE sequencename LIKE '%tenant_tenant_id_seq%';

7 查看所有表的所有者(过滤public模式)

SELECT 
    tablename,
    tableowner,
    schemaname
FROM pg_tables 
WHERE schemaname = 'public'
ORDER BY tableowner, tablename;

8 查看特定表的所有者

SELECT 
    tablename,
    tableowner,
    schemaname
FROM pg_tables 
WHERE tablename = 'sys_tenant_rigister_pay';

8.1 修改表的所属

ALTER TABLE erp_print_config OWNER TO postgres;s

9 查看序列名称

SELECT sequencename FROM pg_sequences 
WHERE sequencename LIKE '%tenant_rigister_pay%';

-- 修改序列所有者为 postgres(与表一致)
ALTER SEQUENCE tenant_rigister_pay_pay_id_seq OWNER TO postgres;