pgsql备份恢复

备份需根据自身情况替换参数,使用前请在测试环境验证后使用

备份脚本

#!/bin/bash# 添加备份元数据PGPASSWORD="$PG_PASSWORD"pg_dumpall-h"$PG_HOST"-p"$PG_PORT"-U"$PG_USER"\--clean--if-exists|gzip>"$BACKUP_FILE"# 同时生成备份信息echo"备份时间:$DATE">"${BACKUP_FILE}.info"echo"PostgreSQL版本:$(psql-h$PG_HOST-p$PG_PORT-U$PG_USER-dpostgres-t-c'SHOW server_version;')">>"${BACKUP_FILE}.info"

使用--clean选项自动清理现有对象。

1. 恢复备份文件

解压并恢复所有数据库

# 解压并恢复到数据库gunzip-cpg_backup_2026-06-12_14-30-00.sql.gz|psql-hlocalhost-p5432-Upostgres

或者分步操作

# 先解压gunzip pg_backup_2026-06-12_14-30-00.sql.gz# 会得到 pg_backup_2026-06-12_14-30-00.sql 文件# 然后恢复psql-hlocalhost-p5432-Upostgres-fpg_backup_2026-06-12_14-30-00.sql

2. 恢复特定数据库

如果需要只恢复某个数据库:

# 先从备份中提取特定数据库gunzip-cpg_backup_2026-06-12_14-30-00.sql.gz|grep-i"connect to your_database_name"-A1000000|psql-hlocalhost-p5432-Upostgres-dyour_database_name

3. 恢复前注意事项

  1. 目标数据库应该是空的,或者先删除现有数据库:

    DROPDATABASEIFEXISTSdatabase_name;CREATEDATABASEdatabase_name;
  2. 或者使用 --clean 选项重新创建

    pg_dumpall-hlocalhost-p5432-Upostgres--clean|gzip>backup.sql.gz
  3. 恢复整个集群会覆盖所有数据库和角色

5. 查看备份内容(不恢复)

# 查看备份文件包含哪些数据库gunzip-cpg_backup_2026-06-12_14-30-00.sql.gz|grep"^\\connect"# 查看前100行gunzip-cpg_backup_2026-06-12_14-30-00.sql.gz|head-100