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

SQL Server转PostgreSQL仅导100条数据,求高效批量迁移方案

SQL Server 转 PostgreSQL 大数据量迁移解决方案

先解决你当前遇到的「SSIS导出提示成功但仅100行」问题

大概率是PostgreSQL驱动的默认配置限制了数据获取量:

  • 打开SSIS的目标PostgreSQL连接管理器,进入高级设置,找到Fetch Size参数,把默认的100改成更大的值(比如10000);
  • 检查迁移任务的错误处理规则,是否设置了「忽略错误」——部分行可能因数据类型不兼容被丢弃,但SSIS仍提示整体成功;
  • 查看迁移任务的详细日志,确认是否有隐性的行过滤或截断逻辑。

大数据量迁移的高效方案

1. 用pgLoader(推荐,专为异构数据库迁移设计)

pgLoader是PostgreSQL官方生态的迁移工具,对SQL Server支持完善,能自动处理数据类型映射、约束、索引,性能远超SSIS。

  • 操作步骤:
    • 安装pgLoader(Linux用包管理器,Windows可下载预编译包);
    • 创建配置文件migration.conf:
      LOAD DATABASE
          FROM mssql://sql_user:sql_pass@sql_server_ip/sql_db
          INTO pgsql://pg_user:pg_pass@pg_server_ip/pg_db
      
          WITH include drop, create tables, create indexes, reset sequences
           SET work_mem to '64MB', maintenance_work_mem to '512MB';
      
    • 执行迁移命令:
      pgloader migration.conf
      
  • 优势:无需手动处理数据类型转换,支持增量迁移,全程日志可追溯,适合TB级数据。

2. SQL Server导出CSV + PostgreSQL COPY命令(性能最优)

COPY是PostgreSQL原生批量加载命令,速度比任何ETL工具都快,适合超大数据量场景。

  • 操作步骤:
    • 用SQL Server的bcp命令导出数据(比SSIS导出更稳定):
      bcp "SELECT * FROM dbo.target_table" queryout "target_table.csv" -S sql_server_host -U sql_user -P sql_pass -c -t ',' -r '\n'
      
      参数说明:-c=字符模式,-t=列分隔符,-r=行结束符
    • 将CSV文件传到PostgreSQL服务器(或本地通过psql连接);
    • 执行PostgreSQL导入命令:
      -- 服务器本地文件用COPY
      COPY target_table FROM '/data/target_table.csv' WITH (FORMAT csv, HEADER, DELIMITER ',', ENCODING 'UTF8');
      
      -- 本地文件用psql的\copy
      psql -U pg_user -d pg_db -c "\copy target_table FROM 'C:/data/target_table.csv' WITH (FORMAT csv, HEADER, DELIMITER ',')"
      
  • 优势:速度最快,灵活控制数据格式,避免驱动层的限制。

3. 云环境用Azure Data Factory(可视化ETL)

如果你的数据库在云平台(比如Azure SQL Server → Azure PostgreSQL),ADF提供可视化的迁移管道,支持并行复制、错误重试、进度监控。

  • 核心设置:创建复制活动时,将批量提交大小设为10000+,开启并行复制,提升迁移效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:36:25