使用 pg_dump 备份 Postgres Table 是否有包含 --jobs 选项的解决方法

Backup Postgres Table using pg_dump is there a workaround to include the --jobs option

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

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

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

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

有没有更快的方法来备份我需要的table?

--jobs 选项仅适用于“数据库”格式转储,不会帮助您处理单个 table,因为单个 table 会被转储单个进程。

您当然可以开始几个并行的 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');

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

如果您也需要 table 结构,运行 这些:

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

先恢复pre-data,再恢复数据,再恢复post-data。