像这样从复合PK迁移到单个PK安全吗



我有一个具有复合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模式下,因此即使进行并发读取也不可用。

但是有这样一张小桌子应该不是什么大问题。

如果存在引用旧主键约束的外键约束,情况会变得更加复杂。你也必须放弃这些,想一个好的替代品。

最新更新