前置知识: SQL

pg_dump 与 pg_restore 语法速查手册

1 min入门

pg_dump 与 pg_restore 语法速查手册 的完整教学讲解。

pg_dump 基本备份

基本写法:备份单个数据库 pg_dump -U <用户名> -d <数据库名> -f <输出文件>

# 备份 mydb 数据库到文件
pg_dump -U postgres -d mydb -f mydb_backup.sql

基本写法:自定义压缩格式备份 pg_dump -U <用户名> -Fc -d <数据库名> -f <输出文件>.dump

# 使用自定义压缩格式(支持选择性恢复,推荐)
pg_dump -U postgres -Fc -d mydb -f mydb.dump

基本写法:目录格式备份(支持并行) pg_dump -U <用户名> -Fd -d <数据库名> -f <输出目录>

# 目录格式(每个表一个文件,支持并行恢复)
pg_dump -U postgres -Fd -d mydb -f mydb_dir/

基本写法:并行备份 pg_dump -U <用户名> -Fd -j <并行数> -d <数据库名> -f <输出目录>

# 4 个并行进程加速备份
pg_dump -U postgres -Fd -j 4 -d mydb -f mydb_dir/

选择性备份

基本写法:仅备份指定表 pg_dump -U <用户名> -d <库名> -t <表名> [-t <表2>] -f <输出文件>

# 仅备份 users 和 orders 表
pg_dump -U postgres -d mydb -t users -t orders -f tables_backup.sql

基本写法:排除指定表 pg_dump -U <用户名> -d <库名> -T <表名> -f <输出文件>

# 备份除 logs 表外的所有表
pg_dump -U postgres -d mydb -T logs -f mydb_no_logs.sql

基本写法:仅备份数据/仅结构 pg_dump -U <用户名> -d <库名> --data-only -f <输出文件>

# 仅备份数据(不含结构)
pg_dump -U postgres -d mydb --data-only -f mydb_data.sql
# 仅备份结构(不含数据)
pg_dump -U postgres -d mydb --schema-only -f mydb_schema.sql

全库与模式备份

基本写法:备份所有数据库 pg_dumpall -U <用户名> -f <输出文件>

# 备份所有数据库(含角色与表空间定义)
pg_dumpall -U postgres -f all_db_backup.sql
# 仅备份全局对象(角色、表空间)
pg_dumpall -U postgres --globals-only -f globals.sql

基本写法:备份指定模式 pg_dump -U <用户名> -d <库名> -n <模式名> -f <输出文件>

# 仅备份 business 模式
pg_dump -U postgres -d mydb -n business -f business_schema.sql

pg_restore 恢复

基本写法:从自定义格式恢复 pg_restore -U <用户名> -d <数据库名> <备份文件>.dump

# 恢复自定义格式备份到指定数据库
pg_restore -U postgres -d mydb mydb.dump

基本写法:从 SQL 文本恢复 psql -U <用户名> -d <数据库名> -f <备份文件>.sql

# 恢复纯文本 SQL 备份
psql -U postgres -d mydb -f mydb_backup.sql

基本写法:并行恢复 pg_restore -U <用户名> -d <库名> -j <并行数> <备份文件>.dump

# 4 个并行进程加速恢复
pg_restore -U postgres -d mydb -j 4 mydb.dump

基本写法:仅恢复结构/数据 pg_restore -U <用户名> -d <库名> --schema-only <备份文件>.dump

# 仅恢复结构
pg_restore -U postgres -d mydb --schema-only mydb.dump
# 仅恢复数据
pg_restore -U postgres -d mydb --data-only mydb.dump

增量备份(17 新特性)

基本写法:pg_basebackup 增量备份 pg_basebackup -U <用户名> -D <目录> -Fp -Xs -P --incremental=<参考备份的backup_manifest路径>

# PostgreSQL 17 增量基础备份
# --incremental 必须指向参考备份目录中的 backup_manifest 清单文件
pg_basebackup -U postgres -D /backup/incr -Fp -Xs -P \
  --incremental=/backup/base/backup_manifest

基本写法:pg_combinebackup 合并备份 pg_combinebackup <全量备份目录> [<增量1目录> ...] -o <合并输出目录>

# PostgreSQL 17 合并基础与增量备份
# 按从旧到新的顺序列出, -o 输出目录为必填, 产物为可直接恢复的合成全量备份
pg_combinebackup /backup/base /backup/incr -o /backup/combined

选项速查

基本写法:连接选项 pg_dump -h <主机> -p <端口> -U <用户> -d <数据库>

# 远程数据库备份
pg_dump -h 192.168.1.100 -p 5432 -U admin -d mydb -f remote.sql

基本写法:压缩级别 pg_dump -U <用户> -Fc -Z <级别> -d <库名> -f <输出文件>

# 指定压缩级别 0-9(9 最高压缩率)
pg_dump -U postgres -Fc -Z 6 -d mydb -f mydb.dump