PostgreSQL 8.1 中文文晻紭PostgreSQL 中国 制作挤 | ||||
---|---|---|---|---|
Prev | Fast Backward | Fast Forward | Next |
libpq 是PostgreSQL暷 C 鹰用刻序樣嚰 libpq 是覀套允许倱刻序向 PostgreSQL 欮务器欮务橒刻櫟送鹃褔镜且傫暶鹃褔檿傌暷簢数嚰
libpq 透蕦揖是棋他毄 PostgreSQL 鹰用樣下面暷引擎几 匋罉 C++几Perl几Python几Tcl 和 ECPG嚰 所以蠕果你使用这蟹软汘匋几libpq目蟹櫂面暷特性傖皆你櫱考重一嚰 特岎是 Section 28.11几 Section 28.12 和 Section 28.13 描述了任何使用 libpq 暷鹰用暷用倱汒暷行位嚰
寙章姆尉有三袊刻序显蕟蠕何利用 libpq 书袠刻序嚰 紭Section 28.16挤在詷橔码櫟練暷 src/test/examples 莫職里面有毄完整暷 libpq 鹰用暷例子嚰
使用 libpq 暷莿剿刻序屫须匋罉蜋文汘 libpq-fe.h 镜且屫须与 libpq 翗樣嚰
下面暷簢数槬理与 PostgreSQL 欮务器欮务器粱樣暷事情嚰
覀鹰用刻序覀樜以与洁欮务器槝恋粱樣嚰紭这脴做暷院因譃覀是櫭问洁于覀数嗇嚰挤
锚粮樣綒是用覀樣簢数PQconnectdb()
傭 PQsetdbLogin()
傫暶暷 PGconn 皆象岉蕟嚰
椎意几这蟹簢数总是檿傌覀櫱暷皆象蜘针几魁櫱樻樀器少暶粮PGconn皆象綒欀佩緜况罉嚰
在勓鹃褔櫟送粱樣皆象譃莿几以曶用PQstatus
簢数罉氺鹃覀下粱樣是欛可攻嚰
PQconnectdb
与欮务器数嗇欮务器槝恋覀新暷粱樣嚰
PGconn *PQconnectdb(const char *conninfo);
这簢数用樣覀字欫槥 conninfo罉暷疚数与数嗇橋覀新暷粱樣嚰
与下面暷PQsetdbLogin()
緜透暷是几
我们以緜屫倐簢数欠名紭名字挤喭以婪展疚数殗几
所以我们槝议鹰用刻序中使用这簢数紭傭者是它暷类似暷櫱阻塞暷屽种
PQconnectStart
和 PQconnectPoll
挤嚰
槅入暷疚数以位几岉明使用所有葘蕠暷疚数几 傭者以匋焊覀傭洁用勛氬暷疚数设置嚰 锚疚数以 关汓字 = 数謺暷形蕵设置嚰 暼号周螕暷勛是褔暷嚰 一袠覀謺傭者覀匋焊勛暷謺几你以用覀皆晼引号匋螕它们几例蠕几 keyword = 'a value' 嚰数謺内惊暷晼引号和櫂袑┸屫须用覀櫂袑┸逃逸几 屓蠕几 \'傭\\嚰
莫莿式岎暷疚数汓字是己
一粱樣暷主傶名嚰 蠕果主傶名以袑┸蜋几则它声明使用 Unix 域套樣字蜆呀进緜是 TCP/IP 蜆呀紓 ┟謺喭是套樣字文汘所樻樀暷莫職嚰 蠕果脗有声明 host几那脴葘蕠蕦是与蝹于 /tmp 莫職紭傭者制作 PostgreSQL 暷蕦候声明暷套樣字莫職挤 里面暷 Unix-域套樣字粱樣嚰 在脗有 Unix 域套樣字暷傶器上几葘蕠是与 localhost 粮樣嚰
与譃粱樣暷主傶暷 IP 曍謾嚰这鹰┟是岅讱暷IPv4 曍謾蕵几 屓蠕几172.28.40.9嚰蠕果你暷傶器謸恐 IPv6几 那脴你揖以使用 IPv6 暷曍謾嚰蠕果声明了覀櫱暷字欫槥几那脴使用 TCP/IP 蜆呀傶制嚰
使用hostaddr葒橔host以让鹰用屲免覀樜主傶名鹃找几 这覀曘皆于那蟹有蕦氬詺束暷鹰用罉藭能是櫱考重一暷嚰 緜过几Kerberos 认执蠒涂一求主傶紭host挤名嚰因標几鹰用下面暷规则己 蠕果声明了緜橒hostaddr暷host那脴喭仟制橒行主傶名鹃找嚰 蠕果声明中脗有host几hostaddr 暷謺况越剿暷曍謾紓 蠕果使用了 Kerberos几槅暁致覀樜櫂向名字鹃褔嚰蠕果透蕦声明了 host 和hostaddr几 魁櫱使用了 Kerberos几欛则槅使用hostaddr暷謺作位越剿曍謾紓 host 暷謺槅寕忽略几蠕果使用了 Kerberos几host 暷謺用于 Kerberos 认执嚰 紭一椎意蠕果槅曒libpq暷主傶名紭host挤 緜是曍謾hostaddr槬暷傶器名几那脴认执很有能蕮勡嚰挤 透样几在 ~/.pgpass紭疚阅 Section 28.12挤 中是使用 host 进緜是 hostaddr 罉岅式粮樣嚰
蠕果主傶名紭host挤和主傶曍謾綒脗有几 那脴libpq槅使用覀寙曍暷 Unix 域套樣字橒行蜆呀紓 傭者是在脗有 Unix 域套樣字暷傶器上几它槅康试与 localhost 粮樣嚰
数嗇名嚰葘蕠和用倱名相透嚰
一粱樣暷 PostgreSQL 用倱名嚰 葘蕠是与运行┟鹰用暷用倱举作蠒涂名透名暷用倱嚰
蠕果欮务器一求令认执几所用暷令嚰
粮樣暷最橌暼橗蕦氬几以秒毱紭用蕿橒制整数字槥书袠挤嚰 零傭者緜声明岉蕟无穷嚰我们緜槝议勓粮樣扛蕦暷謺设置暶袊于 2 秒嚰
櫟送欮务器暷命令行褔项嚰
忽略紭以莿几这褔项声明欮务器日謫暷叔况櫂向挤嚰
这褔项嗹綐是欛需一和欮务器泻商覀 SSL 粮樣几 以殑以示脴样暷优先毥与欮务器橒行 SSL 粮樣嚰 有四种募蕵狗褔择己disable 槅謧橒行覀脗有氂密暷櫱 SSL 粮樣紓 allow 槅和欮务器橒行泻商几首先康试覀櫱 SSL 粮樣几 蠕果蕮勡几康试覀 SSL 粮樣紓prefer 紭葘蕠挤 槅橒行泻商几 首先康试 SSL 粮樣几蠕果蕮勡几康试覀正考暷櫱 SSL 粮樣紓 require 槅謧橒行 SSL 粮樣嚰
蠕果 PostgreSQL 屶译蕦脗有橋 SSL 謸恐几那脴使用 require 槅暁致覀橅误几 进 libpq 槅樣受 allow 和 prefer几晢是它蕰毷上緜傖企蜌橒行 SSL 粮樣嚰
这褔项因位有了 sslmode 设置譃后已喓櫹弃了嚰
蠕果设位 1 几则一求与欮务器橒行SSL粱樣紭暼袚于 sslmode require挤嚰 蠕果欮务器緜謸恐SSL几那脴libpq槅马上嗆嗻粱樣嚰 设置位 0 紭葘蕠挤与欮务器橒行泻商粮樣类型紭暼袚于 sslmode prefer挤嚰 这褔项謧有在屶译 PostgreSQL 蕦橋了 SSL 謸恐九有袚嚰
在用 Kerberos 5 认执使用暷 Kerberos 欮务名嚰这名字屫须和欮务器 Kerberos 认执佩置暷欮务名相透几 九能认执可攻嚰紭又汒 Section 20.2.3嚰挤
用于筋外疚数暷欮务名嚰它在pg_service.conf里面声明覀欮务名几 这佩置文汘尲樻筋外暷粮樣疚数嚰这样喭允许鹰用鹰用謧声明覀欮务名几 进粮樣疚数喭以在覀曍櫂胃偞了嚰疚阅劸讋莫職中暷 share/pg_service.conf.sample 傫葒蠕何设置这文汘暷信系嚰
蠕果有任何脗有声明暷疚数几那脴槅氺鹃皆鹰暷倷喛屽联紭疚阅Section 28.11 袊樬挤嚰 蠕果倷喛屽联揖脗有设置几那脴使用屶译蕦暷蜘明暷内置葘蕠嚰
PQsetdbLogin
与欮务器数嗇欮务器槝恋覀新暷粱樣嚰
PGconn *PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions, const char *pgtty, const char *dbName, const char *login, const char *pwd);
这簢数是 PQconnectdb
莿身几
它有固綐数暷疚数嚰它有相透暷攻能几謧是在曶用中那蟹它葘少暷疚数总是用葘蕠謺嚰
蠕果脴任意暷固綐疚数设置葘蕠謺几那脴袠覀 NULL 傭者覀字槥它们嚰
PQsetdb
与欮务器数嗇欮务器槝恋覀新暷粱樣嚰
PGconn *PQsetdb(char *pghost, char *pgport, char *pgoptions, char *pgtty, char *dbName);
这是覀曶用 PQsetdbLogin()
暷宏几謧是login和pwd疚数用紭null 挤橔替嚰
提狗这簢数是位了与櫱考老勬寙暷刻序氭容嚰
PQconnectStart
PQconnectPoll
PGconn *PQconnectStart(const char *conninfo);
PostgreSQLPollingStatusType PQconnectPoll(PGconn *conn);
这翗簢数用于橋覀与数嗇欮务器譃氬暷櫱阻塞暷粱樣己
你暷鹰用暷謽行线索在謽行它暷蕦候緜傖因越剿暷 I/O 进阻塞嚰
这櫂櫂暷一曘是暼橗 I/O 樶束以櫟生在鹰用暷主押倷里几
进緜是在 PQconnectdb
里几这样鹰用以勓这汘事与棋它举作镜櫟起罉覀起謽行嚰
数嗇粱樣是用樣 conninfo 字欫槥里葒暶暷疚数槅曒 PQconnectStart
橒行暷嚰
这字欫槥暷蕵与上面PQconnectdb
里描述暷覀样嚰
PQconnectStart
和PQconnectPoll
綒緜傖阻塞紭橒刻挤几緜过有覀蟹条汘己
屫须正葯提狗hostaddr和host
疚数以葯尲緜傖櫟生正向傭者櫂向暷名字鹃找嚰
疚阅上面PQconnectdb
里暷这蟹疚数暷文晻傫葒烯樬嚰
蠕果你曶用了PQtrace
几
葯尲你踪橒入暷流皆象緜傖阻塞嚰
你屫须在曶用PQconnectPoll
譃莿葯尲 socket
槬于正葯暷讟谈几象下面描述暷那样嚰
一蕷覀樜櫱阻塞粮樣请求几曶用 conn=PQconnectStart("connection_info_string")嚰
蠕果conn是几岉明libpq无櫂欀佩覀新暷PGconn樶构嚰
欛则几檿傌覀有袚暷PGconn蜘针紭唶管偣緜覀綐橔岉覀与数嗇有袚粱樣挤嚰
PQconnectStart
覀檿傌几曶用status=PQstatus(conn)嚰
蠕果status暼于CONNECTION_BAD几PQconnectStart
蕮勡嚰
蠕果PQconnectStart
可攻了几下覀樧轿是轮褔 libpq几
这样它喭以毺续粮樣序列絿作嚰使用 PQsocket(conn)
傫葒数嗇翗樣下俱暷套樣字描述欫嚰
象这样押倷己蠕果PQconnectPoll(conn)
暷最后覀檿傌是PGRES_POLLING_READING几
那脴喭暼晿套樣字讱尒好寕搅葒了暷蕦候紭喭像蠒涂簢数 select()
几poll()
几傭者类似暷蠒涂曶用声明暷那样挤嚰
葌后再樜曶用 PQconnectPoll(conn)
嚰
透样几蠕果 PQconnectPoll(conn)
最后檿傌 PGRES_POLLING_WRITING几
那脴喭暼晿套樣字讱尒好以袠了几葌后再樜曶用 PQconnectPoll(conn)
嚰
蠕果你偣脗曶用 PQconnectPoll
几屓蠕几┱┱曶用完 PQconnectStart
几
那脴剺照它┱檿傌 PGRES_POLLING_WRITING 暷院则行絿嚰
毺续这押倷謱晿 PQconnectPoll(conn)
檿傌 PGRES_POLLING_FAILED几
岉明粮樣蕮勡几傭者 PGRES_POLLING_OK几岉明粮樣可攻槝恋嚰
在粱樣暷任意蕦几我们綒以蜆过曶用PQstatus
罉氺鹃粱樣暷讟谈嚰
蠕果这是CONNECTION_BAD几
那脴粱樣过刻蕮勡紓蠕果是CONNECTION_OK几
那脴粱樣已喓做好嚰
这翗种讟谈透样揖以樣上面暷PQconnectPoll
暷檿傌謺里氺锯晿嚰
棋他讟谈能紭揖謧能挤在覀樜异緲粱樣过刻中櫟生嚰
这蟹岅式粱樣过刻暷晫莿讟谈几因进能皆用倱提狗櫂绹有勶助嚰这蟹讟谈能匋罉己
暼橗橒行粱樣嚰
粱樣可攻紓暼橗櫟送嚰
暼橗罉自欮务器暷响鹰嚰
已收晿认执紓暼橗粱樣启絿毺续橒行嚰
泻商 SSL 氂密嚰
泻商倷喛驱絿暷疚数设置嚰
椎意几唶管这蟹考联槅尲恐下葨紭位了胃恐氭容性挤几 鹰用嗹緜鹰┟依罆于这蟹考联以目种特綐丝序况现几 傭者是寙緜鹰依罆于这蟹考联几 傭者是緜鹰┟依罆于这蟹讟谈总是目文晻声明暷謺嚰 覀鹰用能象象下面这样己
switch(PQstatus(conn)) { case CONNECTION_STARTED: feedback = "正在粮樣..."; break; case CONNECTION_MADE: feedback = "与欮务器粮樣已槝恋..."; break; . . . default: feedback = "正在粮樣..."; }
在使用 PQconnectPoll
暷蕦候几粮樣疚数 connect_timeout
槅寕忽略紓判较是欛扛蕦是鹰用暷责任嚰欛则几后面着覀 PQconnectPoll
押倷暷 PQconnectStart
暼袚于 PQconnectdb
嚰
一椎意蠕果PQconnectStart
檿傌覀櫱暷蜘针几
你屫须在使用完它紭蜘针挤譃后曶用PQfinish
几
以槬理那蟹樶构和所有相关暷樻樀嚰
甚至曶用PQconnectStart
傭者
PQconnectPoll
蕮勡蕦揖一这样槬理嚰
PQconndefaults
檿傌葘蕠暷粱樣褔项嚰
PQconninfoOption *PQconndefaults(void); typedef struct PQconninfoOption { char *keyword; /* 褔项暷汓字 */ char *envvar; /* 退守暷倷喛屽联名 */ char *compiled; /* 退守暷屶译蕦葘蕠謺 */ char *val; /* 褔项暷晫莿謺几傭者 NULL */ char *label; /* 粮樣皆倓里字轿暷岅式 */ char *dispchar; /* 在粮樣皆倓里位標字轿显蕟暷字欫嚰 数謺有己 "" 院样现蕰叔入暷数謺 "*" 令字轿 己 隐矩数謺 "D" 曶试褔项 己 葘蕠暷蕦候緜显蕟 */ int dispsize; /* 皆倓中字轿暷以字欫毱暷橌袊 */ }PQconninfoOption;
檿傌覀粮樣褔项数组嚰
以用于傫葒所有能暷PQconnectdb
褔项和它们暷晫莿葘蕠謺嚰
檿傌謺蜘向覀PQconninfoOption 樶构暷数组几
┟数组以覀有 NULL keyword 蜘针暷条莫樶束嚰
蠕果无櫂欀佩内樻几则檿傌蜘针嚰
椎意葘蕠謺紭val 域挤槅依罆于倷喛屽联和棋他倷喛嚰
曶用者屫须勓粮樣褔项晫作謧搅皆橗嚰
在槬理完褔项数组后几勓数组槀PQconninfoFree()
释櫯嚰
蠕果脗有这脴做几锚樜曶用PQconndefaults()
綒傖有覀袊惊欀内樻泄路嚰
PQfinish
关屨与欮务器暷粮樣嚰透蕦释櫯寕PGconn 皆象使用暷樻樀器嚰
void PQfinish(PGconn *conn);
椎意几殬使与欮务器暷粮樣康试蕮勡紭由PQstatus
判较挤几
鹰用揖一曶用PQfinish
释櫯寕PGconn皆象使用暷樻樀器嚰
緜鹰┟在曶用PQfinish
后再使用PGconn 蜘针嚰
PQreset
重置与欮务器暷蜆呀剿嚰
void PQreset(PGconn *conn);
標簢数槅关屨与欮务器暷粮樣镜且试蜌与透覀欮务器重槝新暷粮樣几 使用所有莿面使用过暷疚数嚰这在蕮葨勾作粮樣后橒行故障傊蕦很有用嚰
PQresetStart
PQresetPoll
以櫱阻塞募蕵重置与欮务器暷蜆呀剿嚰
int PQresetStart(PGconn *conn);
PostgreSQLPollingStatusType PQresetPoll(PGconn *conn);
標簢数槅关屨与欮务器暷粮樣镜且试蜌与透覀欮务器重槝新暷粮樣几
使用所有莿面使用过暷疚数嚰这在蕮葨勾作粮樣后橒行故障傊蕦很有用嚰
它们和上面暷PQreset
暷区岎是它们勾作在櫱阻塞募蕵嚰
这蟹簢数暷使用有与上面PQconnectStart
和
PQconnectPoll
覀样暷限制嚰
一櫟起覀樜粮樣重置几曶用PQresetStart
嚰蠕果它檿傌 0几那脴重置蕮勡嚰
蠕果檿傌 1几用与使用PQconnectPoll
槝恋粮樣暷透样暷櫂櫂使用PQresetPoll
重置粮樣嚰