麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-接口-57. ODBC 接口

2019-09-08 23:34:10
字體:
來源:轉載
供稿:網友
第五十七章. ODBC 接口
內容 
背景 
Windows 應用 
Unix 安裝 
配置文件 
ApplixWare 
注意:背景信息最初作者是 Tim Goeke
ODBC (開放數據庫聯接 Open Database Connectivity)是一套 API,用這套 API 允許你書寫可以應用在各種 RDBMS 服務器上互操作的應用.ODBC 提供一個與產品無關的在前端應用和后端數據庫服務器之間的接口,允許用戶可以書寫可以運行于來自不同廠商的數據庫服務器上的應用. 
背景
ODBCAPI把后端匹配為一個 ODBC-兼容的數據源.這些(數據源)可以是從文本文件到 Oracle 或 PostgresRDBMS 的任何東西. 
后端的訪問來自 ODBC 驅動,或者廠商提供的允許數據訪問的驅動.psqlODBC 就是這種驅動,同時還有其他驅動可以得到,例如 OpenLink ODBC 驅動. 

一旦你寫了一個 ODBC 應用,你 應該 能夠與 任何 后端數據庫聯接,不管數據庫廠商是誰,只要數據庫結構是一致的. 

例如.你可以擁有 MS SQL Server 和 Postgres 服務器,它們擁有完全一樣的數據.使用 ODBC,你的 Windows 應用將做完全一樣的調用并且后端數據源將(對 Windows 應用而言)看起來一樣. 
 


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Windows 應用
在現實世界里,驅動的差異和 ODBC 支持的級別降低了 ODBC 的潛能: 
Access,Delphi和 Visual Basic 都直接支持 ODBC.
在 C++ 里,象 Visual C++,你可以使用 C++ ODBCAPI.
在 Visual C++ 里,你可以使用 CRecordSet 類,它把 ODBCAPI 集封裝在 MFC 4.2 類里面.這是在 Windows NT 里開發 Windows C++ 應用的最簡單的途徑.

書寫應用
“如果我寫了一個基于 Postgres 的應用,我能否寫成用 ODBC 對 Postgres 服務器調用的形式,或者是有其他的數據庫程序象 MS SQL Server 或 Access 需要訪問數據時怎么辦?” 
ODBCAPI 就是解決方法.對于 Visual C++ 編碼,你可以在 Microsoft 的站點或者你的 VC++ 文擋里面找到更多信息. 

Visual Basic 和其他 RAD 工具擁有使用 ODBC 直接訪問數據的 Recordset 對象.使用數據敏感的( data-aware )控制,你可以迅速與 ODBC 后端數據庫建立聯接(非常 迅速). 

用 MS Access 進行試驗將幫助你把這些東西弄明白.試著用用 File->Get External Data (文件->獲取外部數據).

小技巧:你必須先設置一個 DSN.

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

Unix 安裝
ApplixWare 有一個 ODBC 數據庫接口至少能夠支持一些平臺.ApplixWare v4.4.2 已經在 Linux 下證明可以與使用包含在 Postgres 里的psqlODBC 驅動的 Postgres v7.0 共同使用. 
制作驅動
談到 psqlODBC 驅動程序(或任何ODBC 驅動程序)的第一件事情就是在使用 ODBC 驅動程序的系統里必須存在一個驅動程序管理器.有一個叫 iodbc 的用于 Unix 的自由軟件 ODBC 驅動程序,我們可以在網上的許多地方獲得這個東西,包括 AS200。(譯注:好象要換個地方 www.iodbc.org ).安裝 iodbc 的指導超出本文擋的范圍,但可以在壓縮的iodbc .shar 文件里面找到一個 README ,說明了如何安裝和運行. 
我們已經說過,你找到的任何用于你的平臺的驅動管理器應該支持psqlODBC 驅動或者任何 ODBC 驅動. 

用于 psqlODBC 的 Unix 配置文件最近已經大大修改了,以便于很容易地在支持的平臺上制作(驅動)同時也便于今后對其他 Unix 平臺的支持.該驅動的新的配置和制作文件應該已經把在支持的平臺上制作驅動變為一個簡單的過程.目前這些(平臺)包括 Linux 和FreeBSD,但我們希望其他用戶可以奉獻出必要的信息以便迅速擴展這個驅動可以制作的平臺的數量. 

