場景:
公司業務數據庫位於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】要格外注意。