如何用pg_dump导出PostgreSQL单表数据并导入至异名同结构表
解决方案
针对PostgreSQL中跨库异名表的数据迁移(两张表结构完全一致),有两种直接可行的方法:
方法一:pg_dump + sed 管道替换
利用pg_dump导出纯数据,通过sed批量替换SQL语句里的源表名为目标表名,再直接导入目标库。命令示例:
pg_dump -a -t "source_table" source_db | sed 's/INSERT INTO "source_table"/INSERT INTO "target_table"/g' | psql target_db
- 细节说明:
-a指定只导出数据不导出表结构,-t锁定要导出的源表;sed会替换所有INSERT语句中的表名字段;最后通过管道直接把处理后的SQL传给目标库执行。 - 注意:如果表名包含大写字母或特殊字符,必须用双引号包裹,避免PostgreSQL解析出错。
方法二:COPY命令(适合大数据量场景)
用PostgreSQL原生的COPY导出CSV格式数据,再导入目标表,效率比SQL语句更高:
- 登录源数据库执行导出:
COPY source_table TO '/tmp/table_data.csv' WITH (FORMAT csv, HEADER);
- 登录目标数据库执行导入:
COPY target_table FROM '/tmp/table_data.csv' WITH (FORMAT csv, HEADER);
- 注意:确保
/tmp/table_data.csv有读写权限,且目标表的字段顺序、类型和源表完全匹配。
额外提示
- 如果目标表有自增主键(比如
serial/identity类型):若源数据包含主键值,导入后记得重置目标表的序列,避免后续插入出现主键冲突;若不需要保留源主键,导出时可以排除主键字段。 - 权限要求:执行
pg_dump需要源表的SELECT权限,执行psql或COPY需要目标表的INSERT权限。
内容的提问来源于stack exchange,提问作者DevinG
相关产品推荐
相关产品推荐

