31.2. ФÑнкÑии, опиÑÑваÑÑие ÑекÑÑее ÑоÑÑоÑние подклÑÑениÑ
ÐÑи ÑÑнкÑии могÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑоÑа ÑоÑÑоÑÐ½Ð¸Ñ Ð¾Ð±ÑекÑа, опиÑÑваÑÑего ÑÑÑеÑÑвÑÑÑее подклÑÑение к базе даннÑÑ .
ÐодÑказка
РазÑабоÑÑики пÑиложений на оÑнове libpq Ð´Ð¾Ð»Ð¶Ð½Ñ ÑÑаÑелÑно поддеÑживаÑÑ Ð°Ð±ÑÑÑакÑÐ¸Ñ PGconn. СледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑнкÑии доÑÑÑпа, опиÑаннÑе ниже, Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑодеÑжимого PGconn. ÐбÑаÑение напÑÑмÑÑ Ðº внÑÑÑенним полÑм PGconn, иÑполÑзÑÑ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¸Ð· libpq-int.h, не ÑекомендÑеÑÑÑ, поÑколÑÐºÑ Ð¾Ð½Ð¸ могÑÑ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð² бÑдÑÑем.
СледÑÑÑие ÑÑнкÑии возвÑаÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов, ÑÑÑановленнÑе пÑи подклÑÑении. ÐÑи знаÑÐµÐ½Ð¸Ñ ÑикÑиÑÐ¾Ð²Ð°Ð½Ñ Ð½Ð° вÑÐµÐ¼Ñ Ð¶Ð¸Ð·Ð½Ð¸ обÑекÑа PGconn.
-
PQdb ÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , Ñ ÐºÐ¾ÑоÑой ÑÑÑановлено Ñоединение.
char *PQdb(const PGconn *conn);
-
PQuser ÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, коÑоÑÑй ÑÑÑановил Ñоединение.
char *PQuser(const PGconn *conn);
-
PQpass ÐозвÑаÑÐ°ÐµÑ Ð¿Ð°ÑолÑ, иÑполÑзованнÑй Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ.
char *PQpass(const PGconn *conn);
-
PQhost ÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ ÑеÑвеÑа, Ñ ÐºÐ¾ÑоÑÑм ÑÑÑановлено Ñоединение.
char *PQhost(const PGconn *conn);
-
PQport ÐозвÑаÑÐ°ÐµÑ Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа, на коÑоÑом ÑÑÑановлено Ñоединение.
char *PQport(const PGconn *conn);
-
PQtty ÐозвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ Ð¾ÑладоÑного ÑеÑминала (TTY), ÑвÑзанного Ñ Ð´Ð°Ð½Ð½Ñм Ñоединением. (ÐÑо ÑÑÑаÑевÑÐ°Ñ ÑÑнкÑиÑ, поÑколÑÐºÑ ÑеÑÐ²ÐµÑ Ð±Ð¾Ð»ÐµÐµ не обÑаÑÐ°ÐµÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð½Ð° ÑÑÑÐ°Ð½Ð¾Ð²ÐºÑ TTY, но она оÑÑаÑÑÑÑ Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑной ÑовмеÑÑимоÑÑи.)
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нелÑÐ·Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ Ð¿Ð¾Ñле запÑÑка.СеÑвеÑÑ, поддеÑживаÑÑие пÑоÑокол ÑолÑко до веÑÑии 3.0, не могÑÑ ÑообÑаÑÑ ÑÑÑановки паÑамеÑÑов, но libpq вклÑÑÐ°ÐµÑ ÑÑедÑÑва, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ
server_versionиclient_encodingв лÑбом ÑлÑÑае. ÐооÑÑÑеÑÑÑ Ð¸ÑполÑзование в пÑиложениÑÑPQparameterStatus, а не ÑпеÑиалÑно напиÑанного (ad hoc) кода, Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ Ð·Ð½Ð°Ñений. (ÐÑимиÑе к ÑведениÑ, однако, ÑÑо в ÑоединениÑÑ , оÑнованнÑÑ Ð½Ð° пÑоÑоколе веÑÑии до 3.0, изменениеclient_encodingпоÑÑедÑÑвом командÑSETпоÑле наÑала пÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¾ÑÑажаÑÑÑÑ ÑÑнкÑиейPQparameterStatus.) Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾server_versionпÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ñакже в опиÑании ÑÑнкÑииPQserverVersion, возвÑаÑаÑÑей инÑоÑмаÑÐ¸Ñ Ð² ÑиÑловой ÑоÑме, в коÑоÑой гоÑаздо легÑе вÑполнÑÑÑ ÑÑавнение.ÐÑли длÑ
standard_conforming_stringsне пеÑедано никакого знаÑениÑ, Ñо пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿ÑинÑÑÑ ÐµÐ³Ð¾ ÑавнÑмoff. ÐÑо ознаÑаеÑ, ÑÑо ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ Ð² ÑÑÑоковÑÑ Ð»Ð¸ÑеÑÐ°Ð»Ð°Ñ Ð¸Ð½ÑеÑпÑеÑиÑÑÑÑÑÑ Ð² каÑеÑÑве ÑпеÑÑимволов. Также, налиÑие ÑÑого паÑамеÑÑа Ð¼Ð¾Ð¶ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº Ñказание на Ñо, ÑÑо ÑинÑакÑÐ¸Ñ escape-ÑÑÑок (E'...') ÑвлÑеÑÑÑ Ð¿ÑиемлемÑм.ХоÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемÑй ÑказаÑÐµÐ»Ñ Ð¾Ð±ÑÑвлен Ñо ÑпеÑиÑикаÑоÑом
const, ÑакÑиÑеÑки он ÑказÑÐ²Ð°ÐµÑ Ð½Ð° изменÑемое Ñ ÑанилиÑе, ÑвÑзанное Ñо ÑÑÑÑкÑÑÑойPGconn. Ðе ÑÑÐ¾Ð¸Ñ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо ÑказаÑÐµÐ»Ñ Ð¾ÑÑанеÑÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑнÑм пÑи поÑледÑÑÑÐ¸Ñ Ð·Ð°Ð¿ÑоÑÐ°Ñ .-
PQprotocolVersion ÐапÑаÑÐ¸Ð²Ð°ÐµÑ Ð¿ÑоÑокол, иÑполÑзÑемÑй Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»Ð¸ÐµÐ½Ñом и ÑеÑвеÑом.
int PQprotocolVersion(const PGconn *conn);
ÐÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑ ÑÑÑ ÑÑнкÑиÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, поддеÑживаÑÑÑÑ Ð»Ð¸ опÑедÑленнÑе ÑÑнкÑионалÑнÑе возможноÑÑи. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñми знаÑениÑми ÑвлÑÑÑÑÑ 2 (пÑоÑокол веÑÑии 2.0), 3 (пÑоÑокол веÑÑии 3.0) или Ð½Ð¾Ð»Ñ (пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð² подклÑÑении). ÐеÑÑÐ¸Ñ Ð¿ÑоÑокола не бÑÐ´ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, но ÑеоÑеÑиÑеÑки она могла Ð±Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑÑ Ð² пÑоÑеÑÑе пеÑеподклÑÑениÑ. ÐеÑÑÐ¸Ñ Ð¿ÑоÑокола 3.0 обÑÑно иÑполÑзÑеÑÑÑ Ð¿Ñи взаимодейÑÑвии Ñ ÑеÑвеÑами PostgreSQL веÑÑии 7.4 или более поздними; ÑеÑвеÑÑ Ð´Ð¾ веÑÑии 7.4 поддеÑживаÑÑ ÑолÑко пÑоÑокол веÑÑии 2.0. (ÐÑоÑокол веÑÑии 1.0 ÑвлÑеÑÑÑ ÑÑÑаÑевÑим и не поддеÑживаеÑÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой libpq.)
-
PQserverVersion ÐозвÑаÑÐ°ÐµÑ Ñелое ÑиÑло, пÑедÑÑавлÑÑÑее веÑÑÐ¸Ñ ÑеÑвеÑа.
int PQserverVersion(const PGconn *conn);
ÐÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑ ÑÑÑ ÑÑнкÑиÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ð²ÐµÑÑÐ¸Ñ ÑеÑвеÑа баз даннÑÑ , к коÑоÑÐ¾Ð¼Ñ Ð¾Ð½Ð¸ подклÑÑенÑ. ЧиÑло ÑоÑмиÑÑеÑÑÑ Ð¿ÑÑÑм пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑов ÑÑаÑÑей, младÑей и коÑÑекÑиÑÑÑÑей веÑÑий в двÑзнаÑнÑе деÑÑÑиÑнÑе ÑиÑла и ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ñ Ð²Ð¼ÐµÑÑе. ÐапÑимеÑ, Ð´Ð»Ñ Ð²ÐµÑÑии 8.1.5 бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑено ÑиÑло 80105, а Ð´Ð»Ñ Ð²ÐµÑÑии 8.2 бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑено ÑиÑло 80200 (ведÑÑие нÑли не показанÑ). ÐÑли Ñоединение не ÑабоÑаеÑ, Ñо возвÑаÑаеÑÑÑ Ð½Ð¾Ð»Ñ.
-
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 и Ñипа подклÑÑениÑ. ÐÑли аÑÑибÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпен, возвÑаÑаеÑÑÑ NULL.
ÐбÑÑно доÑÑÑÐ¿Ð½Ñ ÑледÑÑÑие аÑÑибÑÑÑ:
libraryÐÐ¼Ñ Ð¸ÑполÑзÑемой ÑеализаÑии SSL. (РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑолÑко
"OpenSSL")protocolÐÑименÑÐµÐ¼Ð°Ñ Ð²ÐµÑÑÐ¸Ñ SSL/TLS. Ðаиболее ÑаÑпÑоÑÑÑÐ°Ð½ÐµÐ½Ñ Ð²Ð°ÑианÑÑ
"SSLv2","SSLv3","TLSv1","TLSv1.1"и"TLSv1.2", но ÑеализаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¸ дÑÑгие ÑÑÑоки, еÑли пÑименÑеÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо дÑÑгой пÑоÑокол.key_bitsЧиÑло Ð±Ð¸Ñ Ð² клÑÑе, иÑполÑзÑемом алгоÑиÑмом ÑиÑÑованиÑ.
cipherÐÑаÑкое Ð¸Ð¼Ñ Ð¿ÑименÑемого комплекÑа ÑиÑÑов, напÑимеÑ:
"DHE-RSA-DES-CBC3-SHA". ÐÑи имена могÑÑ Ð±ÑÑÑ ÑазнÑми в ÑазнÑÑ ÑеализаÑиÑÑ SSL.compressionÐÑли пÑименÑеÑÑÑ ÑжаÑие SSL, возвÑаÑÐ°ÐµÑ Ð¸Ð¼Ñ Ð°Ð»Ð³Ð¾ÑиÑма ÑжаÑиÑ, либо "on", еÑли ÑжаÑие иÑполÑзÑеÑÑÑ, но его алгоÑиÑм неизвеÑÑен. ÐÑли ÑжаÑие не пÑименÑеÑÑÑ, возвÑаÑÐ°ÐµÑ "off".
PQsslAttributeNamesÐозвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив имÑн доÑÑÑпнÑÑ Ð°ÑÑибÑÑов SSL. ÐавеÑÑаеÑÑÑ Ð¼Ð°ÑÑив ÑказаÑелем NULL.
const char * const * PQsslAttributeNames(const PGconn *conn);
PQsslStructÐозвÑаÑÐ°ÐµÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑпеÑиÑиÑнÑй Ð´Ð»Ñ ÑеализаÑии SSL обÑекÑ, опиÑÑваÑÑий подклÑÑение.
void *PQsslStruct(const PGconn *conn, const char *struct_name);
ÐоÑÑÑÐ¿Ð½Ð°Ñ ÑÑÑÑкÑÑÑа (или ÑÑÑÑкÑÑÑÑ) завиÑÐ¸Ñ Ð¾Ñ Ñого, ÐºÐ°ÐºÐ°Ñ ÑеализаÑÐ¸Ñ SSL пÑименÑеÑÑÑ. ÐÐ»Ñ OpenSSL вÑдаÑÑÑÑ Ð¾Ð´Ð½Ð° ÑÑÑÑкÑÑÑа под именем "OpenSSL", и ÑÑа ÑÑÑÑкÑÑÑа, на коÑоÑÑÑ ÑказÑÐ²Ð°ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑÑннÑй ÑказаÑелÑ, Ð¸Ð¼ÐµÐµÑ Ñип
SSL(опÑеделÑннÑй в 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.