我有一个具有复合PK的表(code_id,user_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);
是的,这是安全的,而且会起作用。
唯一的问题是这个语句可能需要一段时间才能完成:
-
所有行都必须使用
DEFAULT
序列值进行更新 -
建立了一个新的唯一索引
-
PostgreSQL检查所有行的
order_id IS NOT NULL
在此期间,表被锁定在ACCESS EXCLUSIVE
模式下,因此即使进行并发读取也不可用。
但是有这样一张小桌子应该不是什么大问题。
如果存在引用旧主键约束的外键约束,情况会变得更加复杂。你也必须放弃这些,想一个好的替代品。