ODBC(Open Database Connectivity,開放數據庫互連)是由Microsoft公司基于X/OPEN CLI提出的用于訪問數據庫的應用程序編程接口。應用程序通過ODBC提供的API與數據庫進行交互,在避免了應用程序直接操作數據庫系統的同時,增強了應用程序的可移植性、擴展性和可維護性。
云數據庫GaussDB 目前在以下環境中提供對ODBC3.5的支持。
表 ODBC支持平臺
| 操作系統 | 平臺 |
|---|---|
| EulerOS 2.5 | x86_64位 |
| EulerOS 2.8 | ARM64位 |
| Windows 7 | x86_32位 |
| Windows 7 | x86_64位 |
| Windows Server 2008 | x86_32位 |
| Windows Server 2008 | x86_64位 |
UNIX/Linux系統下的驅動程序管理器主要有unixODBC和iODBC,在這選擇驅動管理器unixODBC-2.3.0作為連接數據庫的組件。
Windows系統自帶ODBC驅動程序管理器,在控制面板->管理工具中可以找到數據源(ODBC)選項。
說明:
當前數據庫ODBC驅動基于開源版本,對于自研的數據類型,tinyint、smalldatetime、nvarchar2在獲取數據類型的時候,可能會出現不兼容。
前提條件
已下載Linux版本的ODBC驅動包和Windows版本的ODBC驅動包,
Linux環境下,開發應用程序要用到unixODBC提供的頭文件(sql.h、sqlext.h等)和庫libodbc.so。這些頭文件和庫可從unixODBC-2.3.0的安裝包中獲得。
已下載開源unixODBC代碼文件,支持版本為2.3.0,下載地址:
ttps://sourceforge.net/projects/unixodbc/files/unixODBC/2.3.0/unixODBC-2.3.0.tar.gz/download
將提供的ODBC DRIVER(psqlodbcw.so)配置到數據源中便可使用。配置數據源需要配置“odbc.ini”和“odbcinst.ini”兩個文件(在編譯安裝unixODBC過程中生成且默認放在“/usr/local/etc”目錄下),并在服務器端進行配置。
在Linux下使用ODBC連接數據庫
步驟 1 安裝unixODBC。如果機器上已經安裝了其他版本的unixODBC,可以直接覆蓋安裝。
目前不支持unixODBC-2.2.1版本。以unixODBC-2.3.0版本為例,在客戶端執行如下命令安裝unixODBC。默認安裝到“/usr/local”目錄下,生成數據源文件到“/usr/local/etc”目錄下,庫文件生成在“/usr/local/lib”目錄。
tar zxvf unixODBC-2.3.0.tar.gz
cd unixODBC-2.3.0
#修改configure文件,找到LIB_VERSION
#將它的值修改為"1:0:0",這樣將編譯出*.so.1的動態庫,與psqlodbcw.so的依賴關系相同。
vim configure./configure --enable-gui=no
make
#安裝可能需要root權限
make install
步驟 2 替換客戶端云數據庫GaussDB 驅動程序。
將GaussDB-Kernel-VxxxRxxxCxx-EULER-64bit-Odbc.tar.gz解壓到“/usr/local/lib”目錄下。解壓會得到“psqlodbcw.la”和“psqlodbcw.so”兩個文件。
步驟 3 配置數據源。
1、配置ODBC驅動文件。
在“/usr/local/etc/odbcinst.ini”文件中追加以下內容。
[GaussMPP]
Driver64=/usr/local/lib/psqlodbcw.so
setup=/usr/local/lib/psqlodbcw.so
odbcinst.ini文件中的配置參數說明。
| 參數 | 描述 | 示例 |
|---|---|---|
| [DriverName] | 驅動器名稱,對應數據源DSN中的驅動名。 | [DRIVER_N] |
| Driver64 | 驅動動態庫的路徑。 | Driver64=/xxx/odbc/lib/psqlodbcw.so |
| setup | 驅動安裝路徑,與Driver64中動態庫的路徑一致。 | setup=/xxx/odbc/lib/psqlodbcw.so |
2、配置數據源文件。
在“/usr/local/etc/odbc.ini ”文件中追加以下內容。
[gaussdb]
Driver=GaussMPP
Servername=10.10.0.13(數據庫Server IP)
Database=postgres ?(數據庫名)
Username=omm ?(數據庫用戶名)
Password= ?(數據庫用戶密碼)
Port=8000 (數據庫偵聽端口)
Sslmode=allow
odbc.ini文件配置參數說明。
| 參數 | 描述 | 示例 |
|---|---|---|
| [DSN] | 數據源的名稱。 | [gaussdb] |
| Driver | 驅動名,對應odbcinst.ini中的DriverName。 | Driver=DRIVER_N |
| Servername | 服務器的IP地址。 | Servername=10.145.130.26 |
| Database | 要連接的數據庫的名稱。 | Database=postgres |
| Username | 數據庫用戶名稱。 | Username=omm |
| Password | 數據庫用戶密碼。 | Password=說明ODBC驅動本身已經對內存密碼進行過清理,以保證用戶密碼在連接后不會再在內存中保留。但是如果配置了此參數,由于UnixODBC對數據源文件等進行緩存,可能導致密碼長期保留在內存中。推薦在應用程序連接時,將密碼傳遞給相應API,而非寫在數據源配置文件中。同時連接成功后,應當及時清理保存密碼的內存段。 |
| Port | 服務器的端口號。 | Port=8000 |
| Sslmode | 開啟SSL模式 | Sslmode=allow |
| UseServerSidePrepare | 是否開啟數據庫端擴展查詢協議。可選值0或1,默認為1,表示打開擴展查詢協議。 | UseServerSidePrepare=1 |
| UseBatchProtocol | 是否開啟批量查詢協議(打開可提高DML性能);可選值0或者1,默認為1。當此值為0時,不使用批量查詢協議(主要用于與早期數據庫版本通信兼容)。當此值為1,并且數據庫support_batch_bind參數存在且為on時,將打開批量查詢協議。 | UseBatchProtocol=1 |
| ConnectionExtraInfo | GUC參數connection_info中顯示驅動部署路徑和進程屬主用戶的開關。 | ConnectionExtraInfo=1說明默認值為0。當設置為1時,ODBC驅動會將當前驅動的部署路徑、進程屬主用戶上報到數據庫中,記錄在connection_info參數中。 |
其中關于Sslmode的選項的允許值,具體信息見下表:
| sslmode | 是否會啟用SSL加密 | 描述 |
|---|---|---|
| disable | 否 | 不使用SSL安全連接。 |
| allow | 可能 | 如果數據庫服務器要求使用,則可以使用SSL安全加密連接,但不驗證數據庫服務器的真實性。 |
| prefer | 可能 | 如果數據庫支持,那么首選使用SSL安全加密連接,但不驗證數據庫服務器的真實性。 |
| require | 是 | 必須使用SSL安全連接,但是只做了數據加密,而并不驗證數據庫服務器的真實性。 |
| verify-ca | 是 | 必須使用SSL安全連接,并且驗證數據庫是否具有可信證書機構簽發的證書。 |
| verify-full | 是 | 必須使用SSL安全連接,在verify-ca的驗證范圍之外,同時驗證數據庫所在主機的主機名是否與證書內容一致。如果不一致,需要使用root用戶修改/etc/hosts文件,將連接的數據庫節點的IP地址和主機名加入。 |
步驟 4 SSL模式。
聲明如下環境變量,同時保證client.key*系列文件為600權限:
export PGSSLCERT="/YOUR/PATH/OF/client.crt" #請修改該路徑到client.crt的絕對路徑
export PGSSLKEY="/YOUR/PATH/OF/client.key" ?#請修改該路徑到client.key的絕對路徑
將根證書cacert.pem文件放至客戶端用戶home目錄下的.postgresql目錄下(如果沒有請創建該目錄),并將cacert.pem重命名為root.crt,文件權限設置為600。
同時將數據源中的Sslmode選項調整至“require”。
步驟 5 配置環境變量。
vim ~/.bashrc
在配置文件中追加以下內容。
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
export ODBCSYSINI=/usr/local/etc
export ODBCINI=/usr/local/etc/odbc.ini
步驟 6 執行如下命令使設置生效。
source ~/.bashrc
步驟 7 執行以下命令,開始連接數據庫。
isql -v GaussODBC
GaussODBC為數據源名稱
- 如果顯示如下信息,表明配置正確,連接成功。
+---------------------------------------+
| Connected! ???????????????????????????|
| ??????????????????????????????????????|
| sql-statement ????????????????????????|
| help [tablename] ?????????????????????|
| quit ?????????????????????????????????|
| ??????????????????????????????????????|
+---------------------------------------+
SQL>
- 若顯示ERROR信息,則表明配置錯誤。請檢查上述配置是否正確。
在Windows下使用ODBC連接數據庫
Windows操作系統自帶ODBC數據源管理器,無需用戶手動安裝管理器便可直接進行配置。
步驟 1 替換客戶端云數據庫GaussDB 驅動程序
將GaussDB-Kernel-V500R001C20-Windows-Odbc-X86.tar.gz解壓后,根據需要,點擊psqlodbc.msi(32位)或者psqlodbc_x64.msi(64 位)進行驅動安裝。
步驟 2 打開驅動管理器。
在配置數據源時,請使用對應的驅動管理器(假設操作系統安裝盤符為C盤,如果是其他盤符,請對路徑做相應修改):
- 64位操作系統上進行64位程序開發,安裝64位驅動程序后,使用64位的驅動管理器:C:\Windows\System32\odbcad32.exe
請勿直接使用“控制面板 > 管理工具 > 數據源(ODBC)”。
說明:
WoW64的全稱是"Windows 32-bit on Windows 64-bit",C:\Windows\SysWOW64\存放的是64位系統上的32位運行環境。而C:\Windows\System32\存放的是與操作系統一致的運行環境,具體的技術信息請查閱Windows的相關技術文檔。
- 64位操作系統上進行64位程序開發,安裝64位驅動程序后,使用64位的驅動管理器:C:\Windows\System32\odbcad32.exe
請勿直接使用“控制面板 > 管理工具 > 數據源(ODBC)”。
- 32位操作系統請使用:C:\Windows\System32\odbcad32.exe
或者點擊“計算機 > 控制面板 > 管理工具 > 數據源(ODBC)”打開驅動管理器。
步驟 3 配置數據源。
在打開的驅動管理器上,選擇“用戶DSN > 添加 > PostgreSQL Unicode”(如果是64位驅動,將會有64位標識),然后進行配置:

