Postgresql 像这样从复合PK迁移到单个PK安全吗
我有一个具有复合PK(code\u id,user\u id)的表,该表已经有100k条记录。像下面的例子一样,从复合PK移动到单个PK安全吗Postgresql 像这样从复合PK迁移到单个PK安全吗,postgresql,Postgresql,我有一个具有复合PK(code\u id,user\u id)的表,该表已经有100k条记录。像下面的例子一样,从复合PK移动到单个PK安全吗 ALTER TABLE orders DROP CONSTRAINT pk_code_id_user_id, ADD COLUMN order_id SERIAL, ADD CONSTRAINT pk_order_id PRIMARY KEY (order_id); 是的,这是安全的,而且会起作用 唯一的问题是,这句话可能需要一段时间才能
ALTER TABLE orders
DROP CONSTRAINT pk_code_id_user_id,
ADD COLUMN order_id SERIAL,
ADD CONSTRAINT pk_order_id PRIMARY KEY (order_id);
是的,这是安全的,而且会起作用 唯一的问题是,这句话可能需要一段时间才能完成:
- 所有行都必须使用
序列值进行更新默认值
- 建立了一个新的唯一索引
- PostgreSQL检查所有行的
order\u id是否不为NULL
ACCESS EXCLUSIVE
模式,因此即使在并发读取时也不可用
但是像这样的小桌子应该不是什么大问题
如果存在引用旧主键约束的外键约束,事情会变得更加复杂。您也必须删除这些内容,并考虑一个好的替代品。谢谢,pg是否也会删除复合索引(代码id、用户id)或在pk更改后保留?是的。如果删除约束,将自动删除实现约束的索引。