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

如何简化PostgreSQL数据库迁移至新服务器的恢复流程?

简化PostgreSQL数据库迁移的方案

一、是否应该改用pg_dumpall?

如果源服务器只有这一个业务数据库,pg_dumpall是更省心的选择——它会一次性导出所有全局对象(用户、角色、权限)、目标数据库的结构和数据,完美匹配你的场景。唯一需要注意的是,它导出的是纯SQL文本,不支持pg_dump自定义格式的并行恢复,但如果数据库规模不大,这点影响可以忽略。

二、单命令导出+单命令恢复的实现方式

方案1:pg_dumpall(推荐)

源服务器导出

pg_dumpall -U postgres > full_dump.sql

这个命令会把所有用户、权限、数据库结构和数据全部打包到SQL文件中。

传输到新服务器

scp full_dump.sql 你的用户名@新服务器IP:/目标路径/

新服务器恢复

确保PostgreSQL服务已启动,以postgres用户执行:

psql -U postgres -f full_dump.sql

恢复完成后,所有用户、权限、数据库会自动按源服务器的配置创建好,无需手动操作。

方案2:pg_dump自定义格式(适合精细控制场景)

如果不想用pg_dumpall,也可以让pg_dump包含用户、权限和数据库创建语句:

源服务器导出

先导出全局对象(用户、角色),再导出数据库:

# 导出全局用户与权限
pg_dumpall -U postgres --globals-only > globals.sql
# 导出目标数据库(自动包含创建库的语句)
pg_dump -U postgres --create -F c -v -f mydatabase.dump mydatabase

参数说明:

  • --create:让导出文件包含创建目标数据库的语句,恢复时自动创建
  • -F c:使用自定义压缩格式,支持后续并行恢复

新服务器恢复

# 先恢复全局用户与权限
psql -U postgres -f globals.sql
# 再恢复数据库(连接到默认postgres库即可,脚本会自动创建目标库并切换)
pg_restore -U postgres -d postgres mydatabase.dump

三、避免恢复到错误数据库的关键

使用带--create参数的pg_dump或直接用pg_dumpall时,导出的脚本里会明确包含CREATE DATABASE mydatabase;和\c mydatabase;语句,恢复时会自动切换到目标库,完全避免误导入到postgres默认库的问题。

四、关于对象所有权的简化

你之前用--no-owner --no-privileges才需要手动修改所有权,去掉这两个参数,pg_dump/pg_dumpall会自动保留源服务器的对象所有权和权限配置,恢复后无需手动调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 04:24:53