
pg中某个表字段从12扩大到30,有哪些在线操作的方案?
pg中某个表字段从12扩大到30,有哪些在线操作的方案?表是普通表,没做分区,大约500G
这个表不能离线,时时刻刻都有读写,
版本10
我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
回答交流
Markdown
请输入正文
提交
pg中某个表字段从12扩大到30,有哪些在线操作的方案?表是普通表,没做分区,大约500G
这个表不能离线,时时刻刻都有读写,
版本10
--方案一:使用 ALTER TABLE 命令
可以使用 ALTER TABLE 命令在线修改表结构,具体步骤如下:
1.首先,创建一个新的表,包含需要扩展的字段(假设该字段名为 column_name)和所有其他列。
CREATE TABLE new_table AS SELECT col1, col2, ..., column_name, colN FROM old_table;
2.将原始表重命名为另一个名称。
ALTER TABLE old_table RENAME TO old_table_backup;
3.将新表的名称更改为原始表的名称。
ALTER TABLE new_table RENAME TO old_table;
4.在原始表中重新创建所有索引和约束。
5.最后,可以选择删除备份表。
--方案二:使用 pg_repack 扩展
具体步骤如下:
1.安装 pg_repack 扩展。
2.创建一个新的空表,并使用 pg_repack 将原始表中的数据移动到新表中,以调整列宽度。
CREATE TABLE new_table (LIKE old_table INCLUDING ALL);
SELECT repack.repack_table('public.old_table', 'public.new_table');
3.确认新表的数据已经正确地复制。
4.使用 TRUNCATE 命令删除原始表中的数据。
TRUNCATE TABLE old_table;
5.使用 pg_repack 将新表重命名为原始表。
SELECT repack.repack_table('public.new_table', 'public.old_table');