You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从.sql脚本恢复PostgreSQL 15整个数据库集群

PostgreSQL 15 全量集群恢复步骤

因为你的备份是整个数据库集群的dump(由pg_dumpall生成),包含所有角色、数据库及数据,直接导入会因现有对象冲突报错,需按以下流程彻底清空集群后恢复:

1. 停止PostgreSQL服务

根据你的操作系统执行对应命令(root权限下):

  • Ubuntu/Debian:
    systemctl stop postgresql
    
  • CentOS/RHEL:
    systemctl stop postgresql-15
    

2. 备份现有配置文件(可选但推荐)

避免重新初始化后重复配置postgresql.conf、pg_hba.conf等文件,先备份到临时目录:

# 以Ubuntu默认数据目录为例,CentOS对应目录为/var/lib/pgsql/15/data
cp /var/lib/postgresql/15/main/{postgresql.conf,pg_hba.conf} /tmp/

3. 彻底清空现有集群数据

这一步会删除所有现有数据库、角色,不可逆,请确认备份有效后执行:

# 删除旧数据目录下所有内容
rm -rf /var/lib/postgresql/15/main/*

# 重新初始化集群(需切换到postgres用户执行)
su - postgres -c "initdb -D /var/lib/postgresql/15/main"

4. 恢复配置文件(若已备份)

将之前备份的配置文件拷回,并修正权限:

cp /tmp/{postgresql.conf,pg_hba.conf} /var/lib/postgresql/15/main/
chown postgres:postgres /var/lib/postgresql/15/main/{postgresql.conf,pg_hba.conf}

5. 启动PostgreSQL服务

# Ubuntu/Debian
systemctl start postgresql
# CentOS/RHEL
systemctl start postgresql-15

6. 导入集群备份

使用postgres超级用户执行导入(备份包含角色创建,需超级权限):

su - postgres -c "psql -f /path/to/your/backup.sql postgres"
  • 这里连接默认的postgres系统库即可,备份脚本会自动创建所有其他数据库、角色并导入数据。

针对你问题的补充说明

  • 是否需要先删除所有对象? 是的,集群级备份包含完整的角色、数据库定义,必须清空现有集群才能避免对象冲突,重新初始化是最彻底、不易遗漏的方式。
  • 删除所有用户后如何执行psql? 重新初始化集群后,默认的postgres超级用户会自动存在,你可以通过root权限切换到postgres用户执行psql命令(如上述步骤中的su - postgres)。
  • 若不想重新初始化集群,手动删除所有数据库和角色操作繁琐且容易遗漏依赖,不推荐。

内容的提问来源于stack exchange,提问作者Graf123456

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:22:36