30.1. ФÑнкÑии ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑением к базе даннÑÑ
СледÑÑÑие ÑÑнкÑии имеÑÑ Ð´ÐµÐ»Ð¾ Ñ Ñозданием подклÑÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑÑ Postgres Pro. ÐÑÐ¸ÐºÐ»Ð°Ð´Ð½Ð°Ñ Ð¿ÑогÑамма Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð½ÐµÑколÑко подклÑÑений к ÑеÑвеÑÑ, оÑкÑÑÑÑÑ
одновÑеменно. (Ðдна из пÑиÑин ÑÑого заклÑÑаеÑÑÑ Ð² необÑ
одимоÑÑи доÑÑÑпа к более Ñем одной базе даннÑÑ
.) Ðаждое Ñоединение пÑедÑÑавлÑеÑÑÑ Ð¾Ð±ÑекÑом PGconn, коÑоÑÑй можно полÑÑиÑÑ Ð¾Ñ ÑÑнкÑий PQconnectdb, PQconnectdbParams или PQsetdbLogin. ÐбÑаÑиÑе внимание, ÑÑо ÑÑи ÑÑнкÑии вÑегда возвÑаÑÑÑ Ð½ÐµÐ½Ñлевой ÑказаÑÐµÐ»Ñ Ð½Ð° обÑекÑ, еÑли ÑолÑко, возможно, не оÑÑалоÑÑ ÑлиÑком мало памÑÑи даже Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð²ÑделиÑÑ ÐµÑ Ð´Ð»Ñ Ð¾Ð±ÑекÑа PGconn. ÐÑежде Ñем пеÑедаваÑÑ Ð·Ð°Ð¿ÑоÑÑ ÑеÑез обÑÐµÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, ÑледÑÐµÑ Ð²ÑзваÑÑ ÑÑнкÑÐ¸Ñ PQstatus Ð´Ð»Ñ Ð¿ÑовеÑки возвÑаÑаемого знаÑÐµÐ½Ð¸Ñ Ð² ÑлÑÑае ÑÑпеÑного подклÑÑениÑ.
ÐÑедÑпÑеждение
ÐÑли к базе даннÑÑ
, коÑоÑÐ°Ñ Ð½Ðµ пÑиведена в ÑооÑвеÑÑÑвие ÑÐ°Ð±Ð»Ð¾Ð½Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑ
ем, имеÑÑ Ð´Ð¾ÑÑÑп недовеÑеннÑе полÑзоваÑели, наÑинайÑе ÑÐµÐ°Ð½Ñ Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпнÑÑ
им Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи ÑÑ
ем из пÑÑи поиÑка (search_path). ÐÐ»Ñ ÑÑого можно пÑиÑвоиÑÑ Ð¿Ð°ÑамеÑÑÑ Ñ ÐºÐ»ÑÑом options знаÑение -csearch_path=. Также можно вÑполниÑÑ PQexec( поÑле подклÑÑениÑ. ÐÑо каÑаеÑÑÑ Ð½Ðµ ÑолÑко psql, но и лÑбÑÑ
дÑÑгиÑ
инÑеÑÑейÑов Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÑоизволÑнÑÑ
SQL-команд.Ñоединение, "SELECT pg_catalog.set_config('search_path', '', false)")
ÐÑедÑпÑеждение
Ð ÑиÑÑеме Unix Ñоздание доÑеÑнего пÑоÑеÑÑа на оÑнове пÑоÑеÑÑа, Ñже имеÑÑего оÑкÑÑÑÑе подклÑÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ libpq, Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к непÑедÑказÑемÑм ÑезÑлÑÑаÑам, поÑÐ¾Ð¼Ñ ÑÑо ÑодиÑелÑÑкий и доÑеÑний пÑоÑеÑÑÑ ÑовмеÑÑно иÑполÑзÑÑÑ Ð¾Ð´Ð½Ð¸ и Ñе же ÑокеÑÑ Ð¸ ÑеÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ. Ðо ÑÑой пÑиÑине подобнÑй подÑ
од не ÑекомендÑеÑÑÑ. Ðднако иÑполÑзование ÑиÑÑемного вÑзова exec из доÑеÑнего пÑоÑеÑÑа Ð´Ð»Ñ Ð·Ð°Ð³ÑÑзки нового иÑполнÑемого Ñайла ÑвлÑеÑÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑм.
PQconnectdbParamsСоздаÑÑ Ð½Ð¾Ð²Ð¾Ðµ подклÑÑение к ÑеÑвеÑÑ Ð±Ð°Ð· даннÑÑ .
PGconn *PQconnectdbParams(const char * const *keywords, const char * const *values, int expand_dbname);ÐÑа ÑÑнкÑÐ¸Ñ Ð¾ÑкÑÑÐ²Ð°ÐµÑ Ð½Ð¾Ð²Ð¾Ðµ Ñоединение Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ , иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑÑ, ÑодеÑжаÑиеÑÑ Ð² двÑÑ Ð¼Ð°ÑÑÐ¸Ð²Ð°Ñ , завеÑÑаÑÑÐ¸Ñ ÑÑ Ñимволом
NULL. ÐеÑвÑй из Ð½Ð¸Ñ ,keywords, опÑеделÑеÑÑÑ ÐºÐ°Ðº маÑÑив ÑÑÑок, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· коÑоÑÑÑ Ð¿ÑедÑÑавлÑÐµÑ Ñобой клÑÑевое Ñлово. ÐÑоÑой,values, даÑÑ Ð·Ð½Ð°Ñение Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ клÑÑевого Ñлова. РоÑлиÑие оÑPQsetdbLogin, опиÑÑваемой ниже, Ð½Ð°Ð±Ð¾Ñ Ð¿Ð°ÑамеÑÑов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑаÑÑиÑен без Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑигнаÑÑÑÑ ÑÑнкÑии, поÑÑÐ¾Ð¼Ñ Ð¸ÑполÑзование данной ÑÑнкÑии (или ÐµÑ Ð½ÐµÐ±Ð»Ð¾ÐºÐ¸ÑÑÑÑÐ¸Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¾Ð²PQconnectStartParamsиPQconnectPoll) ÑвлÑеÑÑÑ Ð¿ÑедпоÑÑиÑелÑнÑм пÑи ÑазÑабоÑке новÑÑ Ð¿Ñиложений.ÐлÑÑевÑе Ñлова-паÑамеÑÑÑ, ÑаÑпознаваемÑе в наÑÑоÑÑее вÑемÑ, пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² ÐодÑазделе 30.1.2.
ÐеÑедаваемÑе маÑÑÐ¸Ð²Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÑÑÑÑми (в ÑÑом ÑлÑÑае бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²Ñе паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ) или ÑодеÑжаÑÑ Ð¾Ð´Ð½Ð¾ или неÑколÑко имÑн/знаÑений паÑамеÑÑов. ÐÑи ÑÑом они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð¹ длинÑ. ÐÑоÑмоÑÑ Ð¼Ð°ÑÑивов завеÑÑаеÑÑÑ, как ÑолÑко в маÑÑиве
keywordsвÑÑÑеÑаеÑÑÑNULL. ÐÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑиваvalues, ÑооÑвеÑÑÑвÑÑÑий оÑлиÑÐ½Ð¾Ð¼Ñ Ð¾ÑNULLÑлеменÑÑkeywords, ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð¸Ð»Ð¸ NULL, Ñакой паÑамеÑÑ Ð¿ÑопÑÑкаеÑÑÑ Ð¸ пÑоÑмаÑÑиваеÑÑÑ ÑледÑÑÑÐ°Ñ Ð¿Ð°Ñа ÑлеменÑов маÑÑива.Ðогда
expand_dbnameÐ¸Ð¼ÐµÐµÑ Ð½ÐµÐ½Ñлевое знаÑение, пеÑвÑй паÑамеÑÑdbnameÐ¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. Ð ÑÑом ÑлÑÑае она «ÑазвоÑаÑиваеÑÑÑ» в оÑделÑнÑе паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, извлеÑÑннÑе из ÑÑой ÑÑÑоки. ÐнаÑение ÑÑиÑаеÑÑÑ ÑÑÑокой подклÑÑениÑ, а не пÑоÑÑо именем Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , еÑли оно ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ðº Ñавно (=) или наÑинаеÑÑÑ Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑ ÐµÐ¼Ñ URI. (ÐодÑобнее ÑоÑмаÑÑ ÑÑÑок подклÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² ÐодÑазделе 30.1.1.) Таким ÑпоÑобом обÑабаÑÑваеÑÑÑ ÑолÑко пеÑвое Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµdbname, ÑледÑÑÑие паÑамеÑÑÑdbnameбÑдÑÑ Ð²Ð¾ÑпÑинимаÑÑÑÑ ÐºÐ°Ðº пÑоÑÑо Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .Ðак пÑавило, маÑÑÐ¸Ð²Ñ Ð¿Ð°ÑамеÑÑов обÑабаÑÑваÑÑÑÑ Ð¾Ñ Ð½Ð°Ñала к конÑÑ. ÐÑли какой-либо паÑамеÑÑ ÑказÑваеÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾ÐºÑаÑно, иÑполÑзоваÑÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ñледнее знаÑение (оÑлиÑное оÑ
NULLи непÑÑÑое). ÐÑо ÑпÑаведливо, в ÑаÑÑноÑÑи, и Ñогда, когда клÑÑевое Ñлово, заданное в ÑÑÑоке подклÑÑениÑ, конÑликÑÑÐµÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм в маÑÑивеkeywords. Таким обÑазом, пÑогÑаммиÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ ÑÐ²Ð¾ÐµÐ¼Ñ ÑÑмоÑÑÐµÐ½Ð¸Ñ ÑеÑиÑÑ, бÑдÑÑ Ð»Ð¸ знаÑÐµÐ½Ð¸Ñ Ð² маÑÑиве пеÑеопÑеделÑÑÑ Ð·Ð½Ð°ÑениÑ, заданнÑми в ÑÑÑоке подклÑÑениÑ, или пеÑеопÑеделÑÑÑÑÑ Ð¸Ð¼Ð¸. ÐлеменÑÑ Ð¼Ð°ÑÑива, пÑедÑеÑÑвÑÑÑие ÑазвÑÑнÑÑÐ¾Ð¼Ñ Ð·Ð½Ð°ÑениÑdbname, могÑÑ Ð±ÑÑÑ Ð¿ÐµÑеопÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð·Ð½Ð°ÑениÑми в ÑÑÑоке подклÑÑениÑ, коÑоÑÑе в ÑÐ²Ð¾Ñ Ð¾ÑеÑÐµÐ´Ñ Ð¿ÐµÑеопÑеделÑÑÑÑÑ ÑлеменÑами маÑÑива, ÑледÑÑÑими поÑлеdbname(и в ÑÑом ÑлÑÑае ÑеÑÑ Ð¸Ð´ÑÑ Ð¾ непÑÑÑÑÑ Ð·Ð½Ð°ÑениÑÑ ).ÐоÑле ÑазбоÑа вÑÐµÑ ÑлеменÑов маÑÑива и ÑазвÑÑнÑÑой ÑÑÑоки подклÑÑÐµÐ½Ð¸Ñ (еÑли она задана), паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, коÑоÑÑе оÑÑалиÑÑ Ð½ÐµÐ·Ð°Ð´Ð°Ð½Ð½Ñми, полÑÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑли Ð½ÐµÐ·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¿Ð°ÑамеÑÑÑ ÑооÑвеÑÑÑвÑÐµÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ (Ñм. Раздел 30.14), бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÐµÑ Ð·Ð½Ð°Ñение. ÐÑли ÑÐ°ÐºÐ°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ задана, Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²ÑÑÑоенное знаÑение по ÑмолÑаниÑ.
PQconnectdbСоздаÑÑ Ð½Ð¾Ð²Ð¾Ðµ подклÑÑение к ÑеÑвеÑÑ Ð±Ð°Ð· даннÑÑ .
PGconn *PQconnectdb(const char *conninfo);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¾ÑкÑÑÐ²Ð°ÐµÑ Ð½Ð¾Ð²Ð¾Ðµ Ñоединение Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ , иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑÑ, полÑÑеннÑе из ÑÑÑоки
conninfo.ÐеÑÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ ÑÑÑока Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÑÑой. Ð ÑÑом ÑлÑÑае иÑполÑзÑÑÑÑÑ Ð²Ñе паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. Ðна Ñакже Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð´Ð½Ð¾ или более знаÑений паÑамеÑÑов, ÑазделÑннÑÑ Ð¿Ñобелами, или URI. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 30.1.1.
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или пÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð² каÑеÑÑве лÑбого из ÑикÑиÑованнÑÑ Ð¿Ð°ÑамеÑÑов, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑинÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.ÐÑли паÑамеÑÑ
dbNameÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ðº=или Ð¸Ð¼ÐµÐµÑ Ð´Ð¾Ð¿ÑÑÑимÑй пÑеÑÐ¸ÐºÑ URI Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, Ñо он воÑпÑинимаеÑÑÑ Ð² каÑеÑÑве ÑÑÑокиconninfoÑоÑно Ñаким же обÑазом, как еÑли Ð±Ñ Ð¾Ð½ бÑл пеÑедан ÑÑнкÑииPQconnectdb, а оÑÑавÑиеÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°Ñем пÑименÑÑÑÑÑ, как Ñказано длÑPQconnectdbParams.PQsetdbСоздаÑÑ Ð½Ð¾Ð²Ð¾Ðµ подклÑÑение к ÑеÑвеÑÑ Ð±Ð°Ð· даннÑÑ .
PGconn *PQsetdb(char *pghost, char *pgport, char *pgoptions, char *pgtty, char *dbName);ÐÑо макÑоÑ, коÑоÑÑй вÑзÑваеÑ
PQsetdbLoginÑ Ð½ÑлевÑми ÑказаÑелÑми в каÑеÑÑве знаÑений паÑамеÑÑовloginиpwd. ÐбеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð¾Ð±ÑаÑнÑÑ ÑовмеÑÑимоÑÑÑ Ñ Ð¾ÑÐµÐ½Ñ ÑÑаÑÑми пÑогÑаммами.PQconnectStartParamsPQconnectStartPQconnectPollСоздаÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к ÑеÑвеÑÑ Ð±Ð°Ð· даннÑÑ Ð½ÐµÐ±Ð»Ð¾ÐºÐ¸ÑÑÑÑим ÑпоÑобом.
PGconn *PQconnectStartParams(const char * const *keywords, const char * const *values, int expand_dbname); PGconn *PQconnectStart(const char *conninfo); PostgresPollingStatusType PQconnectPoll(PGconn *conn);ТÑи ÑÑи ÑÑнкÑии иÑполÑзÑÑÑÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¾ÑкÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к ÑеÑвеÑÑ Ð±Ð°Ð· даннÑÑ Ñаким обÑазом, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ñок иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ð°Ñего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ бÑл заблокиÑован пÑи вÑполнении ÑдалÑнной опеÑаÑии ввода/вÑвода в пÑоÑеÑÑе подклÑÑениÑ. СÑÑÑ ÑÑого Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð° в Ñом, ÑÑÐ¾Ð±Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ завеÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑий ввода/вÑвода могло пÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð² главном Ñикле пÑиложениÑ, а не в внÑÑÑи ÑÑнкÑий
PQconnectdbParamsилиPQconnectdb, Ñ Ñем, ÑÑÐ¾Ð±Ñ Ð¿Ñиложение могло ÑпÑавлÑÑÑ ÑÑой опеÑаÑией паÑаллелÑно Ñ Ð´ÑÑгой ÑабоÑой.С помоÑÑÑ ÑÑнкÑии
PQconnectStartParamsподклÑÑение к базе даннÑÑ Ð²ÑполнÑеÑÑÑ, иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑÑ, взÑÑÑе из маÑÑивовkeywordsиvalues, а ÑпÑавление оÑÑÑеÑÑвлÑеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑexpand_dbname, как опиÑано вÑÑе длÑPQconnectdbParams.С помоÑÑÑ ÑÑнкÑии
PQconnectStartподклÑÑение к базе даннÑÑ Ð²ÑполнÑеÑÑÑ, иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑÑ, взÑÑÑе из ÑÑÑокиconninfo, как опиÑано вÑÑе длÑPQconnectdb.Ðи
PQconnectStartParams, ниPQconnectStart, ниPQconnectPollне заблокиÑÑÑÑÑÑ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока вÑполнÑеÑÑÑ ÑÑд огÑаниÑений:ÐаÑамеÑÑÑ
hostaddrиhostиÑполÑзÑÑÑÑÑ Ñак, ÑÑÐ¾Ð±Ñ Ð¿ÑÑмой и обÑаÑнÑй DNS-запÑоÑÑ Ð½Ðµ вÑполнÑлиÑÑ. ÐодÑобнее ÑÑи паÑамеÑÑÑ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² ÐодÑазделе 30.1.2.ÐÑли Ð²Ñ Ð²ÑзÑваеÑе
PQtrace, обеÑпеÑÑÑе, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ñок, в коÑоÑÑй вÑводиÑÑÑ ÑÑаÑÑиÑовоÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ, не заблокиÑовалÑÑ.ÐеÑед вÑзовом
PQconnectPollÐ²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÐµÑевеÑÑи ÑÐ¾ÐºÐµÑ Ð² ÑооÑвеÑÑÑвÑÑÑее ÑоÑÑоÑние, как опиÑано ниже.
ÐÑимеÑание: иÑполÑзование
PQconnectStartParamsаналогиÑно иÑполÑзованиÑPQconnectStart, Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ Ð½Ð¸Ð¶Ðµ.ЧÑÐ¾Ð±Ñ Ð½Ð°ÑаÑÑ Ð½ÐµÐ±Ð»Ð¾ÐºÐ¸ÑÑÑÑий запÑÐ¾Ñ Ð½Ð° подклÑÑение, вÑзовиÑе
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, опиÑанной вÑÑе. ÐÑÑгие ÑоÑÑоÑÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ñакже имеÑÑ Ð¼ÐµÑÑо в ÑеÑение (и ÑолÑко в ÑеÑение) аÑÐ¸Ð½Ñ Ñонной пÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. Ðни показÑваÑÑ ÑекÑÑÑÑ ÑÑÐ°Ð´Ð¸Ñ Ð¿ÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¸ могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ, напÑимеÑ, Ð´Ð»Ñ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑной ÑвÑзи полÑзоваÑелÑ. ÐÐ¾Ñ ÑÑи ÑоÑÑоÑниÑ:CONNECTION_STARTEDÐжидание, пока Ñоединение бÑÐ´ÐµÑ ÑÑÑановлено.
CONNECTION_MADEСоединение ÑÑÑановлено; ожидание оÑпÑавки.
CONNECTION_AWAITING_RESPONSEÐжидание оÑвеÑа Ð¾Ñ ÑеÑвеÑа.
CONNECTION_AUTH_OKÐÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾Ð»ÑÑена; ожидание завеÑÑÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÑка ÑеÑвеÑной ÑаÑÑи.
CONNECTION_SSL_STARTUPСоглаÑование SSL-ÑиÑÑованиÑ.
CONNECTION_SETENVСоглаÑование знаÑений паÑамеÑÑов, завиÑÑÑÐ¸Ñ Ð¾Ñ Ð¿ÑогÑаммной ÑÑедÑ.
ÐамеÑÑÑе, ÑÑо, Ñ Ð¾ÑÑ ÑÑи конÑÑанÑÑ Ð¸ ÑÐ¾Ñ ÑанÑÑÑÑ (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð°Ð½Ð¸Ñ ÑовмеÑÑимоÑÑи), пÑиложение никогда не должно полагаÑÑÑÑ Ð½Ð° Ñо, ÑÑо они поÑвÑÑÑÑ Ð² каком-Ñо конкÑеÑном поÑÑдке или вообÑе поÑвÑÑÑÑ, а Ñакже на Ñо, ÑÑо ÑоÑÑоÑние вÑегда пÑÐ¸Ð¼ÐµÑ Ð¾Ð´Ð½Ð¾ из ÑÑÐ¸Ñ Ð´Ð¾ÐºÑменÑиÑованнÑÑ Ð·Ð½Ð°Ñений. ÐÑиложение Ð¼Ð¾Ð¶ÐµÑ ÑделаÑÑ ÑÑо-Ñо наподобие:
switch(PQstatus(conn)) { case CONNECTION_STARTED: feedback = "ÐодклÑÑение..."; break; case CONNECTION_MADE: feedback = "ÐодклÑÑÑн к ÑеÑвеÑÑ..."; break; . . . default: feedback = "ÐодклÑÑение..."; }ÐаÑамеÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ
connect_timeoutигноÑиÑÑеÑÑÑ, когда иÑполÑзÑеÑÑÑPQconnectPoll; именно пÑиложение оÑвеÑÐ°ÐµÑ Ð·Ð° пÑинÑÑие ÑеÑÐµÐ½Ð¸Ñ Ð¾ Ñом, ÑвлÑеÑÑÑ Ð»Ð¸ иÑÑекÑее вÑÐµÐ¼Ñ ÑÑезмеÑнÑм. РпÑоÑивном ÑлÑÑае вÑзовPQconnectStartÑ Ð¿Ð¾ÑледÑÑÑим вÑзовомPQconnectPoll в ÑиклебÑдÑÑ ÑквиваленÑÐ½Ñ Ð²ÑзовÑPQconnectdb.ÐамеÑÑÑе, ÑÑо еÑли ÑÑнкÑиÑ
PQconnectStartвозвÑаÑÐ°ÐµÑ Ð½ÐµÐ½Ñлевой ÑказаÑелÑ, Ñо, законÑив его иÑполÑзование, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑзваÑÑPQfinish, ÑÑÐ¾Ð±Ñ Ð¾ÑвободиÑÑ Ð¿Ð¾Ð»ÑÑеннÑÑ ÑÑÑÑкÑÑÑÑ Ð¸ вÑе ÑвÑзаннÑе Ñ Ð½ÐµÐ¹ блоки памÑÑи. ÐÑо нÑжно ÑделаÑÑ, даже еÑли попÑÑка подклÑÑÐµÐ½Ð¸Ñ Ð½Ðµ поÑледÑÐµÑ Ð¸Ð»Ð¸ окажеÑÑÑ Ð½ÐµÑÑпеÑной.PQconndefaultsÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑов подклÑÑениÑ.
PQconninfoOption *PQconndefaults(void); typedef struct { char *keyword; /* ÐлÑÑевое Ñлово Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ паÑамеÑÑа */ char *envvar; /* ÐÐ¼Ñ Ð°Ð»ÑÑеÑнаÑивной пеÑеменной окÑÑÐ¶ÐµÐ½Ð¸Ñ */ char *compiled; /* ÐлÑÑеÑнаÑивное знаÑение по ÑмолÑаниÑ, назнаÑенное пÑи компилÑÑии */ char *val; /* ТекÑÑее знаÑение паÑамеÑÑа или NULL */ char *label; /* ÐбознаÑение ÑÑого Ð¿Ð¾Ð»Ñ Ð² диалоге подклÑÑÐµÐ½Ð¸Ñ */ char *dispchar; /* ÐоказÑваеÑ, как оÑобÑажаÑÑ ÑÑо поле в диалоге подклÑÑениÑ. ÐнаÑÐµÐ½Ð¸Ñ ÑледÑÑÑие: "" ÐÑобÑажаÑÑ Ð²Ð²ÐµÐ´Ñнное знаÑение "как еÑÑÑ" "*" Ðоле паÑÐ¾Ð»Ñ â ÑкÑÑваÑÑ Ð·Ð½Ð°Ñение "D" ÐаÑамеÑÑ Ð¾Ñладки â не показÑваÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ */ int dispsize; /* Ð Ð°Ð·Ð¼ÐµÑ Ð¿Ð¾Ð»Ñ Ð² ÑÐ¸Ð¼Ð²Ð¾Ð»Ð°Ñ Ð´Ð»Ñ Ð´Ð¸Ð°Ð»Ð¾Ð³Ð° */ } PQconninfoOption;ÐозвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив паÑамеÑÑов подклÑÑениÑ. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ Ð¿Ð°ÑамеÑÑов
PQconnectdbи Ð¸Ñ ÑекÑÑÐ¸Ñ Ð·Ð½Ð°Ñений по ÑмолÑаниÑ. ÐозвÑаÑаемое знаÑение ÑказÑÐ²Ð°ÐµÑ Ð½Ð° маÑÑив ÑÑÑÑкÑÑÑPQconninfoOption, коÑоÑÑй завеÑÑаеÑÑÑ ÑлеменÑом, имеÑÑим нÑлевой ÑказаÑелÑkeyword. ÐÑли вÑделиÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð½Ðµ ÑдалоÑÑ, Ñо возвÑаÑаеÑÑÑ Ð½Ñлевой ÑказаÑелÑ. ÐбÑаÑиÑе внимание, ÑÑо ÑекÑÑие знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ (полÑval) бÑдÑÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ Ð¿ÐµÑеменнÑÑ ÑÑÐµÐ´Ñ Ð¸ дÑÑгого конÑекÑÑа. ÐÑÑÑÑÑÑвÑÑÑий или невеÑнÑй ÑеÑвиÑнÑй Ñайл бÑÐ´ÐµÑ Ð¼Ð¾Ð»Ñа пÑоигноÑиÑован. ÐÑзÑваÑÑие ÑÑнкÑии Ð´Ð¾Ð»Ð¶Ð½Ñ ÑаÑÑмаÑÑиваÑÑ Ð´Ð°Ð½Ð½Ñе паÑамеÑÑов по ÑмолÑÐ°Ð½Ð¸Ñ ÐºÐ°Ðº «ÑолÑко Ð´Ð»Ñ ÑÑениÑ».ÐоÑле обÑабоÑки маÑÑива паÑамеÑÑов оÑвободиÑе памÑÑÑ, пеÑедав его ÑÑнкÑии
PQconninfoFree. ÐÑли ÑÑого не делаÑÑ, Ñо пÑи каждом вÑзове ÑÑнкÑииPQconndefaultsбÑÐ´ÐµÑ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸ÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ ÑÑеÑка памÑÑи.PQconninfoÐозвÑаÑÐ°ÐµÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, иÑполÑзÑемÑе дейÑÑвÑÑÑим Ñоединением.
PQconninfoOption *PQconninfo(PGconn *conn);
ÐозвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив паÑамеÑÑов подклÑÑениÑ. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ Ð¿Ð°ÑамеÑÑов
PQconnectdbи знаÑений, коÑоÑÑе бÑли иÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑÑ. ÐозвÑаÑаемое знаÑение ÑказÑÐ²Ð°ÐµÑ Ð½Ð° маÑÑив ÑÑÑÑкÑÑÑPQconninfoOption, коÑоÑÑй завеÑÑаеÑÑÑ ÑлеменÑом, имеÑÑим нÑлевой ÑказаÑелÑkeyword. ÐÑе замеÑаниÑ, пÑиведÑннÑе вÑÑе длÑPQconndefaults, Ñакже ÑпÑÐ°Ð²ÐµÐ´Ð»Ð¸Ð²Ñ Ð¸ Ð´Ð»Ñ ÑезÑлÑÑаÑаPQconninfo.PQconninfoParseÐозвÑаÑÐ°ÐµÑ ÑазобÑаннÑе паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, пеÑеданнÑе в ÑÑÑоке подклÑÑениÑ.
PQconninfoOption *PQconninfoParse(const char *conninfo, char **errmsg);
РазбиÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¸ возвÑаÑÐ°ÐµÑ ÑезÑлÑÑиÑÑÑÑие паÑамеÑÑÑ Ð² виде маÑÑива; возвÑаÑаеÑ
NULL, еÑли возникаÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¿Ñи ÑазбоÑе ÑÑÑоки подклÑÑениÑ. ÐÑÑ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов ÑÑнкÑииPQconnectdbиз пÑедоÑÑавленной ÑÑÑоки подклÑÑениÑ. ÐозвÑаÑаемое знаÑение ÑказÑÐ²Ð°ÐµÑ Ð½Ð° маÑÑив ÑÑÑÑкÑÑÑPQconninfoOption, коÑоÑÑй завеÑÑаеÑÑÑ ÑлеменÑом, имеÑÑим нÑлевой ÑказаÑелÑkeyword.ÐÑе ÑазÑеÑÑннÑе паÑамеÑÑÑ Ð±ÑдÑÑ Ð¿ÑиÑÑÑÑÑвоваÑÑ Ð² ÑезÑлÑÑиÑÑÑÑем маÑÑиве, но
PQconninfoOptionÐ´Ð»Ñ Ð»Ñбого паÑамеÑÑа, не пÑиÑÑÑÑÑвÑÑÑего в ÑÑÑоке подклÑÑениÑ, бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°ÑениеNULLв полеval; знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð½Ðµ подÑÑавлÑÑÑÑÑ.ÐÑли
errmsgне ÑавноNULL, Ñогда в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð°*errmsgпÑиÑваиваеÑÑÑNULL, а в пÑоÑивном ÑлÑÑае -- адÑÐµÑ ÑÑÑоки ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибке, обÑÑÑнÑÑÑего пÑоблемÑ. ÐамÑÑÑ Ð´Ð»Ñ ÑÑой ÑÑÑоки вÑделÑÐµÑ ÑÑнкÑиÑmalloc. (Также возможна ÑиÑÑаÑиÑ, когда*errmsgбÑÐ´ÐµÑ ÑÑÑановлено вNULL, и пÑи ÑÑом ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑNULL. ÐÑо ÑказÑÐ²Ð°ÐµÑ Ð½Ð° Ð½ÐµÑ Ð²Ð°ÑÐºÑ Ð¿Ð°Ð¼ÑÑи.)ÐоÑле обÑабоÑки маÑÑива паÑамеÑÑов оÑвободиÑе памÑÑÑ, пеÑедав его ÑÑнкÑии
PQconninfoFree. ÐÑли ÑÑого не делаÑÑ, Ñогда некоÑоÑое колиÑеÑÑво памÑÑи бÑÐ´ÐµÑ ÑÑекаÑÑ Ð¿Ñи каждом вÑзовеPQconninfoParse. РнаобоÑоÑ, еÑли пÑоизоÑла оÑибка иerrmsgне ÑавноNULL, обÑзаÑелÑно оÑвободиÑе памÑÑÑ, занимаемÑÑ ÑÑÑокой ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑибке, иÑполÑзÑÑPQfreemem.PQfinishÐакÑÑÐ²Ð°ÐµÑ Ñоединение Ñ ÑеÑвеÑом. Также оÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¿Ð°Ð¼ÑÑÑ, иÑполÑзÑемÑÑ Ð¾Ð±ÑекÑом
PGconn.void PQfinish(PGconn *conn);
ÐбÑаÑиÑе внимание, ÑÑо даже еÑли попÑÑка подклÑÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑÑ Ð¿Ð¾ÑеÑпела неÑдаÑÑ (как показÑваеÑ
PQstatus), пÑиложение вÑе Ñавно должно вÑзваÑÑPQfinish, ÑÑÐ¾Ð±Ñ Ð¾ÑвободиÑÑ Ð¿Ð°Ð¼ÑÑÑ, иÑполÑзÑемÑÑ Ð¾Ð±ÑекÑомPGconn. УказаÑелÑPGconnне должен иÑполÑзоваÑÑÑÑ Ð¿Ð¾Ð²ÑоÑно поÑле Ñого, как бÑла вÑзвана ÑÑнкÑиÑPQfinish.PQresetÐеÑеÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÐºÐ°Ð½Ð°Ð» ÑвÑзи Ñ ÑеÑвеÑом.
void PQreset(PGconn *conn);
ÐÑа ÑÑнкÑÐ¸Ñ Ð·Ð°ÐºÑÐ¾ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к ÑеÑвеÑÑ, а поÑом попÑÑаеÑÑÑ Ð²Ð¾ÑÑÑановиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑеÑвеÑÑ, иÑполÑзÑÑ Ð²Ñе Ñе же паÑамеÑÑÑ, коÑоÑÑе иÑполÑзовалиÑÑ Ð¿Ñежде. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле оÑибки, еÑли ÑабоÑаÑÑее Ñоединение оказалоÑÑ Ð¿Ð¾ÑеÑÑннÑм.
PQresetStartPQresetPollÐеÑеÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÐºÐ°Ð½Ð°Ð» ÑвÑзи Ñ ÑеÑвеÑом неблокиÑÑÑÑим ÑпоÑобом.
int PQresetStart(PGconn *conn); PostgresPollingStatusType PQresetPoll(PGconn *conn);
ÐÑи ÑÑнкÑии закÑоÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к ÑеÑвеÑÑ, а поÑом попÑÑаÑÑÑÑ Ð²Ð¾ÑÑÑановиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑеÑвеÑÑ, иÑполÑзÑÑ Ð²Ñе Ñе же паÑамеÑÑÑ, коÑоÑÑе иÑполÑзовалиÑÑ Ð¿Ñежде. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле оÑибки, еÑли ÑабоÑаÑÑее Ñоединение оказалоÑÑ Ð¿Ð¾ÑеÑÑннÑм. Ðни оÑлиÑаÑÑÑÑ Ð¾Ñ
PQreset(Ñм. вÑÑе) Ñем, ÑÑо дейÑÑвÑÑÑ Ð½ÐµÐ±Ð»Ð¾ÐºÐ¸ÑÑÑÑим ÑпоÑобом. Ðа ÑÑи ÑÑнкÑии налагаÑÑÑÑ Ñе же огÑаниÑениÑ, ÑÑо и наPQconnectStartParams,PQconnectStartиPQconnectPoll.ЧÑÐ¾Ð±Ñ Ð¿ÑиÑÑÑпиÑÑ Ðº пеÑеÑÑÑановке подклÑÑениÑ, вÑзовиÑе
PQresetStart. ÐÑли она возвÑаÑÐ¸Ñ 0, пеÑеÑÑÑановка завеÑÑилаÑÑ Ð½ÐµÑдаÑно. ÐÑли она возвÑаÑÐ¸Ñ 1, опÑоÑиÑе ÑезÑлÑÑÐ°Ñ Ð¿ÐµÑеÑÑÑановки, иÑполÑзÑÑPQresetPoll, ÑоÑно Ñаким же обÑазом, как еÑли Ð±Ñ Ð²Ñ Ñоздавали подклÑÑение, иÑполÑзÑÑPQconnectPoll.PQpingParamsPQpingParamsÑообÑÐ°ÐµÑ ÑоÑÑоÑние ÑеÑвеÑа. Ðна пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, иденÑиÑнÑе Ñем, ÑÑо полÑÑÐ°ÐµÑ ÑÑнкÑиÑPQconnectdbParams, опиÑÐ°Ð½Ð½Ð°Ñ Ð²ÑÑе. ÐÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи пÑедоÑÑавлÑÑÑ ÐºÐ¾ÑÑекÑнÑе Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, паÑÐ¾Ð»Ñ Ð¸Ð»Ð¸ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑоÑÑоÑние ÑеÑвеÑа. Ðднако еÑли пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑÑекÑнÑе знаÑениÑ, ÑеÑÐ²ÐµÑ Ð·Ð°Ð½ÐµÑÑÑ Ð² жÑÑнал неÑдаÑнÑÑ Ð¿Ð¾Ð¿ÑÑÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ.PGPing PQpingParams(const char * const *keywords, const char * const *values, int expand_dbname);ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¾ из ÑледÑÑÑÐ¸Ñ Ð·Ð½Ð°Ñений:
PQPING_OKСеÑÐ²ÐµÑ ÑабоÑÐ°ÐµÑ Ð¸, по-видимомÑ, пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ.
PQPING_REJECTСеÑÐ²ÐµÑ ÑабоÑаеÑ, но Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² ÑоÑÑоÑнии, коÑоÑое запÑеÑÐ°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ (запÑÑк, завеÑÑение ÑабоÑÑ Ð¸Ð»Ð¸ воÑÑÑановление поÑле аваÑийного оÑказа).
PQPING_NO_RESPONSEÐонÑÐ°ÐºÑ Ñ ÑеÑвеÑом не ÑдалÑÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ ÑказÑваÑÑ Ð½Ð° Ñо, ÑÑо ÑеÑÐ²ÐµÑ Ð½Ðµ запÑÑен или ÑÑо-Ñо не в поÑÑдке Ñ Ð¿Ð°ÑамеÑÑами данного подклÑÑÐµÐ½Ð¸Ñ (напÑимеÑ, невеÑнÑй Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа), или Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÑо пÑоблема Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑеÑи (напÑимеÑ, бÑандмаÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÑÐµÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° подклÑÑение).
PQPING_NO_ATTEMPTÐикакой попÑÑки ÑÑÑановиÑÑ ÐºÐ¾Ð½ÑÐ°ÐºÑ Ñ ÑеÑвеÑом Ñделано не бÑло, поÑколÑÐºÑ Ð¿ÑедоÑÑавленнÑе паÑамеÑÑÑ Ð±Ñли Ñвно некоÑÑекÑнÑми, или имела меÑÑо какаÑ-Ñо пÑоблема на ÑÑоÑоне клиенÑа (напÑимеÑ, Ð½ÐµÑ Ð²Ð°Ñка памÑÑи).
PQpingPQpingÑообÑÐ°ÐµÑ ÑоÑÑоÑние ÑеÑвеÑа. Ðна пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, иденÑиÑнÑе Ñем, ÑÑо полÑÑÐ°ÐµÑ ÑÑнкÑиÑPQconnectdb, опиÑÐ°Ð½Ð½Ð°Ñ Ð²ÑÑе. ÐÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи пÑедоÑÑавлÑÑÑ ÐºÐ¾ÑÑекÑнÑе Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, паÑÐ¾Ð»Ñ Ð¸Ð»Ð¸ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑоÑÑоÑние ÑеÑвеÑа. Ðднако еÑли пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑÑекÑнÑе знаÑениÑ, ÑеÑÐ²ÐµÑ Ð·Ð°Ð½ÐµÑÑÑ Ð² жÑÑнал неÑдаÑнÑÑ Ð¿Ð¾Ð¿ÑÑÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ.PGPing PQping(const char *conninfo);
ÐозвÑаÑаемÑе знаÑÐµÐ½Ð¸Ñ Ñакие же, как и длÑ
PQpingParams.
30.1.1. СÑÑоки паÑамеÑÑов подклÑÑениÑ
Ð Ñд ÑÑнкÑий libpq полÑÑаÑÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, ÑазбиÑÐ°Ñ ÑÑÑоки, заданнÑе полÑзоваÑелем. ÐÑи ÑÑÑоки воÑпÑинимаÑÑÑÑ Ð² двÑÑ
ÑоÑмаÑаÑ
: пÑоÑÑÑе ÑÑÑоки клÑÑ = знаÑение и URI, ÑооÑвеÑÑÑвÑÑÑие RFC 3986.
30.1.1.1. СÑÑоки паÑамеÑÑов подклÑÑÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð° «клÑÑ/знаÑение»
СоглаÑно пеÑÐ²Ð¾Ð¼Ñ ÑоÑмаÑÑ, ÑÑÑановка каждого паÑамеÑÑа вÑполнÑеÑÑÑ Ð² ÑоÑме keyword = value. ÐÑÐ¾Ð±ÐµÐ»Ñ Ð²Ð¾ÐºÑÑг знака ÑавенÑÑва не ÑвлÑÑÑÑÑ Ð¾Ð±ÑзаÑелÑнÑми. ÐÐ»Ñ Ð·Ð°Ð¿Ð¸Ñи пÑÑÑого знаÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ знаÑениÑ, ÑодеÑжаÑего пÑобелÑ, заклÑÑиÑе его в одинаÑнÑе кавÑÑки, напÑимеÑ, keyword = 'a value'. ÐдинаÑнÑе кавÑÑки и ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ Ð²Ð½ÑÑÑи знаÑÐµÐ½Ð¸Ñ Ð½Ñжно обÑзаÑелÑно ÑкÑаниÑоваÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñимвола обÑаÑной коÑой ÑеÑÑÑ, Ñ. е., \' и \\.
ÐÑимеÑ:
host=localhost port=5432 dbname=mydb connect_timeout=10
ÐлÑÑевÑе Ñлова-паÑамеÑÑÑ, ÑаÑпознаваемÑе в наÑÑоÑÑее вÑемÑ, пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² ÐодÑазделе 30.1.2.
30.1.1.2. URI Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ
ÐбÑÐ°Ñ ÑоÑма URI Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ñакова:
postgresql://[user[:password]@][host][:port][/dbname][?param1=value1&...]
РкаÑеÑÑве обознаÑÐµÐ½Ð¸Ñ ÑÑ
ÐµÐ¼Ñ URI Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ postgresql:// или postgres://. ÐÑÑалÑнÑе ÑаÑÑи URI ÑвлÑÑÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑми. Ð ÑледÑÑÑиÑ
пÑимеÑаÑ
показан допÑÑÑимÑй ÑинÑакÑÐ¸Ñ URI:
postgresql:// postgresql://localhost postgresql://localhost:5433 postgresql://localhost/mydb postgresql://user@localhost postgresql://user:secret@localhost postgresql://other@localhost/otherdb?connect_timeout=10&application_name=myapp
ÐнаÑениÑ, коÑоÑÑе обÑÑно задаÑÑÑÑ Ð² иеÑаÑÑ Ð¸ÑеÑкой ÑаÑÑи URI, Ñакже можно задаÑÑ Ð² именованнÑÑ Ð¿Ð°ÑамеÑÑÐ°Ñ . ÐапÑимеÑ:
postgresql:///mydb?host=localhost&port=5433
ÐÑе именованнÑе паÑамеÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ ÐºÐ»ÑÑевÑм Ñловам, пеÑеÑиÑленнÑм в ÐодÑаздел 30.1.2, за иÑклÑÑением Ñого, ÑÑо вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ssl=true заменÑÑÑÑÑ Ð½Ð° sslmode=require Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ URI-ÑÑÑоками JDBC.
ÐÐ»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ñимволов, имеÑÑÐ¸Ñ ÑпеÑиалÑное знаÑение, в лÑбой ÑаÑÑи URI можно пÑименÑÑÑ URL-кодиÑование (Ñ Ð¸ÑполÑзованием Ñимвола %).
СеÑÐ²ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ пÑедÑÑавиÑÑ Ð»Ð¸Ð±Ð¾ ÑеÑевÑм именем, либо IP-адÑеÑом. ÐÑи иÑполÑзовании пÑоÑокола IPv6 нÑжно заклÑÑиÑÑ Ð°Ð´ÑÐµÑ Ð² квадÑаÑнÑе Ñкобки:
postgresql://[2001:db8::1234]/database
ЧаÑÑÑ host инÑеÑпÑеÑиÑÑеÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð¾Ð¿Ð¸Ñанием паÑамеÑÑа host. Так, еÑли ÑÑа ÑаÑÑÑ ÑÑÑоки пÑÑÑа или вÑглÑÐ´Ð¸Ñ ÐºÐ°Ðº абÑолÑÑнÑй пÑÑÑ, вÑбиÑаеÑÑÑ Ñоединение ÑеÑез Unix-ÑокеÑÑ, в пÑоÑивном ÑлÑÑае иниÑииÑÑеÑÑÑ Ñоединение по TCP/IP. УÑÑиÑе однако, ÑÑо Ñимвол коÑой ÑеÑÑÑ Ð² иеÑаÑÑ
иÑеÑкой ÑаÑÑи URI ÑвлÑеÑÑÑ Ð·Ð°ÑезеÑвиÑованнÑм. ÐоÑÑомÑ, ÑÑÐ¾Ð±Ñ ÑказаÑÑ Ð½ÐµÑÑандаÑÑнÑй каÑалог Unix-ÑокеÑа, нÑжно поÑÑÑпиÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из двÑÑ
ÑпоÑобов: не задаваÑÑ ÑÑÑ ÑаÑÑÑ Ð² URI и ÑказаÑÑ ÑеÑÐ²ÐµÑ Ð² именованном паÑамеÑÑе либо закодиÑоваÑÑ Ð¿ÑÑÑ Ð² ÑаÑÑи host Ñ Ð¿ÑоÑенÑами:
postgresql:///dbname?host=/var/lib/postgresql postgresql://%2Fvar%2Flib%2Fpostgresql/dbname
30.1.2. ÐлÑÑевÑе Ñлова-паÑамеÑÑÑ
ÐлÑÑевÑе Ñлова-паÑамеÑÑÑ, ÑаÑпознаваемÑе в наÑÑоÑÑее вÑемÑ, ÑледÑÑÑие:
hostÐÐ¼Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑа Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. ÐÑли оно наÑинаеÑÑÑ Ñ ÐºÐ¾Ñой ÑеÑÑÑ, Ñоединение бÑÐ´ÐµÑ ÑÑÑановлено ÑеÑез Unix-ÑокеÑ, а не по пÑоÑÐ¾ÐºÐ¾Ð»Ñ TCP/IP; знаÑение задаÑÑ Ð¸Ð¼Ñ ÐºÐ°Ñалога, ÑодеÑжаÑего Ñайл ÑокеÑа. Ðо ÑмолÑаниÑ, когда
hostне Ñказан, подклÑÑение пÑоизводиÑÑÑ ÑеÑез Unix-ÑÐ¾ÐºÐµÑ Ð² каÑалоге/tmp(или в Ñом каÑалоге, коÑоÑÑй бÑл назнаÑен пÑи ÑбоÑке Postgres Pro). Ð ÑиÑÑÐµÐ¼Ð°Ñ , не поддеÑживаÑÑÐ¸Ñ Unix-ÑокеÑÑ, подклÑÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑоизводиÑÑÑ Ðºlocalhost.hostaddrЧиÑловой IP-адÑÐµÑ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑа Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. Ðн должен бÑÑÑ Ð¿ÑедÑÑавлен в ÑÑандаÑÑном ÑоÑмаÑе адÑеÑов IPv4, напÑимеÑ,
172.28.40.9. ÐÑли ваÑа маÑина поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ IPv6, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¸ ÑÑи адÑеÑа. СвÑÐ·Ñ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ TCP/IP иÑполÑзÑеÑÑÑ Ð²Ñегда, когда в каÑеÑÑве ÑÑого паÑамеÑÑа пеÑедана непÑÑÑÐ°Ñ ÑÑÑока.ÐÑполÑзование
hostaddrвмеÑÑоhostпозволÑÐµÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¿Ð¾Ð¸Ñка на ÑеÑвеÑе имÑн, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ð°Ð¶Ð½Ð¾ Ð´Ð»Ñ Ð¿Ñиложений, имеÑÑÐ¸Ñ Ð²ÑеменнÑе огÑаниÑениÑ. Ðднако Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑа ÑÑебÑеÑÑÑ Ð´Ð»Ñ Ð¼ÐµÑодов аÑÑенÑиÑикаÑии GSSAPI или SSPI, а Ñакже Ð´Ð»Ñ Ð¿ÑовеÑки полномоÑий на оÑнове SSL-ÑеÑÑиÑикаÑов в Ñежимеverify-full. ÐÑполÑзÑÑÑÑÑ ÑледÑÑÑие пÑавила:ÐÑли
hostÑказан, аhostaddrне Ñказан, Ñогда вÑполнÑеÑÑÑ Ð¿Ð¾Ð¸Ñк на ÑеÑвеÑе имÑн.ÐÑли Ñказан
hostaddr, аhostне Ñказан, Ñогда знаÑениеhostaddrдаÑÑ ÑеÑевой адÑÐµÑ ÑеÑвеÑа. ÐопÑÑка подклÑÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑ Ð½ÐµÑдаÑей, еÑли меÑод аÑÑенÑиÑикаÑии ÑÑебÑÐµÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ компÑÑÑеÑа.ÐÑли ÑÐºÐ°Ð·Ð°Ð½Ñ ÐºÐ°Ðº
host, Ñак иhostaddr, Ñогда знаÑениеhostaddrдаÑÑ ÑеÑевой адÑÐµÑ ÑеÑвеÑа, а знаÑениеhostигноÑиÑÑеÑÑÑ, еÑли ÑолÑко меÑод аÑÑенÑиÑикаÑии его не поÑÑебÑеÑ. Ð Ñаком ÑлÑÑае оно бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² каÑеÑÑве имени компÑÑÑеÑа.
ÐамеÑÑÑе, ÑÑо аÑÑенÑиÑикаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÑÑиÑÑÑ Ð½ÐµÑдаÑей, еÑли
hostне ÑвлÑеÑÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑеÑвеÑа, имеÑÑего ÑеÑевой адÑеÑhostaddr. ÐамеÑÑÑе Ñакже, ÑÑоhost, а неhostaddrиÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¸Ð´ÐµÐ½ÑиÑиÑиÑоваÑÑ Ñоединение в~/.pgpass(Ñм. Раздел 30.15).ÐÑли не ÑÐºÐ°Ð·Ð°Ð½Ñ Ð½Ð¸ Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑа, ни его адÑеÑ, libpq бÑÐ´ÐµÑ Ð¿ÑоизводиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение, иÑполÑзÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑй Unix-ÑокеÑ; в ÑиÑÑÐµÐ¼Ð°Ñ , не поддеÑживаÑÑÐ¸Ñ Unix-ÑокеÑÑ, она бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº
localhost.portÐÐ¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ðº ÑеÑвеÑÑ Ð¸Ð»Ð¸ ÑаÑÑиÑение имени Ñайла-ÑокеÑа Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑений в домене Unix.
dbnameÐÐ¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¾ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ полÑзоваÑелÑ. РопÑеделÑннÑÑ ÐºÐ¾Ð½ÑекÑÑÐ°Ñ ÑÑо знаÑение пÑовеÑÑеÑÑÑ Ð½Ð° ÑооÑвеÑÑÑвие ÑаÑÑиÑеннÑм ÑоÑмаÑам; Ñм. ÐодÑаздел 30.1.1 Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñобной инÑоÑмаÑии.
userÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Postgres Pro, иÑполÑзÑемое Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ñо же имÑ, коÑоÑое Ð¸Ð¼ÐµÐµÑ Ð² опеÑаÑионной ÑиÑÑеме полÑзоваÑелÑ, Ð¾Ñ Ð»Ð¸Ñа коÑоÑого вÑполнÑеÑÑÑ Ð¿Ñиложение.
passwordÐаÑолÑ, иÑполÑзÑемÑй в ÑлÑÑае, когда ÑеÑÐ²ÐµÑ ÑÑебÑÐµÑ Ð°ÑÑенÑиÑикаÑии по паÑолÑ.
connect_timeoutÐакÑималÑнÑй пеÑиод Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, в ÑекÑÐ½Ð´Ð°Ñ (запиÑÑваеÑÑÑ Ð² виде ÑÑÑоки, пÑедÑÑавлÑÑÑей деÑÑÑиÑное Ñелое ÑиÑло).
client_encodingÐÑим ÑÑÑанавливаеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑионнÑй паÑамеÑÑ
client_encodingÐ´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ подклÑÑениÑ. Рдополнение к знаÑениÑм, коÑоÑÑе пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑооÑвеÑÑÑвÑÑÑий паÑамеÑÑ ÑеÑвеÑа, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð·Ð½Ð°Ñениеauto. Ð ÑÑом ÑлÑÑае пÑавилÑÐ½Ð°Ñ ÐºÐ¾Ð´Ð¸Ñовка опÑеделÑеÑÑÑ Ð½Ð° оÑнове ÑекÑÑей локали на ÑÑоÑоне клиенÑа (в ÑиÑÑÐµÐ¼Ð°Ñ Unix ÑÑо пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑиÑÑемного окÑÑжениÑLC_CTYPE).optionsÐадаÑÑ Ð¿Ð°ÑамеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки, коÑоÑÑе бÑдÑÑ Ð¾ÑпÑÐ°Ð²Ð»ÐµÐ½Ñ ÑеÑвеÑÑ Ð¿Ñи ÑÑÑановлении ÑоединениÑ. ÐапÑимеÑ, знаÑение
-c geqo=offÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа ÑеанÑаgeqoзнаÑениеoff. ÐÑÐ¾Ð±ÐµÐ»Ñ Ð² ÑÑой ÑÑÑоке ÑÑиÑаÑÑÑÑ ÑазделÑÑÑими аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки, еÑли ÑолÑко пеÑед ними не ÑÑÐ¾Ð¸Ñ Ð¾Ð±ÑаÑÐ½Ð°Ñ ÐºÐ¾ÑÐ°Ñ ÑеÑÑа (\); ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿Ð¸ÑаÑÑ ÑобÑÑвенно обÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ, ÐµÑ Ð½Ñжно пÑодÑблиÑоваÑÑ (\\). ÐодÑобное опиÑание возможнÑÑ Ð¿Ð°ÑамеÑÑов можно найÑи в Ðлаве 18.application_nameУÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение Ð´Ð»Ñ ÐºÐ¾Ð½ÑигÑÑаÑионного паÑамеÑÑа application_name.
fallback_application_nameУÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð°Ð»ÑÑеÑнаÑивное знаÑение Ð´Ð»Ñ ÐºÐ¾Ð½ÑигÑÑаÑионного паÑамеÑÑа application_name. ÐÑо знаÑение бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ, еÑли Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа
application_nameне бÑло пеÑедано никакого знаÑÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿Ð°ÑамеÑÑов подклÑÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ пеÑеменной ÑиÑÑемного окÑÑжениÑPGAPPNAME. Ðадание алÑÑеÑнаÑивного имени полезно Ð´Ð»Ñ ÑнивеÑÑалÑнÑÑ Ð¿ÑогÑамм-ÑÑилиÑ, коÑоÑÑе желаÑÑ ÑÑÑановиÑÑ Ð¸Ð¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, но позволÑÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑ ÐµÐ³Ð¾.keepalivesУпÑавлÑÐµÑ Ð¸ÑполÑзованием ÑообÑений keepalive пÑоÑокола TCP на ÑÑоÑоне клиенÑа. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ Ñавно 1, ÑÑо ознаÑÐ°ÐµÑ Ð¸ÑполÑзование ÑообÑений. ÐÑ Ð¼Ð¾Ð¶ÐµÑе измениÑÑ ÐµÐ³Ð¾ на 0, еÑли ÑÑи ÑообÑÐµÐ½Ð¸Ñ Ð½Ðµ нÑжнÑ. ÐÐ»Ñ Ñоединений, ÑÑÑановленнÑÑ ÑеÑез Unix-ÑокеÑÑ, ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ.
keepalives_idleУпÑавлÑÐµÑ Ð´Ð»Ð¸ÑелÑноÑÑÑÑ Ð¿ÐµÑиода оÑÑÑÑÑÑÐ²Ð¸Ñ Ð°ÐºÑивноÑÑи, вÑÑаженного ÑиÑлом ÑекÑнд, по иÑÑеÑении коÑоÑого TCP должен оÑпÑавиÑÑ ÑообÑение keepalive ÑеÑвеÑÑ. ÐÑи знаÑении 0 дейÑÑвÑÐµÑ ÑиÑÑÐµÐ¼Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñина. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ Ð´Ð»Ñ Ñоединений, ÑÑÑановленнÑÑ ÑеÑез Unix-ÑокеÑÑ, или еÑли ÑообÑÐµÐ½Ð¸Ñ keepalive оÑклÑÑенÑ. Ðн поддеÑживаеÑÑÑ ÑолÑко в ÑиÑÑÐµÐ¼Ð°Ñ , воÑпÑинимаÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑ ÑокеÑа
TCP_KEEPIDLEили ÑавнознаÑнÑй, и в Windows; в дÑÑÐ³Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ Ð¾Ð½ не оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸ÑниÑ.keepalives_intervalÐадаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑекÑнд, по пÑоÑеÑÑвии коÑоÑÑÑ ÑообÑение keepalive пÑоÑокола TCP, полÑÑение коÑоÑого не подÑвеÑждено ÑеÑвеÑом, должно бÑÑÑ Ð¾ÑпÑавлено повÑоÑно. ÐÑи знаÑении 0 дейÑÑвÑÐµÑ ÑиÑÑÐµÐ¼Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñина. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ Ð´Ð»Ñ Ñоединений, ÑÑÑановленнÑÑ ÑеÑез Unix-ÑокеÑÑ, или еÑли ÑообÑÐµÐ½Ð¸Ñ keepalive оÑклÑÑенÑ. Ðн поддеÑживаеÑÑÑ ÑолÑко в ÑиÑÑÐµÐ¼Ð°Ñ , воÑпÑинимаÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑ ÑокеÑа
TCP_KEEPINTVLили ÑавнознаÑнÑй, и в Windows; в дÑÑÐ³Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ Ð¾Ð½ не оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸ÑниÑ.keepalives_countÐадаÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑообÑений keepalive пÑоÑокола TCP, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð¿Ð¾ÑеÑÑнÑ, пÑежде Ñем Ñоединение клиенÑа Ñ ÑеÑвеÑом бÑÐ´ÐµÑ Ð¿Ñизнано неÑабоÑаÑÑим. ÐÑлевое знаÑение ÑÑого паÑамеÑÑа ÑказÑваеÑ, ÑÑо бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑиÑÑемное знаÑение по ÑмолÑаниÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ Ð´Ð»Ñ Ñоединений, ÑÑÑановленнÑÑ ÑеÑез Unix-ÑокеÑÑ, или еÑли ÑообÑÐµÐ½Ð¸Ñ keepalive оÑклÑÑенÑ. Ðн поддеÑживаеÑÑÑ ÑолÑко в ÑиÑÑÐµÐ¼Ð°Ñ , воÑпÑинимаÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑ ÑокеÑа
TCP_KEEPCNTили ÑавнознаÑнÑй; в дÑÑÐ³Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ Ð¾Ð½ не оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸ÑниÑ.ttyÐгноÑиÑÑеÑÑÑ (пÑежде он ÑказÑвал, кÑда напÑавиÑÑ Ð²Ñвод оÑладоÑнÑÑ ÑообÑений ÑеÑвеÑа).
sslmodeÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑоглаÑовÑваÑÑÑÑ Ñ ÑеÑвеÑом заÑиÑÑнное SSL-Ñоединение по пÑоÑÐ¾ÐºÐ¾Ð»Ñ TCP/IP, и еÑли да, Ñо в какой оÑеÑедноÑÑи. ÐÑего пÑедÑÑмоÑÑено ÑеÑÑÑ Ñежимов:
disableÑледÑÐµÑ Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко Ñоединение без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SSL
allowÑнаÑала ÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ Ñоединение без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SSL; еÑли попÑÑка бÑÐ´ÐµÑ Ð½ÐµÑдаÑной, нÑжно попÑÑаÑÑÑÑ ÑÑÑановиÑÑ SSL-Ñоединение
prefer(по ÑмолÑаниÑ)ÑнаÑала ÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ SSL-Ñоединение; еÑли попÑÑка бÑÐ´ÐµÑ Ð½ÐµÑдаÑной, нÑжно попÑÑаÑÑÑÑ ÑÑÑановиÑÑ Ñоединение без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SSL
requireÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко SSL-Ñоединение. ÐÑли пÑиÑÑÑÑÑвÑÐµÑ Ñайл коÑневого ÑенÑÑа ÑеÑÑиÑикаÑии, Ñо нÑжно веÑиÑиÑиÑоваÑÑ ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ñаким же ÑпоÑобом, как бÑдÑо бÑл Ñказан паÑамеÑÑ
verify-caverify-caÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко SSL-Ñоединение, пÑи ÑÑом пÑоконÑÑолиÑоваÑÑ, ÑÑÐ¾Ð±Ñ ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÑеÑвеÑа бÑл вÑпÑÑен довеÑеннÑм ÑенÑÑом ÑеÑÑиÑикаÑии (CA)
verify-fullÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко SSL-Ñоединение, пÑи ÑÑом пÑоконÑÑолиÑоваÑÑ, ÑÑÐ¾Ð±Ñ ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÑеÑвеÑа бÑл вÑпÑÑен довеÑеннÑм ÑенÑÑом ÑеÑÑиÑикаÑии (CA) и ÑÑÐ¾Ð±Ñ Ð¸Ð¼Ñ Ð·Ð°Ð¿ÑоÑенного ÑеÑвеÑа ÑооÑвеÑÑÑвовало имени в ÑеÑÑиÑикаÑе
РРазделе 30.18 пÑиведено подÑобное опиÑание ÑабоÑÑ ÑÑÐ¸Ñ Ñежимов.
sslmodeигноÑиÑÑеÑÑÑ Ð¿Ñи иÑполÑзовании Unix-ÑокеÑов. ÐÑли Postgres Pro ÑкомпилиÑован без поддеÑжки SSL, иÑполÑзование паÑамеÑÑовrequire,verify-caилиverify-fullпÑиведÑÑ Ðº оÑибке, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº паÑамеÑÑÑallowиpreferбÑдÑÑ Ð¿ÑинÑÑÑ, но libpq в дейÑÑвиÑелÑноÑÑи не бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ SSL-Ñоединение.requiresslÐÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ ÑекомендÑеÑÑÑ, в каÑеÑÑве Ð·Ð°Ð¼ÐµÐ½Ñ Ð¿ÑедлагаеÑÑÑ ÑÑÑановиÑÑ
sslmode.ÐÑли ÑÑÑановлено знаÑение 1, Ñо ÑÑебÑеÑÑÑ SSL-Ñоединение Ñ ÑеÑвеÑом (ÑÑо ÑквиваленÑно
sslmoderequire). libpq в Ñаком ÑлÑÑае оÑкажеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑÑÑ, еÑли ÑеÑÐ²ÐµÑ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ SSL-Ñоединений. ÐÑли ÑÑÑановлено знаÑение 0 (по ÑмолÑаниÑ), Ñогда libpq бÑÐ´ÐµÑ ÑоглаÑовÑваÑÑ Ñип подклÑÑÐµÐ½Ð¸Ñ Ñ ÑеÑвеÑом (ÑквиваленÑноsslmodeprefer). ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾ÑÑÑпен, еÑли ÑолÑко Postgres Pro ÑкомпилиÑован Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой SSL.sslcompressionÐÑли ÑÑÑановлено знаÑение 1 (по ÑмолÑаниÑ), даннÑе, пеÑеÑÑлаемÑе ÑеÑез SSL-ÑоединениÑ, бÑдÑÑ ÑжимаÑÑÑÑ (ÑÑо ÑÑебÑÐµÑ OpenSSL веÑÑии 0.9.8 или более поздней). ÐÑли ÑÑÑановлено знаÑение 0, ÑжаÑие бÑÐ´ÐµÑ Ð¾ÑклÑÑено (ÑÑо ÑÑебÑÐµÑ OpenSSL веÑÑии 1.0.0 или более поздней). ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ, еÑли вÑполнено подклÑÑение без SSL, или еÑли иÑполÑзÑÐµÐ¼Ð°Ñ Ð²ÐµÑÑÐ¸Ñ OpenSSL не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾.
СжаÑие ÑÑебÑÐµÑ Ð¿ÑоÑеÑÑоÑного вÑемени, но Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑÑиÑÑ Ð¿ÑопÑÑкнÑÑ ÑпоÑобноÑÑÑ, еÑли Ñзким меÑÑом ÑвлÑеÑÑÑ ÑеÑÑ. ÐÑклÑÑение ÑжаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð¾Ñклика и пÑопÑÑкнÑÑ ÑпоÑобноÑÑÑ, еÑли огÑаниÑиваÑÑим ÑакÑоÑом ÑвлÑеÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ CPU.
sslcertÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑедпиÑÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ñайла Ð´Ð»Ñ SSL-ÑеÑÑиÑикаÑа клиенÑа, заменÑÑÑего Ñайл по ÑмолÑаниÑ
~/.postgresql/postgresql.crt. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ, еÑли SSL-подклÑÑение не вÑполнено.sslkeyÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑедпиÑÑÐ²Ð°ÐµÑ Ð¼ÐµÑÑоположение ÑекÑеÑного клÑÑа, иÑполÑзÑемого Ð´Ð»Ñ ÑеÑÑиÑикаÑа клиенÑа. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸Ð±Ð¾ ÑказÑваÑÑ Ð¸Ð¼Ñ Ñайла, коÑоÑое бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²Ð¼ÐµÑÑо имени по ÑмолÑаниÑ
~/.postgresql/postgresql.key, либо он Ð¼Ð¾Ð¶ÐµÑ ÑказÑваÑÑ ÐºÐ»ÑÑ, полÑÑеннÑй Ð¾Ñ Ð²Ð½ÐµÑнего «кÑипÑомодÑлÑ» (кÑипÑомодÑли â ÑÑо загÑÑжаемÑе модÑли OpenSSL). СпеÑиÑикаÑÐ¸Ñ Ð²Ð½ÐµÑнего кÑипÑомодÑÐ»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑоÑÑоÑÑÑ Ð¸Ð· имени модÑÐ»Ñ Ð¸ клÑÑевого иденÑиÑикаÑоÑа, завиÑÑÑего Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного модÑлÑ, ÑазделÑннÑÑ Ð´Ð²Ð¾ÐµÑоÑием. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ, еÑли SSL-подклÑÑение не вÑполнено.sslrootcertÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ñайла, ÑодеÑжаÑего SSL-ÑеÑÑиÑикаÑÑ, вÑданнÑе ЦенÑÑом ÑеÑÑиÑикаÑии (CA). ÐÑли Ñайл ÑÑÑеÑÑвÑеÑ, ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÑеÑвеÑа бÑÐ´ÐµÑ Ð¿ÑовеÑен на пÑÐµÐ´Ð¼ÐµÑ ÐµÐ³Ð¾ подпиÑÐ°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¸Ð¼ из ÑÑÐ¸Ñ ÑенÑÑов. ÐÐ¼Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ â
~/.postgresql/root.crt.sslcrlÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ñайла, ÑодеÑжаÑего ÑпиÑок оÑозваннÑÑ SSL-ÑеÑÑиÑикаÑов (CRL). СеÑÑиÑикаÑÑ, пеÑеÑиÑленнÑе в ÑÑом Ñайле, еÑли он ÑÑÑеÑÑвÑеÑ, бÑдÑÑ Ð¾ÑвеÑгаÑÑÑÑ Ð¿Ñи попÑÑке ÑÑÑановиÑÑ Ð¿Ð¾Ð´Ð»Ð¸Ð½Ð½Ð¾ÑÑÑ ÑеÑÑиÑикаÑа ÑеÑвеÑа. ÐÐ¼Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ñакое
~/.postgresql/root.crl.requirepeerÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, пÑедназнаÑенное Ð´Ð»Ñ ÑеÑвеÑа, напÑимеÑ,
requirepeer=postgres. ÐÑи Ñоздании подклÑÑÐµÐ½Ð¸Ñ ÑеÑез Unix-ÑокеÑ, еÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑÑÑановлен, ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿ÑовеÑÑÐµÑ Ð² Ñамом наÑале пÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, ÑÑо ÑеÑвеÑнÑй пÑоÑеÑÑ Ð·Ð°Ð¿ÑÑен Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ñказанного полÑзоваÑелÑ; еÑли ÑÑо не Ñак, Ñоединение аваÑийно пÑеÑÑваеÑÑÑ Ñ Ð¾Ñибкой. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ ÑеÑвеÑа, подобнÑÑ Ñой, коÑоÑÐ°Ñ Ð´Ð¾ÑÑÑпна Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SSL-ÑеÑÑиÑикаÑов пÑи ÑоединениÑÑ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ TCP/IP. (ÐамеÑÑÑе, ÑÑо еÑли Unix-ÑÐ¾ÐºÐµÑ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² каÑалоге/tmpили в дÑÑгом каÑалоге, запиÑÑ Ð² коÑоÑÑй ÑазÑеÑена вÑем полÑзоваÑелÑм, Ñогда лÑбой полÑзоваÑÐµÐ»Ñ ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ ÑеÑвеÑ, пÑоÑлÑÑиваÑÑий ÑÐ¾ÐºÐµÑ Ð² Ñом каÑалоге. ÐÑполÑзÑйÑе ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, ÑÑÐ¾Ð±Ñ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо Ð²Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ñ Ðº ÑеÑвеÑÑ, запÑÑÐµÐ½Ð½Ð¾Ð¼Ñ Ð´Ð¾Ð²ÐµÑеннÑм полÑзоваÑелем.) Ðн поддеÑживаеÑÑÑ ÑолÑко на плаÑÑоÑÐ¼Ð°Ñ , Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ñеализован меÑод аÑÑенÑиÑикаÑииpeer; Ñм. ÐодÑаздел 19.3.6.krbsrvnameÐÐ¼Ñ ÑеÑвиÑа Kerberos, пÑедназнаÑенное Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñи аÑÑенÑиÑикаÑии на оÑнове GSSAPI. Ðно должно ÑооÑвеÑÑÑвоваÑÑ Ð¸Ð¼ÐµÐ½Ð¸ ÑеÑвиÑа, ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ Ð² конÑигÑÑаÑии ÑеÑвеÑа, ÑÑÐ¾Ð±Ñ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ð½Ð° оÑнове Kerberos пÑоÑла ÑÑпеÑно. (См. Ñакже ÐодÑаздел 19.3.3.)
gsslibÐиблиоÑека GSS, пÑедназнаÑÐµÐ½Ð½Ð°Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñи аÑÑенÑиÑикаÑии на оÑнове GSSAPI. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑо дейÑÑвÑÐµÑ ÑолÑко в ÑбоÑÐºÐ°Ñ Ð´Ð»Ñ Windows, поддеÑживаÑÑÐ¸Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменно и GSSAPI, и SSPI. ÐнаÑение
gssapiв ÑÐ°ÐºÐ¸Ñ ÑбоÑÐºÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑказаÑÑ, ÑÑо libpq должна иÑполÑзоваÑÑ Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии библиоÑÐµÐºÑ GSSAPI, а не подÑазÑмеваемÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ SSPI.serviceÐÐ¼Ñ ÑеÑвиÑа, иÑполÑзÑемое Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¿Ð°ÑамеÑÑов. Ðно ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ ÑеÑвиÑа в Ñайле
pg_service.conf, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. ÐÑо позволÑÐµÑ Ð¿ÑиложениÑм ÑказÑваÑÑ ÑолÑко Ð¸Ð¼Ñ ÑеÑвиÑа, поÑколÑÐºÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ ÑенÑÑализованно. См. Раздел 30.16.