You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL使用pg_dumpall备份时能否指定-Fc自定义格式归档?

提问内容

pg_dump有一个非常实用的选项,支持为备份输出指定自定义格式。

输出适合pg_restore导入的自定义格式归档,配合目录输出格式,是灵活性最高的输出格式,支持在恢复时手动选择、重排归档项,且该格式默认启用压缩。
该格式可通过-Fc参数指定,示例如下:
pg_dump -Fc mydb > db.dump
我目前有多个数据库和角色/用户,希望通过单命令将所有内容备份到单个文件中。
有一个非常合适的工具pg_dumpall可满足该需求:
pg_dumpall是用于将PostgreSQL集群的所有数据库导出(dump)到单个脚本文件的实用工具,输出的脚本文件包含可作为psql输入用于恢复数据库的SQL命令,其底层会为集群内每个数据库调用pg_dump,同时还会备份所有数据库共用的全局对象。
pg_dumpall的默认输出为SQL脚本,但我希望获取自定义格式的归档文件,遗憾的是我无法为pg_dumpall指定-Fc参数。
请问是否有方案可以使用自定义格式归档备份所有数据库、角色等全部集群资源?


解决方案

pg_dumpall本身原生不支持-Fc自定义格式参数,无法直接输出单文件的自定义格式归档,你可以采用以下成熟的落地方案:

方案1:拆分备份+打包整合(兼顾自定义格式灵活性+单文件存储需求)

核心思路是把集群资源拆为全局对象和单库数据两部分分别备份,最后打包为单个文件:

  • 第一步:用pg_dumpall导出集群级全局资源(角色、表空间等所有库共用的配置),这部分数据量极小,直接导出为SQL脚本即可:
pg_dumpall -g > cluster_globals.sql
  • 第二步:遍历集群中所有业务数据库,逐个用pg_dump导出自定义格式归档:
# 遍历排除模板库后的所有可连接数据库,逐个导出
for dbname in $(psql -t -c "SELECT datname FROM pg_database WHERE datistemplate = false AND datallowconn = true"); do
  pg_dump -Fc ${dbname} > ${dbname}.dump
done
  • 第三步:将所有导出文件打包为单个压缩包,满足单文件存储需求:
tar -zcf pg_full_backup.tar.gz cluster_globals.sql *.dump

恢复步骤:

  1. 解压压缩包:tar -zxf pg_full_backup.tar.gz
  2. 先导入全局对象:psql -f cluster_globals.sql postgres
  3. 按需用pg_restore恢复对应数据库即可,完全保留自定义格式支持选择恢复对象、重排顺序、并行恢复等所有特性。

方案2:物理备份替代(适合整集群快速备份恢复场景)

如果你不需要逻辑备份的单对象级恢复灵活性,只是要整集群的完整备份,也可以直接用PostgreSQL原生的pg_basebackup工具做物理整集群备份,备份结果是整集群的物理文件副本,备份和恢复速度都远快于逻辑备份。

内容的提问来源于stack exchange,提问作者ald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:36:05