You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求PostgreSQL跨服务器特定数据导出恢复SQL脚本(同架构)

实现PostgreSQL指定表条件数据迁移的脚本方案

由于服务器A与B架构完全一致,无需导出表结构,仅需迁移符合条件的数据,以下是两种实用方案:

方法一:pg_dump条件导出+psql导入

1. 从服务器A导出过滤后的数据

在可连接服务器A的机器上,执行pg_dump命令导出指定表的条件数据:

# 导出user表中年龄23岁以上的数据
pg_dump -h <A服务器IP/域名> -U <数据库用户名> -d <目标数据库名> -t user --data-only --where="age > 23" -f user_filtered.sql

# 导出address表中城市为Boston的数据
pg_dump -h <A服务器IP/域名> -U <数据库用户名> -d <目标数据库名> -t address --data-only --where="city = 'Boston'" -f address_filtered.sql

参数说明:

  • -t:指定要导出的目标表
  • --data-only:仅导出数据(跳过表结构,因架构一致)
  • --where:设置数据过滤条件
  • -f:将导出内容写入指定文件

2. 将数据导入服务器B

将导出的.sql文件传输至可连接服务器B的机器,执行导入命令:

# 导入user表数据
psql -h <B服务器IP/域名> -U <数据库用户名> -d <目标数据库名> -f user_filtered.sql

# 导入address表数据
psql -h <B服务器IP/域名> -U <数据库用户名> -d <目标数据库名> -f address_filtered.sql

方法二:跨服务器直接复制(使用dblink扩展)

若服务器A与B网络互通,可在服务器B上直接执行跨库数据插入:

1. 启用dblink扩展

在服务器B的目标数据库中执行:

CREATE EXTENSION IF NOT EXISTS dblink;

2. 跨库插入条件数据

-- 插入user表符合条件的数据
INSERT INTO user
SELECT * FROM dblink(
  'dbname=<A数据库名> host=<A服务器IP/域名> user=<用户名> password=<密码>',
  'SELECT * FROM user WHERE age > 23'
) AS t(user_id INT, name VARCHAR, age INT, email VARCHAR); -- 需与user表结构完全匹配列名、类型

-- 插入address表符合条件的数据
INSERT INTO address
SELECT * FROM dblink(
  'dbname=<A数据库名> host=<A服务器IP/域名> user=<用户名> password=<密码>',
  'SELECT * FROM address WHERE city = ''Boston'''
) AS t(address_id INT, user_id INT, city VARCHAR, street VARCHAR); -- 需与address表结构完全匹配

注意:

  • 确保服务器B能访问A的PostgreSQL默认端口(5432)
  • 连接字符串需替换为实际的服务器A数据库信息
  • 列定义部分必须与目标表结构完全一致,避免插入失败

注意事项

  • 操作前建议备份服务器B的目标表数据,防止数据覆盖
  • 数据量较大时优先选择pg_dump方法,稳定性更高;dblink更适合小批量数据迁移
  • 确保执行命令的用户拥有对应权限:服务器A的读权限、服务器B的写权限

内容的提问来源于stack exchange,提问作者Sunny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 01:54:22