實際上只有兩個獨立的制作驅動的方法 --取決于你是如何獲得驅動的,這些區別最終只是體現在你在那里和如何運行 configure 和make.驅動程序可以當作一種獨立的,只有客戶端的安裝,或者可以作為主 Postgres 發布的一部分.如果你的 ODBC 客戶端應用運行在多種異種平臺上,獨立安裝的方式比較方便.當目標客戶端和服務器一樣或者客戶端和服務器有著相似的配置時,集成的安裝模式比較方便. 

詳細說來,如果你把 psqlODBC 驅動做為 Postgres 版本的一部分制作(從現在開始我們把這個當作一次 "集成" 制作)那么你將在 Postgres 版本的頂級目錄和 Postgres 其他的庫文件一起配置和安裝 ODBC 驅動程序.如果你的驅動是一個獨立的包,那么你將在你解開驅動源程序的位置配置和制作驅動. 
  

集成安裝 
這個安裝過程適用于一次集成安裝. 

為 src/configure 聲明 --with-odbc 命令行參數: 
% ./configure --with-odbc
% make
重新制作 Postgres 版本: 
% make install
安裝放在 PGROOT/contrib/odbc/odbc.sql 里面的 ODBC 目錄擴展: 
% psql -e template1 < $PGROOT/contrib/odbc/odbc.sql
這里聲明 template1 作為目標數據庫將保證所有后繼的數據庫都有這些相同的定義.
一旦配置完,ODBC 驅動將在為 Postgres 系統其他部件定義的區域里制作和安裝.安裝范圍的 ODBC 配置文件將被放置在 Postgres 目標樹(POSTGRESDIR)的頂層目錄.你可以用 make 命令行替換這個位置 
% make ODBCINST=filename install
v6.4前的集成安裝 
如果你安裝有早于 v6.4 的 Postgres,而且你擁有最初的源代碼樹,并且你想使用最新的版本的 ODBC 驅動,那么你可能會希望下面這樣的安裝. 

拷貝輸出的 tar 文件到你的目標系統,并且在一個干凈的目錄里解開包. 
在包含源代碼的目錄里面,鍵入: 

% ./configure
% make
% make POSTGRESDIR=PostgresTopDir install
如果你想把安裝組件放到不同的目錄樹中,那么你可以顯式地聲明各種不同的目的地: 
% make BINDIR=bindir  LIBDIR=libdir  HEADERDIR=headerdir ODBCINST=instfile install
獨立的安裝 
一次獨立的安裝不是集成在一個正常的 Postgres 版本的制作過程中的.這種方法很適合為有多種不同平臺的有本地安裝的 Postgres 源代碼樹的客戶端上制作 ODBC 驅動. 

獨立安裝的庫和頭文件的缺省路徑分別是 /usr/local/lib 和 /usr/local/include/iodbc。另外還安裝一個系統范圍的配置文件到 /share/odbcinst.ini (如果 /share 存在)或 /etc/odbcinst.ini (如果 /share 不存在). 

注意:把文件安裝到 /share 或者 /etc 需要 root 權限.Postgres 的大多數安裝步驟不需要這個條件,而且你可以選另一個 Postgres 超級用戶可寫的目標路徑替換之.
獨立安裝的版本可以在 Postgres 發布版本里面制作或者可以從 Insight Distributors,目前的非 Unix 源碼維護者獲取源代碼. 
把壓縮的 tar 文件拷貝到一個空目錄.如果用的是 zip 包,用下面命令解包 

% unzip -a packagename
-a 選項可以去掉 DOS 源文件里的 CR/LF 對. 
如果你拿到的是 gzipped tar 包,那么運行 

% tar -xzf packagename
從主 Postgres 源文件樹里創建一個完整的獨立安裝 tar 文件:
配置主 Postgres 版本. 
創建 tar 文件: 

% cd interfaces/odbc
% make standalone
拷貝輸出的 tar 文件到你的目標系統.如果使用 ftp,應該使用二進制模式傳輸. 
把 tar 文件解開到一個干凈的目錄. 

