有没有一种方法可以在巨大的 table 上在 postgres 12 中执行 ALTER Column 而无需等待一生?

Is there a method to do an ALTER Column in postgres 12 on an huge table without waiting a lifetime?

有没有一种方法可以在巨大的 table 上在 postgres 12 中执行 ALTER COLUMN 而无需等待一生?

我尝试将字段从 bigint 转换为 smallint :

ALTER TABLE huge ALTER COLUMN result_code TYPE SMALLINT;

需要28个小时,有没有更聪明的方法? table 有序列、键和外键

table要重写,还得等

如果要更改多个列的数据类型,可以在单个 ALTER TABLE 语句中使用多个 ALTER COLUMN 子句,这样可以节省时间。

另一种想法是使用逻辑复制:设置数据库的空副本 (pg_dump -s),其中您的大 table 是用 smallint 列定义的。将您的数据库复制到该数据库,并在复制完成后立即切换。