场景:
公司业务数据库位于window R2 64位 +sqlserver2012数据库,须要用ETL工具(SSIS2012)将数据抽取到window R2 64位+postgres 9.6 数据库中
1. SSIS2012 链接 PostgreSQL数据库 两种方法: .NET Provider for OleDB 和ODBC ,第一种同事是花钱从老外那边买的插件(若是有朋友有免费的链接适配器,求分享!) 下图为第一种 。 咱们这里介绍第二种方式。sql
window10 +postgres9.6 ,安装postgres的ODBC驱动数据库
2. 下载PostgreSQL的ODBC链接驱动程序。 本人下载了PostgreSQL 09 02 64位和32位的,根据本身的具体状况使用。
http://www.postgresql.org/ftp/odbc/versions/msi/ 服务器
3.安装 ODBC链接驱动程序:解压PostgreSQL 09 02 64-》双击psqlodbc.msi-》默认安装便可(本人机器上安装64位的驱动)
4.配置驱动管理 编辑器
(1)win+R运行 64 位元 ODBC 位置:C:\Windows\System32\odbcad32.exeide
若是你的系统是 “64位元的操做系统”可是程序是“32位元”,虽然设置的方法同样,可是是要开启 C:\Windows\SysWOW64\odbcad32.exe 来设置“32位元的ODBC”,因为 32/64 ODBC设置的路径不同,默认的路径是设置“64位元的ODBC”,因此要注意这一点,而且也要注意 ODBC Driver 的版本。工具
64 位元 ODBC 位置:C:\Windows\System32\odbcad32.exesqlserver
32 位元 ODBC 位置:C:\Windows\SysWOW64\odbcad32.exepost
(2)添加用户DNS测试
添加PostgreSQL ANSI(X64)操作系统
填写信息, 保存
用户DNS中就出现咱们添加的postgres 64位
5.而后用 SSIS来链接。
(1)新建链接,选择ADO.NET
(2)提供程序选择Odbc Data Provider
(3)用户名选择PosgresSQL30,输入用户名,密码,测试成功
报错1:若报错, “驱动程序和应用程序体系结构不匹配”
解决办法:
用上述方法,配置用户DNS 32位驱动便可。
报错2:链接管理器报错,没法显示表的信息
临时解决办法:
对应组件-》右键-》高级编辑器-》TableOrViewName直接填写
报错3:没有用于主机 "10.99.246.52", 用户 "postgres", 数据库 "postgres", SSL 关闭 的 pg_hba.conf 记录".
解决办法:
这是由于postgresql默认不容许远程链接,必须在配置中打开.
打开$POSTSQL/data/pg_hda.conf 找到
# IPv4 local connections:
host all all 127.0.0.1/32 md5
在下面添加两行代码:
host all all 10.100.50.132/24 md5--本身的主机ip
host all all 10.99.246.52/24 md5--部署到远程的服务器ip
再把ODBC源中server 127.0.0.1改成10.100.50.132保存便可
报错4:ssis在远程服务器上报错:没有权限和ADO.NET源
解决办法:
在远程服务器上建立pg服务器ip 的ODBC源
pg的配置文件中链接字符串以下:
数据源:string connectionString = "DSN=PostgreSQL35W;UID=postgres;PWD=******;";
驱动:string connString = "Driver={PostgreSQL Unicode(x64)};Server=localhost;Database=MyDataBase;UID=postgres;PWD=******;Port=5432;";
PS:odbc要注意计算机是32位仍是64位,最好根据计算机来安装相应的驱动。应用程序也要指定成相应的位数。不然,就须要额外去配置和加载。另外,数据源的名称【DSN】和驱动【Driver】要格外注意。