配置獨立安裝: 

% ./configure
配置可以帶有選項進行: 
% ./configure --prefix=rootdir --with-odbc=inidir
這里 --prefix 把庫和頭文件安裝到目錄 rootdir/lib 和 rootdir/include/iodbc 下,并且 --with-odbc 把 odbcinst.ini 安裝到指定的目錄. 
注意這些選項同樣可以用于集成安裝,但是要注意用于集成安裝時--prefix 將同樣應用于你的 Postgres 安裝的其他部分.--with-odbc 只適用于配置文件 odbcinst.ini。 

編譯并鏈接源代碼: 

% make ODBCINST=instdir
你同樣可以在 'make' 命令行上覆蓋缺省安裝路徑.這些只適用于庫和頭文件的安裝路徑.因為驅動需要知道 odbcinst.ini 文件的位置,試圖覆蓋聲明該文件的安裝路徑將可能讓你很頭疼.最安全的方法是簡單的允許驅動把 odbcinst.ini 文件裝到缺省路徑或者你在 './configure' 命令行用 --with-odbc 聲明的路徑. 
安裝源代碼: 

% make POSTGRESDIR=targettree install
要分別覆蓋庫和頭文件的安裝路徑,你需要在 make install 命令行上傳遞正確的安裝變量.這些變量是 LIBDIR,HEADERDIR 和 ODBCINST.在 make 命令行上覆蓋 POSTGRESDIR 將導致 LIBDIR 和 HEADERDIR 放在你聲明的新目錄里的頂層.ODBCINST 獨立于 POSTGRESDIR。 
下面是你如何顯式地聲明目標變量的例子: 

% make BINDIR=bindir LIBDIR=libdir HEADERDIR=headerdir install
例如,鍵入 
% make POSTGRESDIR=/opt/psqlodbc install
(在你運行過 ./configure 和 make 后)將導致庫和頭文件被分別安裝到目錄 /opt/psqlodbc/lib 和/opt/psqlodbc/include/iodbc . 
命令 

% make POSTGRESDIR=/opt/psqlodbc HEADERDIR=/usr/local install
應該導致庫被安裝到 /opt/psqlodbc/lib 而頭文件安裝到 /usr/local/include/iodbc.如果這些不起作用,請與某位維護者聯系。

--------------------------------------------------------------------------------

--------------------------------------------------------------------------------

配置文件
~/.odbc.ini 包含用戶為 psqlODBC 聲明的訪問信息.這個文件用了 Windows 注冊表文件的習慣,但是忽略這些限制也可以. 
.odbc.ini 文件有三個必須的段.第一個是 [ODBC Data Sources],定義了一個你希望訪問的每個數據庫的任意名稱和描述.第二個必須的段是 Data Source Specification (數據源聲明)并且每個數據庫都將有一個這樣的段.每個段必須用 [ODBC Data Sources] 里給出的名稱標記并且必須包含下面的內容: 

Driver = POSTGRESDIR/lib/libpsqlodbc.so
Database=DatabaseName
Servername=localhost
Port=5432
小技巧:記住 Postgres 數據庫名通常是單獨一個詞,沒有任何類型的路徑名稱.Postgres 服務器管理對數據庫的實際訪問,并且你只需要在客戶端聲明(數據庫)名稱.
可以增加其他條目用于控制顯示的格式.第三個必須的段是 [ODBC],必須包含 InstallDir 關鍵字和一些其他選項. 
這里是一個 .odbc.ini 文件的例子,顯示了三個數據庫的訪問信息: 

[ODBC Data Sources]
DataEntry = Read/Write Database
QueryOnly = Read-only Database
Test = Debugging Database
Default = Postgres Stripped

[DataEntry]
ReadOnly = 0
Servername = localhost
Database = Sales

[QueryOnly]
ReadOnly = 1
Servername = localhost
Database = Sales

[Test]
Debug = 1
CommLog = 1
ReadOnly = 0
Servername = localhost
Username = tgl
Password = "no$way"
Port = 5432
Database = test

