sqlserver表转pgsql时有自增的列不会转过来(PostgreSQL 实现ID自增的几种方法)
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
一、为现有表添加自增功能方法1:使用SERIAL/BIGSERIAL(简单方案)sql -- 修改现有列ALTER TABLE public.mis_action_log ALTER COLUMN id SET DATA TYPE BIGSERIAL; 方法2:使用IDENTITY(PostgreSQL 10+标准方案)sql -- 修改现有列ALTER TABLE public.mis_action_log ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY; 方法3:手动创建序列(灵活方案)sql -- 1. 创建序列CREATE SEQUENCE public.mis_action_log_id_seq;-- 2. 关联序列到列ALTER TABLE public.mis_action_log ALTER COLUMN id SET DEFAULT nextval('public.mis_action_log_id_seq');-- 3. 设置序列归属ALTER SEQUENCE public.mis_action_log_id_seq OWNED BY public.mis_action_log.id; 二、设置自增ID从特定值开始1. 查看当前最大ID值sql SELECT MAX(id) FROM public.mis_action_log; 2. 设置序列起始值对于SERIAL/BIGSERIAL序列:sql ALTER SEQUENCE mis_action_log_id_seq RESTART WITH [最大ID值+1]; 对于IDENTITY列:sql ALTER TABLE public.mis_action_log ALTER COLUMN id RESTART WITH [最大ID值+1]; 3. 自动化脚本(一步完成)sql DO $$DECLARE max_id bigint;BEGIN SELECT COALESCE(MAX(id), 0) INTO max_id FROM public.mis_action_log; EXECUTE format('ALTER SEQUENCE mis_action_log_id_seq RESTART WITH %s', max_id + 1);END $$; 4. 使用UUID作为自增替代方案(比较麻烦,一般不用)sql
CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TABLE users ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), name VARCHAR(100) ); 比较各种方法
三、验证自增设置sql -- 查看序列当前值SELECT last_value FROM mis_action_log_id_seq;-- 测试插入(不指定ID)INSERT INTO public.mis_action_log(source_sort) VALUES('test') RETURNING id;-- 检查序列下一个值SELECT nextval('mis_action_log_id_seq'); 四、完整工作流程示例sql -- 1. 添加自增功能(选择一种方法)ALTER TABLE public.mis_action_log ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY;-- 2. 设置从最大ID+1开始DO $$DECLARE max_id bigint;BEGIN SELECT COALESCE(MAX(id), 0) INTO max_id FROM public.mis_action_log; EXECUTE format('ALTER TABLE public.mis_action_log ALTER COLUMN id RESTART WITH %s', max_id + 1);END $$;-- 3. 验证INSERT INTO public.mis_action_log(source_sort) VALUES('验证插入') RETURNING id; 注意事项
通过以上步骤,可以为现有表添加自增ID功能,并确保新ID从已有数据的最大ID后开始递增。 该文章在 2025/8/13 10:30:55 编辑过 |
关键字查询
相关文章
正在查询... |