33.2. ФÑнкÑии, опиÑÑваÑÑие ÑекÑÑее ÑоÑÑоÑние подклÑÑениÑ
ÐÑи ÑÑнкÑии могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑоÑа ÑоÑÑоÑÐ½Ð¸Ñ Ð¾Ð±ÑекÑа, опиÑÑваÑÑего ÑÑÑеÑÑвÑÑÑее подклÑÑение к базе даннÑÑ .
ÐодÑказка
РазÑабоÑÑики пÑиложений на оÑнове libpq Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑаÑелÑно поддеÑживаÑÑ Ð°Ð±ÑÑÑакÑÐ¸Ñ PGconn. СледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑнкÑии доÑÑÑпа, опиÑаннÑе ниже, Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑодеÑжимого PGconn. ÐбÑаÑение напÑÑмÑÑ Ðº внÑÑÑенним полÑм PGconn, иÑполÑзÑÑ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð· libpq-int.h, не ÑекомендÑеÑÑÑ, поÑколÑÐºÑ Ð¾Ð½Ð¸ могÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð² бÑдÑÑем.
СледÑÑÑие ÑÑнкÑии возвÑаÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов, коÑоÑÑе бÑли ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. ÐÑи знаÑÐµÐ½Ð¸Ñ Ð½Ðµ изменÑÑÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¶Ð¸Ð·Ð½Ð¸ ÑоединениÑ. ÐÑли иÑполÑзÑеÑÑÑ ÑÑÑока ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð½ÐµÑколÑкими Ñзлами, знаÑÐµÐ½Ð¸Ñ PQhost, PQport и PQpass могÑÑ Ð¼ÐµÐ½ÑÑÑÑÑ, еÑли Ñ Ñем же обÑекÑом PGconn ÑÑÑанавливаеÑÑÑ Ð½Ð¾Ð²Ð¾Ðµ Ñоединение. ÐÑÑгие знаÑÐµÐ½Ð¸Ñ Ð½Ðµ менÑÑÑÑÑ Ð½Ð° пÑоÑÑжении жизни обÑекÑа PGconn.
PQdbÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , Ñ ÐºÐ¾ÑоÑой ÑÑÑановлено Ñоединение.
char *PQdb(const PGconn *conn);
PQuserÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, коÑоÑÑй ÑÑÑановил Ñоединение.
char *PQuser(const PGconn *conn);
PQpassÐозвÑаÑÐ°ÐµÑ Ð¿Ð°ÑолÑ, иÑполÑзованнÑй Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ.
char *PQpass(const PGconn *conn);
PQpassвозвÑаÑÐ¸Ñ Ð»Ð¸Ð±Ð¾ паÑолÑ, ÑказаннÑй в паÑамеÑÑÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, либо паÑолÑ, полÑÑеннÑй из Ñайла паÑолей (в ÑлÑÑае оÑÑÑÑÑÑÐ²Ð¸Ñ Ð¿ÐµÑвого). Ðо вÑоÑом ÑлÑÑае, еÑли в паÑамеÑÑÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð±Ñло Ñказано неÑколÑко Ñзлов, полагаÑÑÑÑ Ð½Ð° ÑезÑлÑÑаÑPQpassнелÑзÑ, пока Ñоединение не бÑÐ´ÐµÑ ÑÑÑановлено. СоÑÑоÑние подклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¿ÑовеÑиÑÑ ÑÑнкÑиÑPQstatus.PQhostÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ ÑеÑвеÑа Ð´Ð»Ñ Ð°ÐºÑивного ÑоединениÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸Ð¼Ñ Ñзла, IP-адÑÐµÑ Ð¸Ð»Ð¸ пÑÑÑ Ðº каÑалогÑ, еÑли подклÑÑение ÑÑÑановлено ÑеÑез ÑÐ¾ÐºÐµÑ Unix. (ÐÑизнаком подклÑÑÐµÐ½Ð¸Ñ Ðº ÑокеÑÑ Ð±ÑÐ´ÐµÑ Ð°Ð±ÑолÑÑнÑй пÑÑÑ, коÑоÑÑй наÑинаеÑÑÑ Ñ
/.)char *PQhost(const PGconn *conn);
ÐÑли в паÑамеÑÑÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð±Ñл задан и
host, иhostaddr, ÑÑнкÑиÑPQhostвÑдаÑÑ ÑодеÑжимоеhost. ÐÑли бÑл задан ÑолÑкоhostaddr, возвÑаÑаеÑÑÑ ÑÑо знаÑение. ÐÑли в паÑамеÑÑÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð±Ñло задано неÑколÑко Ñзлов,PQhostвозвÑаÑÐ°ÐµÑ Ð°Ð´ÑÐµÑ Ñзла, Ñ ÐºÐ¾ÑоÑÑм ÑакÑиÑеÑки ÑÑÑановлено Ñоединение.PQhostвозвÑаÑаеÑNULL, еÑли аÑгÑменÑconnÑавенNULL. ÐнаÑе в ÑлÑÑае оÑибки пÑи полÑÑении инÑоÑмаÑии об Ñзле (ÑÑо возможно, еÑли Ñоединение не ÑÑÑановлено до конÑа или пÑоизоÑла оÑибка) она возвÑаÑÐ°ÐµÑ Ð¿ÑÑÑÑÑ ÑÑÑокÑ.ÐÑли в паÑамеÑÑÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ ÑÐºÐ°Ð·Ð°Ð½Ñ Ð½ÐµÑколÑко Ñзлов, на ÑезÑлÑÑаÑ
PQhostнелÑÐ·Ñ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑÑÑ, пока Ñоединение не бÑÐ´ÐµÑ ÑÑÑановлено. ÐÑовеÑиÑÑ ÑоÑÑоÑние ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑÑнкÑиÑPQstatus.PQhostaddrÐозвÑаÑÐ°ÐµÑ IP-адÑÐµÑ ÑеÑвеÑа Ð´Ð»Ñ Ð°ÐºÑивного ÑоединениÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð°Ð´ÑеÑ, в коÑоÑÑй ÑазÑеÑилоÑÑ Ð¸Ð¼Ñ Ñзла, или IP-адÑеÑ, пеÑеданнÑй в паÑамеÑÑе
hostaddr.char *PQhostaddr(const PGconn *conn);
PQhostaddrвозвÑаÑаеÑNULL, еÑли аÑгÑменÑconnÑавенNULL. ÐнаÑе в ÑлÑÑае оÑибки пÑи полÑÑении инÑоÑмаÑии об Ñзле (ÑÑо возможно, еÑли Ñоединение не ÑÑÑановлено до конÑа или пÑоизоÑла оÑибка) она возвÑаÑÐ°ÐµÑ Ð¿ÑÑÑÑÑ ÑÑÑокÑ.PQportÐозвÑаÑÐ°ÐµÑ Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа акÑивного ÑоединениÑ.
char *PQport(const PGconn *conn);
ÐÑли в паÑамеÑÑÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð±Ñло задано неÑколÑко поÑÑов,
PQportвозвÑаÑÐ°ÐµÑ Ð¿Ð¾ÑÑ, Ñ ÐºÐ¾ÑоÑÑм ÑакÑиÑеÑки ÑÑÑановлено Ñоединение.PQportвозвÑаÑаеÑNULL, еÑли аÑгÑменÑconnÑавенNULL. ÐнаÑе в ÑлÑÑае оÑибки пÑи полÑÑении инÑоÑмаÑии о поÑÑе (ÑÑо возможно, еÑли Ñоединение не ÑÑÑановлено до конÑа или пÑоизоÑла оÑибка) она возвÑаÑÐ°ÐµÑ Ð¿ÑÑÑÑÑ ÑÑÑокÑ.ÐÑли в паÑамеÑÑÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ ÑÐºÐ°Ð·Ð°Ð½Ñ Ð½ÐµÑколÑко поÑÑов, на ÑезÑлÑÑаÑ
PQportнелÑÐ·Ñ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑÑÑ, пока Ñоединение не бÑÐ´ÐµÑ ÑÑÑановлено. ÐÑовеÑиÑÑ ÑоÑÑоÑние ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑÑнкÑиÑPQstatus.PQttyÐÑа ÑÑнкÑÐ¸Ñ ÑепеÑÑ Ð½Ð¸Ñего не делаеÑ, но Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð° Ð´Ð»Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи. ФÑнкÑÐ¸Ñ Ð²Ñегда возвÑаÑÐ°ÐµÑ Ð¿ÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð¸Ð»Ð¸
NULL, еÑли аÑгÑменÑconnÐ¸Ð¼ÐµÐµÑ Ð·Ð½Ð°ÑениеNULL.char *PQtty(const PGconn *conn);
PQoptionsÐозвÑаÑÐ°ÐµÑ Ð¿Ð°ÑамеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки, пеÑеданнÑе в запÑоÑе на подклÑÑение.
char *PQoptions(const PGconn *conn);
СледÑÑÑие ÑÑнкÑии возвÑаÑаÑÑ Ð´Ð°Ð½Ð½Ñе ÑÑаÑÑÑа, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð² пÑоÑеÑÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑий на обÑекÑе PGconn.
PQstatusÐозвÑаÑÐ°ÐµÑ ÑоÑÑоÑние подклÑÑениÑ.
ConnStatusType PQstatus(const PGconn *conn);
СÑаÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð¾Ð´Ð½Ð¾ из ÑÑда знаÑений. Ðднако ÑолÑко два из Ð½Ð¸Ñ Ð²Ð¸Ð´Ð½Ñ Ð¸Ð·Ð²Ð½Ðµ пÑоÑедÑÑÑ Ð°ÑÐ¸Ð½Ñ Ñонного подклÑÑениÑ:
CONNECTION_OKиCONNECTION_BAD. УÑпеÑное подклÑÑение к базе даннÑÑ Ð¸Ð¼ÐµÐµÑ ÑÑаÑÑÑCONNECTION_OK. РнеÑдаÑной попÑÑке подклÑÑÐµÐ½Ð¸Ñ ÑигнализиÑÑÐµÑ ÑÑаÑÑÑCONNECTION_BAD. ÐбÑÑно ÑÑаÑÑÑ OK оÑÑаÑÑÑÑ ÑаковÑм до вÑзоваPQfinish, но в ÑлÑÑае оÑибки ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑÑаÑÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑмениÑÑÑÑ Ð½Ð°CONNECTION_BADпÑеждевÑеменно. Ð Ñаком ÑлÑÑае пÑиложение Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ Ð²Ð¾ÑÑÑановиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение, вÑзвавPQreset.РдÑÑÐ³Ð¸Ñ ÐºÐ¾Ð´Ð°Ñ ÑоÑÑоÑниÑ, коÑоÑÑе могÑÑ Ð²ÑдаÑÑ ÑÑи ÑÑнкÑии, можно ÑзнаÑÑ Ð² опиÑании
PQconnectStartParams,PQconnectStartиPQconnectPoll.PQtransactionStatusÐозвÑаÑÐ°ÐµÑ ÑекÑÑий ÑÑаÑÑÑ ÑеÑвеÑа, оÑÑажаÑÑий пÑоÑеÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑанзакÑий.
PGTransactionStatusType PQtransactionStatus(const PGconn *conn);
СÑаÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из
PQTRANS_IDLE(в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð½Ðµ занÑÑ Ð¾Ð±ÑабоÑкой ÑÑанзакÑии),PQTRANS_ACTIVE(команда в пÑоÑеÑÑе обÑабоÑки),PQTRANS_INTRANS(не вÑполнÑÐµÑ ÑабоÑÑ, но Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ Ð´ÐµÐ¹ÑÑвиÑелÑной ÑÑанзакÑии) илиPQTRANS_INERROR(не вÑполнÑÐµÑ ÑабоÑÑ, но Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² ÑÐ°Ð¼ÐºÐ°Ñ ÑÑанзакÑии, завеÑÑивÑейÑÑ Ñбоем). СÑаÑÑÑ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°ÑениеPQTRANS_UNKNOWN, еÑли Ñоединение не ÑабоÑаеÑ. СÑаÑÑÑ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð½Ð°ÑениеPQTRANS_ACTIVEÑолÑко Ñогда, когда запÑÐ¾Ñ Ð±Ñл оÑпÑавлен ÑеÑвеÑÑ, но еÑÑ Ð½Ðµ завеÑÑÑн.PQparameterStatusÐÑÑÑÐºÐ¸Ð²Ð°ÐµÑ ÑекÑÑее знаÑение паÑамеÑÑа ÑеÑвеÑа.
const char *PQparameterStatus(const PGconn *conn, const char *paramName);
ÐнаÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑннÑÑ Ð¿Ð°ÑамеÑÑов ÑеÑÐ²ÐµÑ ÑообÑÐ°ÐµÑ Ð°Ð²ÑомаÑиÑеÑки в наÑале пÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ Ñогда, когда Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ.
PQparameterStatusможно иÑполÑзоваÑÑ, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑоÑиÑÑ ÑÑи знаÑениÑ. ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑекÑÑее знаÑение паÑамеÑÑа, еÑли оно извеÑÑно, илиNULL, еÑли паÑамеÑÑ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑен.ÐаÑамеÑÑÑ, знаÑÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑÑÑ ÑообÑÐ°ÐµÑ ÑеÑвеÑ, в ÑекÑÑей веÑÑии вклÑÑаÑÑ
server_version,server_encoding,client_encoding,application_name,is_superuser,session_authorization,DateStyle,IntervalStyle,TimeZone,integer_datetimesиstandard_conforming_strings. (ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑовserver_encoding,TimeZoneиinteger_datetimesÑеÑÐ²ÐµÑ Ð´Ð¾ веÑÑии 8.0 не ÑообÑал;standard_conforming_stringsÑеÑÐ²ÐµÑ Ð´Ð¾ веÑÑии 8.1 не ÑообÑал;IntervalStyleÑеÑÐ²ÐµÑ Ð´Ð¾ веÑÑии 8.4 не ÑообÑал;application_nameÑеÑÐ²ÐµÑ Ð´Ð¾ веÑÑии 9.0 не ÑообÑал.) УÑÑиÑе, ÑÑоserver_version,server_encodingиinteger_datetimesнелÑÐ·Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¿Ð¾Ñле запÑÑка.ÐÑли длÑ
standard_conforming_stringsне пеÑедано никакого знаÑениÑ, Ñо пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑинÑÑÑ ÐµÐ³Ð¾ ÑавнÑмoff. ÐÑо ознаÑаеÑ, ÑÑо ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ Ð² ÑÑÑоковÑÑ Ð»Ð¸ÑеÑÐ°Ð»Ð°Ñ Ð¸Ð½ÑеÑпÑеÑиÑÑÑÑÑÑ Ð² каÑеÑÑве ÑпеÑÑимволов. Также, налиÑие ÑÑого паÑамеÑÑа Ð¼Ð¾Ð¶ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº Ñказание на Ñо, ÑÑо ÑинÑакÑÐ¸Ñ escape-ÑÑÑок (E'...') ÑвлÑеÑÑÑ Ð¿ÑиемлемÑм.ХоÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемÑй ÑказаÑÐµÐ»Ñ Ð¾Ð±ÑÑвлен Ñо ÑпеÑиÑикаÑоÑом
const, ÑакÑиÑеÑки он ÑказÑÐ²Ð°ÐµÑ Ð½Ð° изменÑемое Ñ ÑанилиÑе, ÑвÑзанное Ñо ÑÑÑÑкÑÑÑойPGconn. Ðе ÑÑÐ¾Ð¸Ñ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо ÑказаÑÐµÐ»Ñ Ð¾ÑÑанеÑÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑнÑм пÑи поÑледÑÑÑÐ¸Ñ Ð·Ð°Ð¿ÑоÑÐ°Ñ .PQprotocolVersionÐапÑаÑÐ¸Ð²Ð°ÐµÑ Ð¿ÑоÑокол, иÑполÑзÑемÑй Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»Ð¸ÐµÐ½Ñом и ÑеÑвеÑом.
int PQprotocolVersion(const PGconn *conn);
ÐÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑ ÑÑÑ ÑÑнкÑиÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, поддеÑживаÑÑÑÑ Ð»Ð¸ опÑедÑленнÑе ÑÑнкÑионалÑнÑе возможноÑÑи. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñми знаÑениÑми ÑвлÑÑÑÑÑ 3 (пÑоÑокол веÑÑии 3.0) или Ð½Ð¾Ð»Ñ (пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð² подклÑÑении). ÐеÑÑÐ¸Ñ Ð¿ÑоÑокола не бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, но ÑеоÑеÑиÑеÑки она могла Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð² пÑоÑеÑÑе пеÑеподклÑÑениÑ. ÐеÑÑÐ¸Ñ Ð¿ÑоÑокола 3.0 обÑÑно иÑполÑзÑеÑÑÑ Ð¿Ñи взаимодейÑÑвии Ñ ÑеÑвеÑами PostgreSQL веÑÑии 7.4 или более поздними.
PQserverVersionÐозвÑаÑÐ°ÐµÑ ÑелоÑиÑленное пÑедÑÑавление веÑÑии ÑеÑвеÑа.
int PQserverVersion(const PGconn *conn);
ÐÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑ ÑÑÑ ÑÑнкÑиÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð²ÐµÑÑÐ¸Ñ ÑеÑвеÑа баз даннÑÑ , к коÑоÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ подклÑÑенÑ. ÐозвÑаÑаемое ей ÑиÑло полÑÑаеÑÑÑ Ð² ÑезÑлÑÑаÑе ÑÐ¼Ð½Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑа оÑновной веÑÑии на 10000 и Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑа дополниÑелÑной веÑÑии. ÐапÑимеÑ, Ð´Ð»Ñ Ð²ÐµÑÑии 10.1 бÑÐ´ÐµÑ Ð²Ñдано ÑиÑло 100001, а Ð´Ð»Ñ Ð²ÐµÑÑии 11.0 â 110000. ÐÑли Ñоединение не ÑабоÑаеÑ, Ñо возвÑаÑаеÑÑÑ Ð½Ð¾Ð»Ñ.
Ðо веÑÑии 10 в Postgres Pro номеÑа веÑÑий обÑазовÑвалиÑÑ Ð¸Ð· ÑÑÑÑ ÑиÑел, пеÑвÑе два из коÑоÑÑÑ Ð¿ÑедÑÑавлÑли оÑновнÑÑ Ð²ÐµÑÑиÑ. ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ Ð²ÐµÑÑий
PQserverVersionоÑÐ²Ð¾Ð´Ð¸Ñ Ð½Ð° каждое ÑиÑло по две ÑиÑÑÑ; напÑимеÑ, Ð´Ð»Ñ Ð²ÐµÑÑии 9.1.5 бÑÐ´ÐµÑ Ð²Ñдано 90105, а Ð´Ð»Ñ Ð²ÐµÑÑии 9.2.0 â 90200.Таким обÑазом, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий Ð½Ð¾Ð¼ÐµÑ Ð¾Ñновной веÑÑии Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпноÑÑи ÑÑнкÑионалÑноÑÑи, пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑазделиÑÑ ÑезÑлÑÑаÑ
PQserverVersionна 100, а не на 10000. Ðо вÑÐµÑ ÑеÑиÑÑ Ð½Ð¾Ð¼ÐµÑа дополниÑелÑнÑÑ (коÑÑекÑиÑÑÑÑÐ¸Ñ ) вÑпÑÑков ÑазлиÑаÑÑÑÑ ÑолÑко в двÑÑ Ð¿Ð¾ÑÐ»ÐµÐ´Ð½Ð¸Ñ ÑиÑÑÐ°Ñ .PQerrorMessageÐозвÑаÑÐ°ÐµÑ ÑообÑение об оÑибке, наиболее недавно ÑгенеÑиÑованное опеÑаÑией, вÑполненной в ÑÐ°Ð¼ÐºÐ°Ñ ÑекÑÑего подклÑÑениÑ.
char *PQerrorMessage(const PGconn *conn);
ÐоÑÑи вÑе ÑÑнкÑии библиоÑеки libpq в ÑлÑÑае ÑÐ±Ð¾Ñ ÑÑоÑмиÑÑÑÑ ÑообÑение длÑ
PQerrorMessage. ÐбÑаÑиÑе внимание, ÑÑо по ÑоглаÑениÑм, пÑинÑÑÑм в libpq, непÑÑÑой ÑезÑлÑÑÐ°Ñ ÑÑнкÑииPQerrorMessageÐ¼Ð¾Ð¶ÐµÑ ÑоÑÑоÑÑÑ Ð¸Ð· неÑколÑÐºÐ¸Ñ ÑÑÑок и бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð·Ð°Ð²ÐµÑÑаÑÑий Ñимвол новой ÑÑÑоки. ÐÑзÑваÑÑÐ°Ñ ÑÑнкÑÐ¸Ñ Ð½Ðµ должна оÑвобождаÑÑ Ð¿Ð°Ð¼ÑÑÑ, на коÑоÑÑÑ ÑказÑÐ²Ð°ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаемое знаÑение, напÑÑмÑÑ. Ðна бÑÐ´ÐµÑ Ð¾Ñвобождена, когда ÑвÑзаннÑй Ñ Ð½ÐµÐ¹ деÑкÑипÑоÑPGconnбÑÐ´ÐµÑ Ð¿ÐµÑедан ÑÑнкÑииPQfinish. Ðе ÑÑÐ¾Ð¸Ñ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ, ÑÑо ÑезÑлÑÑиÑÑÑÑÐ°Ñ ÑÑÑока оÑÑанеÑÑÑ Ñой же Ñамой пÑи вÑполнении неÑколÑÐºÐ¸Ñ Ð¾Ð¿ÐµÑаÑий Ñо ÑÑÑÑкÑÑÑойPGconn.PQsocketÐолÑÑÐ°ÐµÑ Ð½Ð¾Ð¼ÐµÑ Ñайлового деÑкÑипÑоÑа Ð´Ð»Ñ ÑокеÑа ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑеÑвеÑом. ÐейÑÑвиÑелÑнÑй деÑкÑипÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð±Ð¾Ð»ÑÑе или Ñавен 0; знаÑение -1 показÑваеÑ, ÑÑо в даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ðµ оÑкÑÑÑо ни одного ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÑеÑвеÑом. (ÐнаÑение не измениÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¾Ð±ÑÑной ÑабоÑÑ, но Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÑÑÑановки или пеÑеÑÑÑановки подклÑÑениÑ.)
int PQsocket(const PGconn *conn);
PQbackendPIDÐозвÑаÑÐ°ÐµÑ ID (PID) ÑеÑвеÑного пÑоÑеÑÑа, обÑабаÑÑваÑÑего ÑÑо подклÑÑение.
int PQbackendPID(const PGconn *conn);
PID ÑеÑвеÑного пÑоÑеÑÑа полезен Ð´Ð»Ñ Ð¾ÑладоÑнÑÑ Ñелей и Ð´Ð»Ñ ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ ÑообÑениÑми командÑ
NOTIFY(коÑоÑÑе вклÑÑаÑÑ PID ÑведомлÑÑÑего ÑеÑвеÑного пÑоÑеÑÑа). ÐÑимиÑе к ÑведениÑ, ÑÑо PID пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ð¿ÑоÑеÑÑÑ, вÑполнÑÑÑемÑÑÑ Ð½Ð° Ñзле ÑеÑвеÑа баз даннÑÑ , а не на локалÑном Ñзле.PQconnectionNeedsPasswordÐозвÑаÑÐ°ÐµÑ true (1), еÑли меÑод аÑÑенÑиÑикаÑии ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑÑебовал паÑолÑ, однако он не бÑл пÑедоÑÑавлен. ÐозвÑаÑÐ°ÐµÑ false (0), еÑли паÑÐ¾Ð»Ñ Ð½Ðµ ÑÑебовалÑÑ.
int PQconnectionNeedsPassword(const PGconn *conn);
ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑимениÑÑ Ð¿Ð¾Ñле неÑдаÑной попÑÑки подклÑÑениÑ, ÑÑÐ¾Ð±Ñ ÑеÑиÑÑ, нÑжно ли пÑедлагаÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÑÑи паÑолÑ.
PQconnectionUsedPasswordÐозвÑаÑÐ°ÐµÑ true (1), еÑли меÑод аÑÑенÑиÑикаÑии ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ÑполÑзовал паÑолÑ. ÐозвÑаÑÐ°ÐµÑ false (0) в пÑоÑивном ÑлÑÑае.
int PQconnectionUsedPassword(const PGconn *conn);
ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ пÑимениÑÑ ÐºÐ°Ðº поÑле неÑдаÑной, Ñак и поÑле ÑÑпеÑной попÑÑки подклÑÑениÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, ÑÑебовал ли ÑеÑÐ²ÐµÑ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°ÑолÑ.
СледÑÑÑие ÑÑнкÑии возвÑаÑаÑÑ Ð¸Ð½ÑоÑмаÑиÑ, оÑноÑÑÑÑÑÑÑ Ðº SSL. ÐÑа инÑоÑмаÑÐ¸Ñ Ð¾Ð±ÑÑно не менÑеÑÑÑ Ð¿Ð¾Ñле Ñого, как подклÑÑение ÑÑÑановлено.
PQsslInUseÐозвÑаÑÐ°ÐµÑ true (1), еÑли Ð´Ð»Ñ ÑекÑÑего подклÑÑÐµÐ½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ SSL, и false (0) в пÑоÑивном ÑлÑÑае.
int PQsslInUse(const PGconn *conn);
PQsslAttributeÐозвÑаÑÐ°ÐµÑ ÑвÑзаннÑÑ Ñ SSL инÑоÑмаÑÐ¸Ñ Ð¾ Ñоединении.
const char *PQsslAttribute(const PGconn *conn, const char *attribute_name);
СпиÑок доÑÑÑпнÑÑ Ð°ÑÑибÑÑов завиÑÐ¸Ñ Ð¾Ñ Ð¸ÑполÑзÑемой библиоÑеки SSL и Ñипа подклÑÑениÑ. ÐÑли подклÑÑение не иÑполÑзÑÐµÑ SSL или Ñказанное Ð¸Ð¼Ñ Ð°ÑÑибÑÑа неизвеÑÑно иÑполÑзÑемой библиоÑеке, возвÑаÑаеÑÑÑ NULL.
ÐбÑÑно доÑÑÑÐ¿Ð½Ñ ÑледÑÑÑие аÑÑибÑÑÑ:
libraryÐÐ¼Ñ Ð¸ÑполÑзÑемой ÑеализаÑии SSL. (РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑолÑко
"OpenSSL")protocolÐÑименÑÐµÐ¼Ð°Ñ Ð²ÐµÑÑÐ¸Ñ SSL/TLS. Ðаиболее ÑаÑпÑоÑÑÑÐ°Ð½ÐµÐ½Ñ Ð²Ð°ÑианÑÑ
"TLSv1","TLSv1.1"и"TLSv1.2", но ÑеализаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¸ дÑÑгие ÑÑÑоки, еÑли пÑименÑеÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо дÑÑгой пÑоÑокол.key_bitsЧиÑло Ð±Ð¸Ñ Ð² клÑÑе, иÑполÑзÑемом алгоÑиÑмом ÑиÑÑованиÑ.
cipherÐÑаÑкое Ð¸Ð¼Ñ Ð¿ÑименÑемого комплекÑа ÑиÑÑов, напÑимеÑ:
"DHE-RSA-DES-CBC3-SHA". ÐÑи имена могÑÑ Ð±ÑÑÑ ÑазнÑми в ÑазнÑÑ ÑеализаÑиÑÑ SSL.compressionÐозвÑаÑаеÑ
on, еÑли иÑполÑзÑеÑÑÑ ÑжаÑие SSL, илиoffв пÑоÑивном ÑлÑÑае.
РкаÑеÑÑве иÑклÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ запÑоÑиÑÑ Ð°ÑÑибÑÑ
libraryбез подклÑÑениÑ, пеÑедав NULL в каÑеÑÑве аÑгÑменÑаconn. Ð ÑезÑлÑÑаÑе бÑÐ´ÐµÑ Ð²Ñдано Ð¸Ð¼Ñ Ð¸ÑполÑзÑемой по ÑмолÑÐ°Ð½Ð¸Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки SSL, либо NULL, еÑли библиоÑека libpq бÑла ÑкомпилиÑована без поддеÑжки SSL. (РвеÑÑиÑÑ Postgres Pro ниже 15, когда вconnпеÑедавалÑÑ NULL, ÑезÑлÑÑаÑом вÑегда бÑл NULL. ÐÑлиÑиÑÑ Ð½Ð¾Ð²ÑÑ ÑеализаÑÐ¸Ñ Ð¾Ñ ÑÑаÑой в клиенÑÑÐºÐ¸Ñ Ð¿ÑогÑÐ°Ð¼Ð¼Ð°Ñ Ð¼Ð¾Ð¶Ð½Ð¾, пÑовеÑив макÑоÑLIBPQ_HAS_SSL_LIBRARY_DETECTION.)PQsslAttributeNamesÐозвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив имÑн доÑÑÑпнÑÑ Ð°ÑÑибÑÑов SSL. ÐавеÑÑаеÑÑÑ Ð¼Ð°ÑÑив ÑказаÑелем NULL.
const char * const * PQsslAttributeNames(const PGconn *conn);
PQsslStructÐозвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑпеÑиÑиÑнÑй Ð´Ð»Ñ ÑеализаÑии SSL обÑекÑ, опиÑÑваÑÑий подклÑÑение. ÐÑли Ñоединение не заÑиÑÑовано или ÑеализаÑÐ¸Ñ SSL, иÑполÑзÑÐµÐ¼Ð°Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð·Ð°Ð¿ÑоÑеннÑй Ñип обÑекÑа, возвÑаÑаеÑÑÑ NULL.
void *PQsslStruct(const PGconn *conn, const char *struct_name);
Ðакие ÑÑÑÑкÑÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ, завиÑÐ¸Ñ Ð¾Ñ Ð¸ÑполÑзÑемой ÑеализаÑии SSL. OpenSSL пÑедоÑÑавлÑÐµÑ Ð¾Ð´Ð½Ñ ÑÑÑÑкÑÑÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼
OpenSSLи возвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° обÑекÑSSLstruct, опиÑаннÑй в OpenSSL. ÐÐ»Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð²Ñзова ÑÑой ÑÑнкÑии можно воÑполÑзоваÑÑÑÑ ÐºÐ¾Ð´Ð¾Ð¼ в ÑледÑÑÑÐ¸Ñ ÑÑÑÐ¾ÐºÐ°Ñ :#include <libpq-fe.h> #include <openssl/ssl.h> ... SSL *ssl; dbconn = PQconnectdb(...); ... ssl = PQsslStruct(dbconn, "OpenSSL"); if (ssl) { /* use OpenSSL functions to access ssl */ }ÐÑа ÑÑÑÑкÑÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ, ÑÑÐ¾Ð±Ñ ÑлиÑиÑÑ ÑÑовни ÑиÑÑованиÑ, пÑовеÑиÑÑ ÑеÑÑиÑикаÑÑ ÑеÑвеÑа и Ñ. д. Ðа инÑоÑмаÑией об ÑÑой ÑÑÑÑкÑÑÑе обÑаÑиÑеÑÑ Ðº докÑменÑаÑии по OpenSSL.
PQgetsslÐозвÑаÑÐ°ÐµÑ ÑÑÑÑкÑÑÑÑ SSL, иÑполÑзовавÑÑÑÑÑ Ð² Ñоединении, или NULL, еÑли SSL не иÑполÑзÑеÑÑÑ.
void *PQgetssl(const PGconn *conn);
ÐÑа ÑÑнкÑÐ¸Ñ ÑавнознаÑна
PQsslStruct(conn, "OpenSSL"). ÐÑ Ð½Ðµ ÑледÑÐµÑ Ð¿ÑименÑÑÑ Ð² новÑÑ Ð¿ÑиложениÑÑ , Ñак как возвÑаÑÐ°ÐµÐ¼Ð°Ñ ÑÑÑÑкÑÑÑа ÑпеÑиÑиÑна Ð´Ð»Ñ OpenSSL и ÐµÑ Ð½ÐµÐ»ÑÐ·Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑиÑÑ Ñ Ð´ÑÑгой ÑеализаÑией SSL. ЧÑÐ¾Ð±Ñ Ð¿ÑовеÑиÑÑ, иÑполÑзÑÐµÑ Ð»Ð¸ подклÑÑение SSL, лÑÑÑе вÑзваÑÑPQsslInUse, а ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑвойÑÑва подклÑÑÐµÐ½Ð¸Ñ âPQsslAttribute.