在 CentOS 上迁移 PostgreSQL 数据,常见有几种方式,下面按最常用、最安全的顺序给你说明。
pg_dump / pg_restore(推荐,跨版本也可用)适合:
# 导出整个数据库
pg_dump -U postgres -h 127.0.0.1 -F c -b -v -f /tmp/dbname.dump dbname
参数说明:
-F c:自定义格式(压缩,支持恢复)-b:包含大对象-v:显示过程scp /tmp/dbname.dump root@目标IP:/tmp/
pg_restore -U postgres -d dbname -v /tmp/dbname.dump
如果数据库不存在,先创建:
createdb -U postgres dbname
适合:
systemctl stop postgresql
默认数据目录(视版本):
/var/lib/pgsql/12/data
rsync -av /var/lib/pgsql/12/data/ root@目标:/var/lib/pgsql/12/data/
确保:
chown -R postgres:postgres /var/lib/pgsql/12/data
systemctl start postgresql
pg_basebackup(主从/整机迁移)适合:
pg_basebackup -h 源IP -U repl -D /var/lib/pgsql/12/data -P -X stream
✅ PostgreSQL 大版本不兼容物理文件
例如:
✅ 迁移前:
SELECT version();
✅ 防火墙 / SELinux:
setenforce 0
firewall-cmd --add-service=postgresql
✅ 用户和权限要一致
❌ permission denied
chown -R postgres:postgres /var/lib/pgsql
❌ database is being accessed by other users
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'dbname';
你可以告诉我:
我可以直接给你一条可执行的迁移方案。