須知:
此界面上配置的用戶名及密碼信息,將會被記錄在Windows注冊表中,再次連接數據庫時就不再需要輸入認證信息。但是出于安全考慮,建議在單擊"Save"按鈕保存配置信息前,清空相關敏感信息;在使用ODBC的連接API時,再傳入所需的用戶名、密碼信息。
步驟 4 SSL模式。
將client.crt、client.key、client.key.cipher、client.key.rand文件放至%APPDATA%\postgresql(該目錄需手動建立)目錄下,并且將文件名中的client改為postgres,例如client.key修改為postgres.key;將cacert.pem文件放至%APPDATA%\postgresql目錄,并更名為root.crt。
說明:
%APPDATA% 該值在安裝時由客戶指定,默認位置在C:\Users[username]\AppData。
同時將步驟2中的設置窗口的“SSL Mode”選項調整至“require”。
表 sslmode的可選項及其描述
| sslmode | 是否會啟用SSL加密 | 描述 |
|---|---|---|
| disable | 否 | 不使用SSL安全連接。 |
| allow | 可能 | 如果數據庫服務器要求使用,則可以使用SSL安全加密連接,但不驗證數據庫服務器的真實性。 |
| prefer | 可能 | 如果數據庫支持,那么首選使用SSL安全加密連接,但不驗證數據庫服務器的真實性。 |
| require | 是 | 必須使用SSL安全連接,但是只做了數據加密,而并不驗證數據庫服務器的真實性。 |
| verify-ca | 是 | 必須使用SSL安全連接,并且驗證數據庫是否具有可信證書機構簽發的證書。當前windows ODBC不支持cert方式認證。 |
| verify-full | 是 | 必須使用SSL安全連接,在verify-ca的驗證范圍之外,同時驗證數據庫所在主機的主機名是否與證書內容一致。當前windows odbc不支持cert方式認證。 |
步驟 5 點擊Test進行測試連接。
- 如果顯示如下,則表明配置正確,連接成功。

- 若顯示ERROR信息,則表明配置錯誤。請檢查上述配置是否正確。