資源描述:
《PostgreSQL數(shù)據(jù)庫(kù)學(xué)習(xí)手冊(cè)之libpq》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、PostgreSQL數(shù)據(jù)庫(kù)學(xué)習(xí)手冊(cè)之libpq-C庫(kù)--介紹(轉(zhuǎn))[@more@]Chapter1.libpq-C庫(kù)TableofContents1.1.介紹1.2.數(shù)據(jù)庫(kù)聯(lián)接函數(shù)1.3.命令執(zhí)行函數(shù)1.3.1.主過(guò)程1.3.2.為包含在SQL查詢中逃逸字串1.3.3.逃逸包含在SQL查詢中的二進(jìn)制字串1.3.4.檢索SELECT的結(jié)果信息1.3.5.檢索SELECT結(jié)果數(shù)值1.3.6.檢索非-SELECT結(jié)果信息1.4.異步查詢處理1.5.捷徑接口1.6.異步通知1.7.與COPY命令相關(guān)的函數(shù)1.8.libpq跟蹤函數(shù)1.9.libpq控制函數(shù)1
2、.10.環(huán)境變量1.11.文件1.12.線程特性1.13.制作Libpq程序1.14.例子程序1.1.介紹libpq是PostgreSQL的C應(yīng)用程序員的接口.libpq是一套允許客戶程序向PostgreSQL后端服務(wù)進(jìn)程發(fā)送查詢并且獲得查詢返回的庫(kù)過(guò)程.libpq同時(shí)也是其他幾個(gè)PostgreSQL應(yīng)用接口下面的引擎,包括libpq++(C++),libpgtcl(Tcl),Perl,和ecpg.所以如果你使用這些軟件包,libpq某些方面的特性會(huì)對(duì)你非常重要.本節(jié)末尾有三個(gè)小程序顯示如何利用libpq書(shū)寫(xiě)程序.在下面目錄里面有幾個(gè)完整的libpq
3、應(yīng)用的例子:src/test/examplessrc/bin/psql使用libpq的前端程序必須包括頭文件libpq-fe.h并且必須與libpq庫(kù)鏈接.PostgreSQL數(shù)據(jù)庫(kù)學(xué)習(xí)手冊(cè)之libpq-C庫(kù)---數(shù)據(jù)庫(kù)聯(lián)接函數(shù)(轉(zhuǎn))[@more@]1.2.數(shù)據(jù)庫(kù)聯(lián)接函數(shù)下面的過(guò)程處理與PostgreSQL后端服務(wù)器聯(lián)接的事情.一個(gè)應(yīng)用程序一次可以與多個(gè)后端建立聯(lián)接.(這么做的原因之一是訪問(wèn)多于一個(gè)數(shù)據(jù)庫(kù).)每個(gè)連接都是用一個(gè)從PQconnectdb()或PQsetdbLogin()獲得的PGconn對(duì)象表示.注意,這些函數(shù)總是返回一個(gè)非空的對(duì)象指針
4、,除非存儲(chǔ)器少得連個(gè)PGconn對(duì)象都分配不出來(lái).在把查詢發(fā)送給聯(lián)接對(duì)象之前,可以調(diào)用PQstatus函數(shù)來(lái)檢查一下聯(lián)接是否成功.*PQconnectdb與后端數(shù)據(jù)庫(kù)服務(wù)器建立一個(gè)新的聯(lián)接.PGconn*PQconnectdb(constchar*conninfo)這個(gè)過(guò)程用從一個(gè)字符串conninfo來(lái)的參數(shù)與數(shù)據(jù)庫(kù)打開(kāi)一個(gè)新的聯(lián)接.與下面的PQsetdbLogin()不同的是,我們可以不必更換函數(shù)簽名(名字)就可以擴(kuò)展參數(shù)集,所以我們建議應(yīng)用程序中使用這個(gè)函數(shù)或者是它的非阻塞的相似函數(shù)PQconnectStart和PQconnectPoll.傳入
5、的參數(shù)可以為空,表明使用所有缺省的參數(shù),或者可以包含一個(gè)或更多個(gè)用空白間隔的參數(shù)設(shè)置.每個(gè)參數(shù)以關(guān)鍵字=數(shù)值的形式設(shè)置.(要寫(xiě)一個(gè)空值或者一個(gè)包含空白的值,你可以用一對(duì)單引號(hào)包圍它們,例如,keyword='avalue'.?dāng)?shù)值內(nèi)部的單引號(hào)和反斜扛必須用一個(gè)反斜扛逃逸,也就是說(shuō),'或.)等號(hào)周?chē)目瞻资强蛇x的.目前可識(shí)別的參數(shù)鍵字是:host要聯(lián)接的主機(jī)(host).如果主機(jī)名以斜扛開(kāi)頭,則它聲明使用Unix域套接字通訊而不是TCP/IP通訊;該值就是套接字文件所存儲(chǔ)的目錄.缺省時(shí)是與位于/tmp里面的Unix-域套接字聯(lián)接.hostaddr與之聯(lián)接
6、的主機(jī)的IP地址。這個(gè)可以是標(biāo)準(zhǔn)的數(shù)字-點(diǎn)的形式,象在BSD函數(shù)inet_aton等里面用的那樣。如果聲明了一個(gè)非零長(zhǎng)的字符串,那么使用TCP/IP通訊機(jī)制。使用hostaddr取代host可以讓?xiě)?yīng)用避免一次主機(jī)名查找,這一點(diǎn)對(duì)于那些有時(shí)間約束的應(yīng)用來(lái)說(shuō)可能是非常重要的。不過(guò),Kerberos認(rèn)證系統(tǒng)要求主機(jī)(host)名。因此,應(yīng)用下面的規(guī)則。如果聲明了不帶hostaddr的host那么就強(qiáng)制進(jìn)行主機(jī)名查找。如果聲明中沒(méi)有host,hostaddr的值給出遠(yuǎn)端的地址;如果使用了Kerberos,將導(dǎo)致一次反向名字查詢。如果同時(shí)聲明了host和hos
7、taddr,除非使用了Kerberos,否則將使用hostaddr的值作為遠(yuǎn)端地址;host的值將被忽略,如果使用了Kerberos,host的值用于Kerberos認(rèn)證。要注意如果傳遞給libpq的主機(jī)名(host)不是地址hostaddr處的機(jī)器名,那么認(rèn)證很有可能失敗。如果主機(jī)名(host)和主機(jī)地址都沒(méi)有,那么libpq將使用一個(gè)本地的Unix域套接字進(jìn)行通訊。port主機(jī)服務(wù)器的端口號(hào),或者在Unix域套接字聯(lián)接時(shí)的套接字?jǐn)U展文件名.dbname數(shù)據(jù)庫(kù)名.user要聯(lián)接的用戶名。password如果后端要求口令認(rèn)證,所用的口令.connec
8、t_timeout給連接過(guò)程設(shè)置的時(shí)間范圍,以秒計(jì)。零或者不設(shè)置表示無(wú)窮。options發(fā)給后端的跟蹤/調(diào)試