问题:
我正在使用 PostgreSQL 数据库,我需要向包含数百万条记录的表添加一个附加列。问题是此操作需要几分钟才能完成,影响了我的应用程序的整体性能。有没有办法加快这个过程并最大限度地减少停机时间,特别是在处理 PostgreSQL 时?
问题描述:
ALTER TABLE my_table ADD COLUMN new_column INT;
向较大的表中添加列通常很耗时,但一般来说,添加具有默认值的列时耗时较少。
ALTER TABLE my_table ADD COLUMN new_column INT DEFAULT 0;
如果您使用的是varchar,则可以使用,
ALTER TABLE my_table ADD COLUMN new_column VARCHAR(255) DEFAULT '';
还有另一种选择,比如同时。此选项允许您在执行查询时运行操作。例如,
ALTER TABLE my_table ADD COLUMN new_column INT CONCURRENTLY;
并且我们可以使用批量更新的方法来批量添加列,以减少整个过程的时间消耗,并将其拆分为小过程。
DO $$
DECLARE
chunk_size INT := 10000; -- Adjust as needed
start_index INT := 0;
BEGIN
LOOP
EXIT WHEN start_index >= 4000000;
EXECUTE 'UPDATE my_table SET new_column = DEFAULT WHERE id >= ' || start_index || ' AND id < ' || start_index + chunk_size;
start_index := start_index + chunk_size;
END LOOP;
END $$;
希望这有帮助..