[Default]
Servername = localhost
Database = tgl
Driver = /opt/postgres/current/lib/libpsqlodbc.so

[ODBC]
InstallDir = /opt/applix/axdata/axshlib

--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

ApplixWare
配置
必須正確配置 ApplixWare ,以便讓它能夠訪問 PostgresODBC 驅動軟件. 
  
允許 ApplixWare 數據庫訪問 
這些指導信息適用于 Linux 上的 4.4.2 版本的 ApplixWare.請參考 Linux 系統管理 在線手冊獲取更詳細的信息. 

你必須修改 axnet.cnf 以便于 elfodbc 可以找到 libodbc.so (ODBC 驅動管理器)共享庫.這個庫包含在 ApplixWare 發布版本里,但是要修改 axnet.cnf 指向正確的位置. 
以 root 身份編輯文件  applixroot/applix/axdata/axnet.cnf. 

在 axnet.cnf 的底部,找出以下面文字開頭的一行 
#libFor elfodbc /ax/...
把這一行改成 
libFor elfodbc applixroot/applix/axdata/axshlib/lib
告訴 elfodbc 在這個路徑里查找 ODBC 支持庫.通常 Applix 被裝在 /opt,這樣完整的路徑就是 /opt/applix/axdata/axshlib/lib,但如果你在其他地方安裝了 Applix ,相應的修改路徑.
創建上面描述的 .odbc.ini.你可能還要增加標志 
TextAsLongVarchar=0
到 .odbc.ini 的數據庫聲明部分,這樣文本字段就不會顯示為 **BLOB**。
測試 ApplixWare ODBC 聯接 
運行 Applix Data 
選擇感興趣的 Postgres 數據庫. 

選擇 Query->Choose Server. 
選擇 ODBC,并且敲擊 Browse.你在 .odbc.ini 里配置的數據庫應該顯示出來.確保  Host: field  是空的(如果不是,axnet 將試圖與另一臺機器的 axnet 聯接查找數據庫).S 

選擇敲擊 Browse 顯示出的數據庫,然后敲擊 OK. 

在登錄標識對話框里輸入 username(用戶名)和 password (口令).然后敲擊 OK.

你應該看到在數據窗口左下腳有 “Starting elfodbc server” (啟動 elfodbc 服務器)字樣.如果彈出一個錯誤對話框,參考下面的調試章節. 
'Ready'(就緒)信息將在數據窗口的左下角出現.這表明你現在可以輸入查詢. 

從 Query->Choose tables 選擇一個表,然后選擇 Query->Query 來訪問該數據庫.表的頭 50 行左右的信息將顯示出來.

常見問題
在嘗試通過 Applix Data 建立一個 ODBC 聯接時下面的信息可能出現: 
Cannot launch gateway on server(無法在服務器上建立網關) 
elfodbc can't find libodbc.so. Check your axnet.cnf.(elfodbc 無法找到 libodbc.so.檢查你的 axnet.cnf.) 
Error from ODBC Gateway: IM003::[iODBC][Driver Manager]Specified driver could not be loaded 
libodbc.so 不能在找到 .odbc.ini 里列出的驅動.檢查設置. 
Server: Broken Pipe 
驅動進程因為其他原因結束的.你可能拿的不是最新的 Postgres ODBC 軟件包. 
  
setuid to 256: failed to launch gateway 
九月發布的 ApplixWare v4.4.1(第一個有 Linux 下官方支持的 ODBC)在用戶名超過八(8)字符長時有問題.這個問題是 Steve Campbell 發現的. 
作者:由 Steve Campbell 在 1998-10-20 提交.
axnet 程序的安全系統看起來有一點奇怪.axnet 代理用戶的事務,因而在一個真正的多用戶系統它應該以 root 權限(這樣它可以讀/寫每個用戶的目錄).我對建議這樣做有些猶豫,因為我們不知道這樣會引起什么樣的安全漏洞.
調試 ApplixWare ODBC 聯接
一個調試聯接問題的很好的 Unix 系統工具是 strace. 
用 strace 調試 
啟動 applixware. 
在 axnet 進程上運行一個 strace.例如,如果 

