postgresql - 像这样从复合 PK 迁移到单个 PK 是否安全
问题描述
我有一个带有复合 PK (code_id, user_id)的表,它已经有 10 万条记录。从复合 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
模式,因此即使并发读取也无法使用。
但是像这样的小桌子应该不是什么大问题。
如果存在引用旧主键约束的外键约束,事情会变得更加复杂。您也必须放弃这些并考虑一个好的替代品。
推荐阅读
- javascript - AngularJS - 从开发工具编辑范围函数
- python - ValueError:无法将字符串转换为浮点数:'n'
- android - RecyclerView items with different heights with FlexboxLayoutManager
- sql-server - How to transform data with SSIS Transfer SQL Server Objects Task?
- python - Take a 2D list of any even dimensions and return a list holding the count of thing for each 2 X 2 grid (Python)
- php - Making a 2 coloumn table with PHP without 'echoing' so much
- c# - C#“预期方法名称”
- twain - TWAIN 视频捕捉
- azure - Unable to Create Storage pool on Azure VM 2016
- php - Codeigniter 2 项目登录重定向到端口号 - 无法访问此站点