如何将PostgreSQL服务器完整迁移至另一服务器(云环境适配)
PostgreSQL云数据库(如AWS RDS)多库迁移方案(无超级用户)
由于云RDS等托管环境没有超级用户权限,直接使用pg_dumpall全量导出会因无法访问系统对象报错。以下是基于具备Create role、Create DB权限的永久密码用户的迁移流程:
前提条件
目标端的迁移用户需已配置Create role和Create DB权限,且密码为永久有效状态。
1. 迁移自定义角色(排除云服务商系统角色)
云环境中的系统角色(如AWS RDS的rds_superuser)无需迁移,通过过滤导出仅用户创建的角色:
pg_dumpall --roles-only -h 源端RDS地址 -U 迁移用户名 | grep -E -v "CREATE ROLE rds_|ALTER ROLE rds_|GRANT .* rds_" | psql -h 目标端地址 -U 迁移用户名
2. 迁移所有用户数据库
先获取源端所有非系统数据库列表,再逐个导出并导入:
第一步:生成用户数据库列表
psql -h 源端RDS地址 -U 迁移用户名 -t -c "SELECT datname FROM pg_database WHERE datistemplate = false AND datname NOT IN ('postgres');" > db_list.txt
第二步:批量迁移数据库
while read dbname; do pg_dump -C -h 源端RDS地址 -U 迁移用户名 "$dbname" | psql -h 目标端地址 -U 迁移用户名 done < db_list.txt
关键说明
-C参数会在导出脚本中自动添加CREATE DATABASE语句,无需提前在目标端创建数据库- 若源端存在跨库权限授予,需单独导出权限脚本并在目标端执行(可通过
pg_dump --schema-only --no-owner --no-privileges导出结构后,单独提取权限语句) - 确保目标端PostgreSQL版本与源端兼容(建议同版本或更高版本)
内容的提问来源于stack exchange,提问作者Adwait Gawade
相关产品推荐
相关产品推荐

