小编suj*_*eet的帖子

向高流量的大型 PostgreSQL 表添加主键

我需要向一个高流量的大型 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先添加列,然后运行其他两个脚本。 …

postgresql index primary-key amazon-rds

5
推荐指数
1
解决办法
1271
查看次数

标签 统计

amazon-rds ×1

index ×1

postgresql ×1

primary-key ×1