请求协助:SSIS通过ODBC连接SSH PostgreSQL时出现连接失败问题
解决SSIS通过ODBC向PostgreSQL插入数据时的连接错误
核心排查与修复步骤
核对SSIS运行的权限上下文
SSIS默认用SQL Server代理服务账户(或手动运行时的本地账户)执行,和你在SSMS/自定义程序里用的当前登录账户权限可能不一致:- 手动运行包时,右键以管理员身份启动Visual Studio/SSDT后再测试连接
- 通过SQL Server代理执行时,确认代理服务账户能访问ODBC数据源——优先用系统DSN(所有账户可见),别用仅当前账户能访问的用户DSN
严格匹配ODBC驱动与SSIS的位数
SSIS项目的目标平台(32位/64位)必须和PostgreSQL ODBC驱动位数完全对应:- 32位SSIS项目:用
C:\Windows\SysWOW64\odbcad32.exe配置32位数据源 - 64位SSIS项目:用
C:\Windows\System32\odbcad32.exe配置64位数据源
位数混用是这类连接错误的高频原因。
- 32位SSIS项目:用
确认SSH隧道的一致性
既然是通过SSH连接PostgreSQL,要保证SSIS运行环境的隧道状态和测试环境一致:- 检查隧道是否在SSIS运行时处于活跃状态,避免手动测试时隧道开启、SSIS运行时隧道关闭的情况
- 确认隧道的本地映射地址、端口和ODBC配置完全匹配,且隧道允许SSIS运行账户访问本地映射端口
改用连接字符串直接配置ODBC连接
跳过已有的DSN,在SSIS连接管理器里直接用连接字符串配置,规避DSN的环境差异:
示例连接字符串(按需替换实际参数):Driver={PostgreSQL Unicode};Server=127.0.0.1;Port=5432;Database=your_db_name;Uid=your_username;Pwd=your_password;注意这里的Server和Port是SSH隧道映射后的本地地址,不是远程PostgreSQL的真实地址。
获取详细错误日志定位问题
开启SSIS详细日志,抓驱动层面的具体错误:- 在SSIS项目中启用日志,勾选“ODBC连接管理器”相关事件
- 运行包后查看日志,通常会给出更具体的报错(比如权限不足、隧道超时等)
额外提示
- 确保PostgreSQL ODBC驱动是最新版本,旧版本可能和SSIS存在兼容性问题
- 如果通过代理访问SSH,确认SSIS运行账户的代理配置和测试时一致
内容的提问来源于stack exchange,提问作者Raymond Mashishi
相关产品推荐
相关产品推荐

