Visual Studio中Integration Services的ODBC连接列加载异常问题
解决SSIS中PostgreSQL ODBC连接列信息为空的问题
以下是几个针对性的排查和解决方法,亲测有效:
1. 检查ODBC驱动版本与架构匹配
- 直接装最新版的PostgreSQL ODBC驱动(psqlODBC),旧版本对SSIS的元数据读取支持很差。卸载旧驱动后,从PostgreSQL官网下载对应架构的驱动——要和Visual Studio/SSIS的运行架构一致(比如VS2019默认x64,但SSIS设计时可能需要x86驱动,必要时两个架构都装,或者在项目属性里把
Run64BitRuntime设为对应值)。
2. 给连接字符串加关键参数
- 编辑ODBC连接管理器的连接字符串,必须加上
UseDeclareFetch=1。这个参数能强制驱动正确返回结果集的元数据,直接解决SSIS读不到列的问题。 - 示例连接字符串:
Driver={PostgreSQL Unicode};Server=你的服务器地址;Port=5432;Database=目标库;Uid=用户名;Pwd=密码;UseDeclareFetch=1;
3. 确认PostgreSQL用户权限
- 确保PostgreSQL的登录用户对目标表有SELECT权限,同时能读取系统表(比如
information_schema.columns)——SSIS是靠查系统表拿列信息的。 - 执行授权语句:
GRANT SELECT ON 你的表名 TO 用户名;,如果表不在public schema,还要给schema加USAGE权限,或者直接授权:GRANT SELECT ON ALL TABLES IN SCHEMA 你的schema名 TO 用户名;
4. 切换到SQL命令模式绕开元数据读取
- 如果选“表或视图”模式死活读不到列,直接切到SQL命令模式,手动写
SELECT * FROM 你的表名,点“预览”,SSIS会自动读取列信息,之后再映射到SQL Server的目标表就行。
5. 确认schema名称正确
- PostgreSQL的表属于指定schema(默认是public),如果你的表不在public下,在数据源的“表或视图”下拉框里要选
schema名.表名,不能只选表名,不然SSIS找不到对应的列信息。
完整数据迁移流程建议
- 先搞定ODBC驱动和连接字符串,确保连接测试成功。
- 在SSIS里拖一个“数据流任务”,添加ODBC源(用SQL命令模式写SELECT语句),再添加OLE DB目标(连接到你的SQL Server)。
- 完成源列和目标列的映射,运行包就能完成数据迁移。
内容的提问来源于stack exchange,提问作者Kelli Galvão
相关产品推荐
相关产品推荐

