PostgreSQL将bigserial主键列转为UUID列报错,正确语法是什么
PostgreSQL修改bigserial类型主键为UUID的正确操作
报错原因
你执行的两条语句出现语法错误,是因为修改字段类型必须指定TYPE关键字,你漏掉了该关键字导致SQL解析失败。
前置准备
首先需要确保已启用uuid-ossp扩展,否则uuid_generate_v4()函数无法使用:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
完整操作步骤
- 第一步:查询并删除原有的主键约束(bigserial类型的id默认会绑定主键约束,直接修改类型会失败)
先查询主键约束名,默认通常为people_pkey:
执行删除操作:SELECT conname FROM pg_constraint WHERE conrelid = 'people'::regclass AND contype = 'p';ALTER TABLE people DROP CONSTRAINT people_pkey; - 第二步:修改id列类型为UUID,同时为已存在的行生成UUID值
ALTER TABLE people ALTER COLUMN id TYPE UUID USING (uuid_generate_v4()); - 第三步:重新将id列设置为主键
ALTER TABLE people ADD PRIMARY KEY (id);
注意事项
如果该id字段有被其他表的外键关联,需要先删除所有关联的外键约束,待类型修改完成后再重新建立外键关联。
内容的提问来源于stack exchange,提问作者user16767975
相关产品推荐
相关产品推荐

