在 CentOS 上迁移 PostgreSQL 数据,常见有几种方式,下面按最常用 → 进阶给你讲清楚,你可以按场景选。
pg_dump + pg_restore# 导出单个数据库
pg_dump -U username dbname > dbname.sql
# 或导出整个集群(含角色、表空间)
pg_dumpall -U postgres > all.sql
如果数据大,推荐压缩:
pg_dump -U username dbname | gzip > dbname.sql.gz
scp dbname.sql.gz user@new_server:/data/
# 解压
gunzip dbname.sql.gz
# 创建数据库(如不存在)
createdb -U postgres dbname
# 导入
psql -U postgres dbname < dbname.sql
✅ 优点:安全、兼容性好
✅ 适合:版本相同或升级迁移
⚠️ 必须 PostgreSQL 大版本一致
systemctl stop postgresql
默认路径一般是:
/var/lib/pgsql/13/data
rsync -avz /var/lib/pgsql/13/data/ root@new_server:/var/lib/pgsql/13/data/
chown -R postgres:postgres /var/lib/pgsql/13/data
systemctl start postgresql
✅ 优点:快
❌ 缺点:不能跨大版本
pg_basebackup(主从 / 迁移都行)pg_basebackup -h old_host -U repl -D /var/lib/pgsql/13/data -P -X stream
适合:
❌ 不能直接拷数据目录
✅ 正确方式:
pg_dump(旧) → pg_restore(新)
或官方工具:
pg_upgrade
setenforce 0
# 或
restorecon -Rv /var/lib/pgsql
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
su - postgres
psql
我可以给你精确命令,只要你说明:
我可以直接给你一套可复制执行方案。