如何简化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
相关产品推荐
相关产品推荐

