使用pg_dump备份Postgres表有一个包含--jobs选项的变通方法



我使用的是postgres 12,并且有一个1TB大小的数据库。我正在对一个大小超过140GB的表执行大删除。

我正在测试这个过程,并希望对表及其内容进行pg_dump,但按原样运行大约需要33分钟

pg_dump -d titan -t public.play > /backup/playBackup.sql

我知道pg_dump确实包括一个--jobs选项,如果我有一台32核的机器,它真的可以使用,但那是备份数据库本身,而不是数据库中的表。

有没有更快的方法把我需要的桌子倒回去?

--jobs选项,仅适用于;数据库";格式化转储对处理单个表没有帮助,因为单个表是由单个进程转储的。

当然,您可以启动两个并行的COPY语句:

COPY (SELECT * FROM titan WHERE id % 5 = 0) TO '/path/titan0.csv' (FORMAT 'csv');
COPY (SELECT * FROM titan WHERE id % 5 = 1) TO '/path/titan1.csv' (FORMAT 'csv');
COPY (SELECT * FROM titan WHERE id % 5 = 2) TO '/path/titan2.csv' (FORMAT 'csv');
COPY (SELECT * FROM titan WHERE id % 5 = 3) TO '/path/titan3.csv' (FORMAT 'csv');
COPY (SELECT * FROM titan WHERE id % 5 = 4) TO '/path/titan4.csv' (FORMAT 'csv');

如果您同时启动这些语句,您就有机会获得同步的顺序扫描,并完成对表的一次读取。然后可以并行加载这些文件。

如果您也需要表格结构,请运行以下命令:

pg_dump --section=pre-data -t public.play titan
pg_dump --section=post-data -t public.play titan

首先恢复前数据,然后恢复数据,然后再恢复后数据。

最新更新