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
恢复步骤:
- 解压压缩包:
tar -zxf pg_full_backup.tar.gz - 先导入全局对象:
psql -f cluster_globals.sql postgres - 按需用
pg_restore恢复对应数据库即可,完全保留自定义格式支持选择恢复对象、重排顺序、并行恢复等所有特性。
方案2:物理备份替代(适合整集群快速备份恢复场景)
如果你不需要逻辑备份的单对象级恢复灵活性,只是要整集群的完整备份,也可以直接用PostgreSQL原生的pg_basebackup工具做物理整集群备份,备份结果是整集群的物理文件副本,备份和恢复速度都远快于逻辑备份。
内容的提问来源于stack exchange,提问作者ald
相关产品推荐
相关产品推荐

