我需要向一个高流量的大型 PostgreSQL 表(大约 2TB)添加主键。这是一项关键操作,我正在寻找如何有效地完成该操作的指导。
我已经尝试过以下步骤:
-- Step 1: Add id identity column
ALTER TABLE users
ADD COLUMN id BIGINT GENERATED ALWAYS as IDENTITY;
-- Step 2: Add unique index on (id, user_id) concurrently
CREATE UNIQUE INDEX CONCURRENTLY id_user_id_idx
ON users (id, user_id);
-- verify that step 2 is completed
-- Step 3: Add primary key
ALTER TABLE users
ADD CONSTRAINT users_pkey PRIMARY KEY USING INDEX id_user_id_idx;
Run Code Online (Sandbox Code Playgroud)
我面临两个问题:
表完全锁定在“步骤 1”本身上。
我知道这是预料之中的,但如果有任何选择可以避免这种情况,请提出建议。
我收到以下错误,
错误:无法扩展文件“base/16401/90996”:设备上没有剩余空间提示:检查可用磁盘空间。
但600GB
我的服务器上还有剩余的存储空间。
由于表将被锁定在“第 1 步”,并且如果没有选项可以避免这种情况,我可以利用停机时间id
先添加列,然后运行其他两个脚本。 …