本文主要记录 PostgreSQL 常用备份与恢复命令:pg_dumppg_dumpallpg_restorepsql 的基本用法、格式选择以及验证思路。环境参数请替换为实际主机与账号。

背景说明

日常运维里最常用的是逻辑备份

  • 单库:pg_dump
  • 全实例(含角色等全局对象):pg_dumpall
  • 自定义格式恢复:pg_restore

物理备份(pg_basebackup、连续归档)不在本文展开。

环境与前置

项目说明
客户端工具与服务器主版本尽量接近的 pg_dump / pg_restore
权限备份目标库的读权限;全量/pg_dumpall 通常需要更高权限
连通主机、端口、pg_hba 与密码(或 .pgpass

备份单个数据库

SQL 明文(可管道压缩)

pg_dump -U <username> -h <host> -p <port> -d <database_name> > backup.sql
pg_dump -U <username> -h <host> -p <port> -d <database_name> | gzip > backup.sql.gz

自定义格式(推荐生产常用)

pg_dump -U <username> -h <host> -p <port> -Fc -d <database_name> -f backup.dump
参数含义
-U用户
-h / -p主机 / 端口
-d数据库名
-Fc自定义压缩格式,便于并行恢复与选择性恢复

恢复单个数据库

从 SQL

# 目标库需已存在(或先 CREATE DATABASE)
psql -U <username> -h <host> -p <port> -d <target_database> < backup.sql
gunzip -c backup.sql.gz | psql -U <username> -h <host> -p <port> -d <target_database>

从自定义格式

# 恢复到已有库
pg_restore -U <username> -h <host> -p <port> -d <target_database> backup.dump

# 仅结构 / 并行加速(示例)
pg_restore --schema-only -d <target_database> backup.dump
pg_restore -j 4 -d <target_database> backup.dump

需要「备份里带建库」时,可查阅当前版本 pg_restore -C 行为,并在维护窗口验证。

备份整个实例

pg_dumpall -U <username> -h <host> -p <port> | gzip > full_backup.sql.gz

恢复时通常对空实例用 psql 导入(先确认不会覆盖生产)。超级用户权限与全局对象(角色、表空间)需单独评估。

测试验证

  1. 非生产实例恢复一份备份。
  2. 检查:
psql -U <username> -h <host> -d <target_database> -c "\dt"
psql -U <username> -h <host> -d <target_database> -c "SELECT count(*) FROM <关键表>;"
  1. 应用连库冒烟(登录、核心查询)。
  2. 记录备份文件大小、耗时与版本号。

注意事项

  • 大库优先 -Fc + 定期恢复演练,而不是只备份不练恢复。
  • 版本跨大版本恢复可能有兼容问题,升级路径单独设计。
  • 备份文件含全量数据,权限与传输需按敏感数据保护。
  • 主机与账号一律用占位符;勿把真实密码写进文档。

参考

  • PostgreSQL 官方文档:pg_dump / pg_dumpall / pg_restore
  • 可与站内/草稿 pgsql-hot-standbypgsql-daily-ops 对照使用