PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

25.1. SQL 转储逻辑备份 #

25.1.1. 恢复转储数据
25.1.2. 使用 pg_dumpall 备份全局对象

逻辑转储备份的中心思想是:导出生成一份包含全套 SQL 命令的脚本文件。当把该文件重新回放输入至空数据库实例中时,它会以完全相同的结构与内容无损重建出备份时刻的完整数据库状态。官方为此提供了专用的逻辑导出工具 pg_dump。其极简调用格式为:

pg_dump dbname > dumpfile

pg_dump 会将生成的 SQL 语句直接流式写出至标准输出。除纯文本脚本格式外,它还支持专用的自定义二进制归档格式(-F c)与目录归档格式(-F d),支持多进程并行压缩导出与按对象颗粒度精细恢复。

pg_dump 在本质上是一个极其精巧的常规客户端程序,支持跨网络对远程数据库执行备份。只要当前连接用户具备读权限,即可导出指定数据;若要导出全库所有对象,通常需要使用超级用户权限执行。

相较于物理备份,逻辑转储的核心优势在于跨平台与跨大版本兼容性:通过 pg_dump 导出的 SQL 脚本几乎能够无缝导入到更高版本的全新 PostgreSQL 集群中,这也是执行大版本升级迁移或从 32 位系统跨架构迁移至 64 位系统的最可靠手段。

pg_dump 生成的转储快照在逻辑上是强一致性的:它基于启动瞬间生成的全局 MVCC 快照导出数据,在导出全过程中完全不阻塞任何业务的常规并发读写操作。

25.1.1. 恢复转储数据 #

对于由 pg_dump 导出的纯文本 SQL 文件,直接通过交互式终端程序 psql 导入回放:

psql -X dbname < dumpfile

目标数据库必须在导入前预先建好。

对于采用自定义二进制格式(-F c)或目录格式(-F d)导出的归档文件,必须使用配套的官方恢复工具 pg_restore 进行恢复:

pg_restore -d dbname dumpfile

pg_restore 允许通过 -j 选项开启多进程并发并行建表与索引构建,数倍加速大库恢复。

25.1.2. 使用 pg_dumpall 备份全局对象 #

因为 pg_dump 仅针对单张数据库生效,它不会导出集群级别的全局对象(如数据库角色用户、全局表空间定义)。官方提供了工具 pg_dumpall,它能一次性将集群内的所有数据库以及全部全局元数据统一导出:

pg_dumpall > db.out