% ps -aucx | grep ax
顯示 
cary   10432  0.0  2.6  1740   392  ?  S  Oct  9  0:00 axnet
cary   27883  0.9 31.0 12692  4596  ?  S   10:24  0:04 axmain
那么運行 
% strace -f -s 1024 -p 10432
檢查 strace 輸出. 
來自 Cary :許多從 ApplixWare 來的錯誤信息輸出到 stderr,但是我不能確定 stderr 發送到哪里,所以 strace 是把它們找出來的方法.
例如,在得到一個 “Cannot launch gateway on server”,我在 axnet 上運行 strace 并且得到 
[pid 27947] open("/usr/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
[pid 27947] open("/lib/libodbc.so", O_RDONLY) = -1 ENOENT
(No such file or directory)
[pid 27947] write(2, "/usr2/applix/axdata/elfodbc:
can't load library 'libodbc.so'/n", 61) = -1 EIO (I/O error)
所以發生的錯誤是 applix elfodbc 在查找 libodbc.so,但是找不到.這就是為什么 axnet.cnf 需要修改的原因.
運行 the ApplixWare 演示
為了通過 ApplixWare 數據教程,你需要創建教程提到的樣例表.所用的創建表的 ELF 宏試圖在許多數據庫字段上使用一個 NULL 條件,而目前 Postgres 不允許這些選項. 
  
要繞開這些問題,你可以按下面方法做: 
修改 ApplixWare 演示 
拷貝 /opt/applix/axdata/eng/Demos/sqldemo.am 到一個本地目錄. 
編輯本地 sqldemo.am 的拷貝: 

查找 'null_clause = "NULL" 
修改這些成為 null_clause = ""

運行 Applix Macro Editor. 
從 Macro Editor 里打開 sqldemo.am 文件. 

選擇 File->Compile and Save. 

退出 Macro Editor. 

運行 Applix Data. 

選擇 *->Run Macro 

輸入值 “sqldemo”,然后敲擊 OK. 

你應該看到數據窗口狀態欄的的進度(在左下角). 

你現在應該可以訪問 demo 表.

有用的宏
你可以向你的標準 Applix 啟動宏文件里增加關于你的數據庫登錄和口令的信息.這是一個例子文件 ~/axhome/macros/login.am: 
macro login
set_set_system_var@("sql_username@","tgl")
set_system_var@("sql_passwd@","no$way")
endmacro
  注意 
對任何含有用戶名和口令信息的文件你都要仔細保護. 

支持的平臺
psqlODBC 已經在 Linux 制作和測試過了.也有在 FreeBSD 和 Solaris 上成功的報告.在代碼里沒有限制它在已經支持 Postgres 的平臺上運行的東西。(譯注:這里大部分內容是ApplixWare的特點,那位朋友有經驗,能否詳細介紹一下?)

--------------------------------------------------------------------------------
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久羞羞视频 | 高清在线观看av | 天天看成人免费毛片视频 | 免费一级特黄做受大片 | 欧美a黄 | 免费观看一级欧美大 | 91一区二区三区久久久久国产乱 | 中文字幕电影免费播放 | 中文字幕网址 | 黄色毛片视频在线观看 | 国产精品美女久久久久久不卡 | 免费在线观看成人av | 欧美精品免费一区二区三区 | 黄色av电影在线播放 | 免费激情网址 | 日韩精品久久久 | 日韩精品久久久久久久九岛 | 亚洲精品欧美二区三区中文字幕 | 一级毛片在线观看视频 | www.精品在线 | 在线播放亚洲 | 欧美日韩免费看 | 国产一精品久久99无吗一高潮 | 免费a级网站 | 久久久国产精品视频 | 欧美黄色免费视频 | 国产成人精品网站 | 久久久综合视频 | 久久国产精品99久久人人澡 | 国产在线1区 | 精品国产一区二区三区四区阿崩 | 精品国产乱码久久久久久丨区2区 | 日本搞逼视频 | 99re久久最新地址获取 | 久久精品国产99国产精品澳门 | 亚洲一区二区免费 | 久久久www视频 | 成年人毛片视频 | 亚洲一区 国产精品 | 久久久久久三区 | 91成人午夜性a一级毛片 |