PostgreSQL仅迁移数据至另一服务器及多表迁移方法问询
PostgreSQL跨服务器仅迁移数据的解决方案
一、仅迁移数据(不复制表结构/索引等)
你原来的命令带了-C参数会自动创建数据库,且默认导出表结构+数据。要只迁移数据,需用--data-only参数并去掉-C:
单表数据迁移
如果仅迁移某一张表的数据,加上-t指定表名:
pg_dump -h localhost -U localuser --data-only -t tablename dbname | psql -h remotehost -U remoteuser dbname
关键注意事项
- 目标服务器的
dbname中必须已经存在完全一致的表结构(包括字段类型、约束、主键等),否则数据无法正常插入。 - 确保
localuser拥有源库对应表的SELECT权限,remoteuser拥有目标库对应表的INSERT权限。
二、迁移所有表的数据到Server B
同样使用--data-only参数,不指定具体表名,直接导出整个数据库的所有表数据:
pg_dump -h localhost -U localuser --data-only dbname | psql -h remotehost -U remoteuser dbname
实用优化建议
- 若数据量较大,优先选择“本地导出→传输文件→远程导入”的方式,避免网络中断导致迁移失败:
# 源服务器导出所有表数据到本地文件 pg_dump -h localhost -U localuser --data-only dbname > all_tables_data.sql # 通过scp将文件传输到目标服务器(替换为实际路径) scp all_tables_data.sql remoteuser@remotehost:/tmp/ # 目标服务器导入数据 psql -U remoteuser dbname < /tmp/all_tables_data.sql - 导出过程中如果源库有写入操作,可能造成数据不一致,建议在业务低峰期执行,或添加
--lock-wait-timeout=60000参数(等待锁60秒,减少对业务的影响)。
内容的提问来源于stack exchange,提问作者DS89
相关产品推荐
相关产品推荐

