33.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).ÐлÑÑевÑе Ñлова-паÑамеÑÑÑ, ÑаÑпознаваемÑе в наÑÑоÑÑее вÑемÑ, пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² ÐодÑазделе 33.1.2.
ÐеÑедаваемÑе маÑÑÐ¸Ð²Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÑÑÑÑми (в ÑÑом ÑлÑÑае бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²Ñе паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ) или ÑодеÑжаÑÑ Ð¾Ð´Ð½Ð¾ или неÑколÑко имÑн/знаÑений паÑамеÑÑов. ÐÑи ÑÑом они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ð¹ длинÑ. ÐÑоÑмоÑÑ Ð¼Ð°ÑÑивов завеÑÑаеÑÑÑ, как ÑолÑко в маÑÑиве
keywordsвÑÑÑеÑаеÑÑÑNULL. ÐÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¼Ð°ÑÑиваvalues, ÑооÑвеÑÑÑвÑÑÑий оÑлиÑÐ½Ð¾Ð¼Ñ Ð¾ÑNULLÑлеменÑÑkeywords, ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÑÑÑÑ ÑÑÑÐ¾ÐºÑ Ð¸Ð»Ð¸ NULL, Ñакой паÑамеÑÑ Ð¿ÑопÑÑкаеÑÑÑ Ð¸ пÑоÑмаÑÑиваеÑÑÑ ÑледÑÑÑÐ°Ñ Ð¿Ð°Ñа ÑлеменÑов маÑÑива.Ðогда
expand_dbnameÐ¸Ð¼ÐµÐµÑ Ð½ÐµÐ½Ñлевое знаÑение, пеÑвÑй паÑамеÑÑdbnameÐ¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑÑÑÐ¾ÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. Ð ÑÑом ÑлÑÑае она «ÑазвоÑаÑиваеÑÑÑ» в оÑделÑнÑе паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, извлеÑÑннÑе из ÑÑой ÑÑÑоки. ÐнаÑение ÑÑиÑаеÑÑÑ ÑÑÑокой подклÑÑениÑ, а не пÑоÑÑо именем Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , еÑли оно ÑодеÑÐ¶Ð¸Ñ Ð·Ð½Ð°Ðº Ñавно (=) или наÑинаеÑÑÑ Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑ ÐµÐ¼Ñ URI. (ÐодÑобнее ÑоÑмаÑÑ ÑÑÑок подклÑÑÐµÐ½Ð¸Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² ÐодÑазделе 33.1.1.) Таким ÑпоÑобом обÑабаÑÑваеÑÑÑ ÑолÑко пеÑвое Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµdbname, ÑледÑÑÑие паÑамеÑÑÑdbnameбÑдÑÑ Ð²Ð¾ÑпÑинимаÑÑÑÑ ÐºÐ°Ðº пÑоÑÑо Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .Ðак пÑавило, маÑÑÐ¸Ð²Ñ Ð¿Ð°ÑамеÑÑов обÑабаÑÑваÑÑÑÑ Ð¾Ñ Ð½Ð°Ñала к конÑÑ. ÐÑли какой-либо паÑамеÑÑ ÑказÑваеÑÑÑ Ð½ÐµÐ¾Ð´Ð½Ð¾ÐºÑаÑно, иÑполÑзоваÑÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ñледнее знаÑение (оÑлиÑное оÑ
NULLи непÑÑÑое). ÐÑо ÑпÑаведливо, в ÑаÑÑноÑÑи, и Ñогда, когда клÑÑевое Ñлово, заданное в ÑÑÑоке подклÑÑениÑ, конÑликÑÑÐµÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñм в маÑÑивеkeywords. Таким обÑазом, пÑогÑаммиÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ ÑÐ²Ð¾ÐµÐ¼Ñ ÑÑмоÑÑÐµÐ½Ð¸Ñ ÑеÑиÑÑ, бÑдÑÑ Ð»Ð¸ знаÑÐµÐ½Ð¸Ñ Ð² маÑÑиве пеÑеопÑеделÑÑÑ Ð·Ð½Ð°ÑениÑ, заданнÑми в ÑÑÑоке подклÑÑениÑ, или пеÑеопÑеделÑÑÑÑÑ Ð¸Ð¼Ð¸. ÐлеменÑÑ Ð¼Ð°ÑÑива, пÑедÑеÑÑвÑÑÑие ÑазвÑÑнÑÑÐ¾Ð¼Ñ Ð·Ð½Ð°ÑениÑdbname, могÑÑ Ð±ÑÑÑ Ð¿ÐµÑеопÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð·Ð½Ð°ÑениÑми в ÑÑÑоке подклÑÑениÑ, коÑоÑÑе в ÑÐ²Ð¾Ñ Ð¾ÑеÑÐµÐ´Ñ Ð¿ÐµÑеопÑеделÑÑÑÑÑ ÑлеменÑами маÑÑива, ÑледÑÑÑими поÑлеdbname(и в ÑÑом ÑлÑÑае ÑеÑÑ Ð¸Ð´ÑÑ Ð¾ непÑÑÑÑÑ Ð·Ð½Ð°ÑениÑÑ ).ÐоÑле ÑазбоÑа вÑÐµÑ ÑлеменÑов маÑÑива и ÑазвÑÑнÑÑой ÑÑÑоки подклÑÑÐµÐ½Ð¸Ñ (еÑли она задана), паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, коÑоÑÑе оÑÑалиÑÑ Ð½ÐµÐ·Ð°Ð´Ð°Ð½Ð½Ñми, полÑÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐÑли Ð½ÐµÐ·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¿Ð°ÑамеÑÑÑ ÑооÑвеÑÑÑвÑÐµÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ (Ñм. Раздел 33.15), бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÐµÑ Ð·Ð½Ð°Ñение. ÐÑли ÑÐ°ÐºÐ°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð½Ðµ задана, Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑа бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²ÑÑÑоенное знаÑение по ÑмолÑаниÑ.
PQconnectdb#СоздаÑÑ Ð½Ð¾Ð²Ð¾Ðµ подклÑÑение к ÑеÑвеÑÑ Ð±Ð°Ð· даннÑÑ .
PGconn *PQconnectdb(const char *conninfo);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¾ÑкÑÑÐ²Ð°ÐµÑ Ð½Ð¾Ð²Ð¾Ðµ Ñоединение Ñ Ð±Ð°Ð·Ð¾Ð¹ даннÑÑ , иÑполÑзÑÑ Ð¿Ð°ÑамеÑÑÑ, полÑÑеннÑе из ÑÑÑоки
conninfo.ÐеÑÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ ÑÑÑока Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑÑÑой. Ð ÑÑом ÑлÑÑае иÑполÑзÑÑÑÑÑ Ð²Ñе паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. Ðна Ñакже Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð´Ð½Ð¾ или более знаÑений паÑамеÑÑов, ÑазделÑннÑÑ Ð¿Ñобелами, или URI. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 33.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.pgttyболÑÑе не иÑполÑзÑеÑÑÑ, и лÑбое пеÑеданное знаÑение бÑÐ´ÐµÑ Ð¿ÑоигноÑиÑовано.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должен иÑполÑзоваÑÑÑÑ Ñак, ÑÑÐ¾Ð±Ñ Ð´Ð»Ñ ÑазÑеÑÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ имени не ÑÑебовалоÑÑ Ð²ÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ DNS. ÐодÑобнее ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿Ð¸Ñан в ÐодÑазделе 33.1.2.ÐÑли Ð²Ñ Ð²ÑзÑваеÑе
PQtrace, ÑделайÑе Ñак, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ñок, в коÑоÑÑй вÑводиÑÑÑ ÑÑаÑÑиÑовоÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ, не заблокиÑовалÑÑ.ÐеÑед вÑзовом
PQconnectPollÐ²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÐµÑевеÑÑи ÑÐ¾ÐºÐµÑ Ð² ÑооÑвеÑÑÑвÑÑÑее ÑоÑÑоÑние, как опиÑано ниже.
ЧÑÐ¾Ð±Ñ Ð½Ð°ÑаÑÑ Ð½ÐµÐ±Ð»Ð¾ÐºÐ¸ÑÑÑÑий запÑÐ¾Ñ Ð½Ð° подклÑÑение, вÑзовиÑе
PQconnectStartилиPQconnectStartParams. ÐÑли ÑезÑлÑÑаÑом бÑÐ´ÐµÑ null, знаÑÐ¸Ñ libpq не Ñмогла вÑделиÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ ÑÑÑÑкÑÑÑÑPGconn. РпÑоÑивном ÑлÑÑае возвÑаÑаеÑÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑнÑй ÑказаÑелÑPGconn(Ñ Ð¾ÑÑ Ð¾Ð½ еÑÑ Ð½Ðµ пÑедÑÑавлÑÐµÑ ÑÑÑановленное подклÑÑение к базе даннÑÑ ). ÐаÑем вÑзовиÑеPQstatus(conn). ÐÑли ÑезÑлÑÑаÑом бÑдеÑCONNECTION_BAD, знаÑÐ¸Ñ Ð¿Ð¾Ð¿ÑÑка подклÑÑÐµÐ½Ð¸Ñ Ñже не бÑÐ´ÐµÑ ÑÑпеÑной, возможно, из-за невеÑнÑÑ Ð¿Ð°ÑамеÑÑов.ÐÑли вÑзов
PQconnectStartилиPQconnectStartParamsоказалÑÑ ÑÑпеÑнÑм, ÑепеÑÑ Ð½Ñжно опÑоÑиÑÑ libpq Ð´Ð»Ñ Ð¿ÑÐ¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. ÐÑзовиÑеPQsocket(conn)Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð´ÐµÑкÑипÑоÑа нижележаÑего ÑокеÑа, ÑеÑез коÑоÑÑй ÑÑÑанавливаеÑÑÑ Ñоединение. (Ðнимание: ÑÑÐ¾Ñ ÑÐ¾ÐºÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¼ÐµÐ½ÑÑÑÑÑ Ð¾Ñ Ð²Ñзова к вÑзовÑPQconnectPoll.) ÐÑганизÑйÑе Ñикл Ñаким обÑазом: еÑлиPQconnectPoll(conn)пÑи поÑледнем вÑзове возвÑаÑаеÑPGRES_POLLING_READING, ожидайÑе, пока ÑÐ¾ÐºÐµÑ Ð½Ðµ окажеÑÑÑ Ð³Ð¾ÑовÑм Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ (ÑÑо Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ ÑÑнкÑиÑselect(),poll()или Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ ÑиÑÑÐµÐ¼Ð½Ð°Ñ ÑÑнкÑиÑ). ÐаÑем Ñнова вÑзовиÑеPQconnectPoll(conn). ÐÑли жеPQconnectPoll(conn)пÑи поÑледнем вÑзове возвÑаÑилаPGRES_POLLING_WRITING, дождиÑеÑÑ Ð³Ð¾ÑовноÑÑи ÑокеÑа к запиÑи, а заÑем Ñнова вÑзовиÑеPQconnectPoll(conn). Ðа пеÑвой иÑеÑаÑии, Ñо еÑÑÑ ÐºÐ¾Ð³Ð´Ð° Ð²Ñ ÐµÑÑ Ð½Ðµ вÑзÑвалиPQconnectPoll, ÑеализÑйÑе Ñо же поведение, ÑÑо и поÑле полÑÑениÑ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#СоглаÑование знаÑений паÑамеÑÑов, завиÑÑÑÐ¸Ñ Ð¾Ñ Ð¿ÑогÑаммной ÑÑедÑ.
CONNECTION_CHECK_WRITABLE#ÐÑовеÑка, можно ли ÑеÑез подклÑÑение вÑполнÑÑÑ Ð¿Ð¸ÑÑÑие ÑÑанзакÑии.
CONNECTION_CONSUME#ÐÑоÑÑение вÑÐµÑ Ð¾ÑÑавÑÐ¸Ñ ÑÑ Ð¾ÑвеÑнÑÑ ÑообÑений ÑеÑез подклÑÑение.
ÐамеÑÑÑе, ÑÑо, Ñ Ð¾ÑÑ ÑÑи конÑÑанÑÑ Ð¸ ÑÐ¾Ñ ÑанÑÑÑÑ (Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶Ð°Ð½Ð¸Ñ ÑовмеÑÑимоÑÑи), пÑиложение никогда не должно полагаÑÑÑÑ Ð½Ð° Ñо, ÑÑо они поÑвÑÑÑÑ Ð² каком-Ñо конкÑеÑном поÑÑдке или вообÑе поÑвÑÑÑÑ, а Ñакже на Ñо, ÑÑо ÑоÑÑоÑние вÑегда пÑÐ¸Ð¼ÐµÑ Ð¾Ð´Ð½Ð¾ из ÑÑÐ¸Ñ Ð´Ð¾ÐºÑменÑиÑованнÑÑ Ð·Ð½Ð°Ñений. ÐÑиложение Ð¼Ð¾Ð¶ÐµÑ ÑделаÑÑ ÑÑо-Ñо наподобие:
switch(PQstatus(conn)) { case CONNECTION_STARTED: feedback = "ÐодклÑÑение..."; break; case CONNECTION_MADE: feedback = "ÐодклÑÑÑн к ÑеÑвеÑÑ..."; break; . . . default: feedback = "ÐодклÑÑение..."; }ÐаÑамеÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ
connect_timeoutигноÑиÑÑеÑÑÑ, когда иÑполÑзÑеÑÑÑPQconnectPoll; именно пÑиложение оÑвеÑÐ°ÐµÑ Ð·Ð° пÑинÑÑие ÑеÑÐµÐ½Ð¸Ñ Ð¾ Ñом, ÑвлÑеÑÑÑ Ð»Ð¸ иÑÑекÑее вÑÐµÐ¼Ñ ÑÑезмеÑнÑм. РпÑоÑивном ÑлÑÑае вÑзовPQconnectStartÑ Ð¿Ð¾ÑледÑÑÑим вÑзовомPQconnectPollв Ñикле бÑдÑÑ ÑквиваленÑÐ½Ñ Ð²ÑзовÑPQconnectdb.ÐамеÑÑÑе, ÑÑо когда ÑÑнкÑиÑ
PQconnectStartилиPQconnectStartParamsвозвÑаÑÐ°ÐµÑ Ð½ÐµÐ½Ñлевой ÑказаÑелÑ, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑзваÑÑ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пÑи обÑÑном ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑоединениÑ.PQpingParams#PQpingParamsÑообÑÐ°ÐµÑ ÑоÑÑоÑние ÑеÑвеÑа. Ðна пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, иденÑиÑнÑе Ñем, ÑÑо полÑÑÐ°ÐµÑ ÑÑнкÑиÑPQconnectdbParams, опиÑÐ°Ð½Ð½Ð°Ñ Ð²ÑÑе. ÐÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи пÑедоÑÑавлÑÑÑ ÐºÐ¾ÑÑекÑнÑе Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, паÑÐ¾Ð»Ñ Ð¸Ð»Ð¸ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑоÑÑоÑние ÑеÑвеÑа. Ðо еÑли бÑдÑÑ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑÑекÑнÑе знаÑениÑ, ÑеÑÐ²ÐµÑ Ð·Ð°ÑикÑиÑÑÐµÑ Ð² жÑÑнале неÑдаÑнÑÑ Ð¿Ð¾Ð¿ÑÑÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ.PGPing PQpingParams(const char * const *keywords, const char * const *values, int expand_dbname);ФÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¾Ð´Ð½Ð¾ из ÑледÑÑÑÐ¸Ñ Ð·Ð½Ð°Ñений:
PQPING_OK#СеÑÐ²ÐµÑ ÑабоÑÐ°ÐµÑ Ð¸, по-видимомÑ, пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ.
PQPING_REJECT#СеÑÐ²ÐµÑ ÑабоÑаеÑ, но Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² ÑоÑÑоÑнии, коÑоÑое запÑеÑÐ°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ (запÑÑк, завеÑÑение ÑабоÑÑ Ð¸Ð»Ð¸ воÑÑÑановление поÑле аваÑийного оÑказа).
PQPING_NO_RESPONSE#ÐонÑÐ°ÐºÑ Ñ ÑеÑвеÑом не ÑдалÑÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ ÑказÑваÑÑ Ð½Ð° Ñо, ÑÑо ÑеÑÐ²ÐµÑ Ð½Ðµ запÑÑен или ÑÑо-Ñо не в поÑÑдке Ñ Ð¿Ð°ÑамеÑÑами данного подклÑÑÐµÐ½Ð¸Ñ (напÑимеÑ, невеÑнÑй Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа), или Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÑо пÑоблема Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑеÑи (напÑимеÑ, бÑандмаÑÑÑ Ð±Ð»Ð¾ÐºÐ¸ÑÑÐµÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° подклÑÑение).
PQPING_NO_ATTEMPT#Ðикакой попÑÑки ÑÑÑановиÑÑ ÐºÐ¾Ð½ÑÐ°ÐºÑ Ñ ÑеÑвеÑом Ñделано не бÑло, поÑколÑÐºÑ Ð¿ÑедоÑÑавленнÑе паÑамеÑÑÑ Ð±Ñли Ñвно некоÑÑекÑнÑми, или имела меÑÑо какаÑ-Ñо пÑоблема на ÑÑоÑоне клиенÑа (напÑимеÑ, Ð½ÐµÑ Ð²Ð°Ñка памÑÑи).
PQping#PQpingÑообÑÐ°ÐµÑ ÑоÑÑоÑние ÑеÑвеÑа. Ðна пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, иденÑиÑнÑе Ñем, ÑÑо полÑÑÐ°ÐµÑ ÑÑнкÑиÑPQconnectdb, опиÑÐ°Ð½Ð½Ð°Ñ Ð²ÑÑе. ÐÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи пÑедоÑÑавлÑÑÑ ÐºÐ¾ÑÑекÑнÑе Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, паÑÐ¾Ð»Ñ Ð¸Ð»Ð¸ Ð¸Ð¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑоÑÑоÑние ÑеÑвеÑа. Ðо еÑли бÑдÑÑ Ð¿ÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑÑекÑнÑе знаÑениÑ, ÑеÑÐ²ÐµÑ Ð·Ð°ÑикÑиÑÑÐµÑ Ð² жÑÑнале неÑдаÑнÑÑ Ð¿Ð¾Ð¿ÑÑÐºÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ.PGPing PQping(const char *conninfo);
ÐозвÑаÑаемÑе знаÑÐµÐ½Ð¸Ñ Ñакие же, как и длÑ
PQpingParams.PQsetSSLKeyPassHook_OpenSSL#PQsetSSLKeyPassHook_OpenSSLпозволÑÐµÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿ÐµÑеопÑеделиÑÑ ÑеализованнÑй вlibpqÑÑандаÑÑнÑй ваÑÐ¸Ð°Ð½Ñ Ð¾Ð±ÑабоÑки Ñайлов Ñ Ð·Ð°ÑиÑÑованнÑми клÑÑами клиенÑÑÐºÐ¸Ñ ÑеÑÑиÑикаÑов, иÑполÑзÑÑ sslpassword или инÑеÑакÑивное пÑиглаÑение.void PQsetSSLKeyPassHook_OpenSSL(PQsslKeyPassHook_OpenSSL_type hook);
ÐÑиложение пеÑедаÑÑ ÑказаÑÐµÐ»Ñ Ð½Ð° ÑÑнкÑиÑ-обÑабоÑÑик Ñо ÑледÑÑÑей ÑигнаÑÑÑой:
int callback_fn(char *buf, int size, PGconn *conn);
ÐÑÑ ÑÑнкÑиÑ
libpqбÑÐ´ÐµÑ Ð²ÑзÑваÑÑ Ð²Ð¼ÐµÑÑо Ñвоего ÑÑандаÑÑного обÑабоÑÑикаPQdefaultSSLKeyPassHook_OpenSSL. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° полÑÑиÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð´Ð»Ñ ÐºÐ»ÑÑа и ÑкопиÑоваÑÑ ÐµÐ³Ð¾ в ÑезÑлÑÑиÑÑÑÑий бÑÑеÑbufÑазмеÑаsize. СÑÑока вbufдолжна завеÑÑаÑÑÑÑ Ð½ÑлÑм. Ð ÑезÑлÑÑаÑе ÑÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° вÑдаÑÑ Ð´Ð»Ð¸Ð½Ñ Ð¿Ð°ÑолÑ, ÑÐ¾Ñ ÑанÑнного вbuf, не ÑÑиÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑаÑÑего нÑлÑ. Ð ÑлÑÑае оÑибки она должна ÑÑÑановиÑÑbuf[0] = '\0'и вÑдаÑÑ 0.ÐÑли полÑзоваÑÐµÐ»Ñ Ð·Ð°Ð´Ð°Ð» ÑазмеÑение клÑÑа Ñвно, заданнÑй пÑÑÑ Ð±ÑÐ´ÐµÑ Ð¿ÐµÑедан пÑи вÑзове ÑÑого обÑабоÑÑика в
conn->sslkey. ÐÑо поле бÑÐ´ÐµÑ Ð¿ÑÑÑÑм, еÑли иÑполÑзÑеÑÑÑ Ð¿ÑÑÑ Ðº клÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ. ЧÑо каÑаеÑÑÑ ÐºÐ»ÑÑей, ÑпеÑиÑиÑнÑÑ Ð´Ð»Ñ Ð¼Ð¾Ð´Ñлей OpenSSL, Ð´Ð»Ñ Ð½Ð¸Ñ Ð¼Ð¾Ð´Ñли могÑÑ Ð¿Ð¾ ÑÐ²Ð¾ÐµÐ¼Ñ ÑÑмоÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ ÑеÑез ÑÑандаÑÑнÑй обÑабоÑÑик OpenSSL или ÑеÑез Ñвой ÑобÑÑвеннÑй.ÐолÑзоваÑелÑÑкий обÑабоÑÑик Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿ÐµÑеопÑеделиÑÑ ÑÑнкÑиÑ
PQdefaultSSLKeyPassHook_OpenSSL, либо делегиÑоваÑÑ ÐµÐ¹ необÑабаÑÑваемÑе им ÑлÑÑаи, либо ÑнаÑала вÑзÑваÑÑ ÐµÑ Ð¸ пÑедпÑинимаÑÑ ÐºÐ°ÐºÐ¸Ðµ-Ñо дÑÑгие дейÑÑвиÑ, еÑли она возвÑаÑÐ¸Ñ 0.ÐÑÐ¾Ñ Ð¾Ð±ÑабоÑÑик не должен наÑÑÑаÑÑ Ð¾Ð±ÑÑнÑй Ñ Ð¾Ð´ вÑполнениÑ, вÑбÑаÑÑÐ²Ð°Ñ Ð¸ÑклÑÑениÑ, вÑзÑваÑ
longjmp(...)и Ñ. п. Ðн должен завеÑÑиÑÑÑÑ Ð½Ð¾ÑмалÑно.PQgetSSLKeyPassHook_OpenSSL#PQgetSSLKeyPassHook_OpenSSLвозвÑаÑÐ°ÐµÑ ÑекÑÑий обÑабоÑÑик паÑÐ¾Ð»Ñ Ð´Ð»Ñ ÐºÐ»ÑÑа клиенÑÑкого ÑеÑÑиÑикаÑа либоNULL, еÑли Ñакой обÑабоÑÑик не ÑÑÑановлен.PQsslKeyPassHook_OpenSSL_type PQgetSSLKeyPassHook_OpenSSL(void);
33.1.1. СÑÑоки паÑамеÑÑов подклÑÑÐµÐ½Ð¸Ñ #
Ð Ñд ÑÑнкÑий libpq ÑазбиÑаÑÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ Ð¿Ð¾Ð»ÑзоваÑелем ÑÑÑÐ¾ÐºÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов подклÑÑениÑ. ÐÑÑÑ Ð´Ð²Ð° пÑинÑÑÑÑ ÑоÑмаÑа ÑÑÐ¸Ñ ÑÑÑок: пÑоÑÑÐ°Ñ ÑÑÑока клÑÑ/знаÑение и URI. СÑÑоки URI в оÑновном ÑооÑвеÑÑÑвÑÑÑ RFC 3986, но могÑÑ ÑодеÑжаÑÑ Ñакже ÑÑÑоки подклÑÑÐµÐ½Ð¸Ñ Ñ Ð½ÐµÑколÑкими Ñзлами, как опиÑано ниже.
33.1.1.1. СÑÑоки паÑамеÑÑов подклÑÑÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð° «клÑÑ/знаÑение» #
СоглаÑно ÑоÑмаÑÑ ÐºÐ»ÑÑ/знаÑение, ÑÑÑановка каждого паÑамеÑÑа вÑполнÑеÑÑÑ Ð² ÑоÑме клÑÑ = знаÑение, Ñ Ð¿Ñобелами Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð°ÑамеÑÑами. ÐÑÐ¾Ð±ÐµÐ»Ñ Ð²Ð¾ÐºÑÑг знака ÑавенÑÑва не ÑвлÑÑÑÑÑ Ð¾Ð±ÑзаÑелÑнÑми. ÐÐ»Ñ Ð·Ð°Ð¿Ð¸Ñи пÑÑÑого знаÑÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ знаÑениÑ, ÑодеÑжаÑего пÑобелÑ, заклÑÑиÑе его в одинаÑнÑе кавÑÑки, напÑимеÑ, keyword = 'a value'. ÐдинаÑнÑе кавÑÑки и ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¾Ð±ÑаÑной коÑой ÑеÑÑÑ Ð²Ð½ÑÑÑи знаÑÐµÐ½Ð¸Ñ Ð½Ñжно обÑзаÑелÑно ÑкÑаниÑоваÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ñимвола обÑаÑной коÑой ÑеÑÑÑ, Ñ. е., \' и \\.
ÐÑимеÑ:
host=localhost port=5432 dbname=mydb connect_timeout=10
ÐлÑÑевÑе Ñлова-паÑамеÑÑÑ, ÑаÑпознаваемÑе в наÑÑоÑÑее вÑемÑ, пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² ÐодÑазделе 33.1.2.
33.1.1.2. URI Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ #
ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑоÑма URI подклÑÑениÑ:
postgresql://[полÑзоваÑелÑ@][ÑеÑвеÑ][/база_даннÑÑ][?Ñказание_паÑамеÑÑа] гдеполÑзоваÑелÑ:имÑ_полÑзоваÑелÑ[:паÑолÑ] иÑеÑвеÑ: [Ñзел][:поÑÑ][,...] иÑказание_паÑамеÑÑа:имÑ=знаÑение[&...]
РкаÑеÑÑве обознаÑÐµÐ½Ð¸Ñ ÑÑ
ÐµÐ¼Ñ 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 postgresql://host1:123,host2:456/somedb?target_session_attrs=any&application_name=myapp
ÐнаÑениÑ, коÑоÑÑе обÑÑно задаÑÑÑÑ Ð² иеÑаÑÑ Ð¸ÑеÑкой ÑаÑÑи URI, Ñакже можно задаÑÑ Ð² именованнÑÑ Ð¿Ð°ÑамеÑÑÐ°Ñ . ÐапÑимеÑ:
postgresql:///mydb?host=localhost&port=5433
ÐÑе именованнÑе паÑамеÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ ÐºÐ»ÑÑевÑм Ñловам, пеÑеÑиÑленнÑм в ÐодÑаздел 33.1.2, за иÑклÑÑением Ñого, ÑÑо вÑ
Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ssl=true заменÑÑÑÑÑ Ð½Ð° sslmode=require Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ URI-ÑÑÑоками JDBC.
ÐÑли URI подклÑÑÐµÐ½Ð¸Ñ ÑодеÑÐ¶Ð¸Ñ Ð² какой-либо из ÑаÑÑей ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ñо ÑпеÑиалÑнÑм знаÑением, он должен кодиÑоваÑÑÑÑ Ð² ÑоÑмаÑе Ñ Ð¿ÑоÑенÑами. ÐапÑимеÑ, Ñак вÑглÑÐ´Ð¸Ñ URI, в коÑоÑом знак Ñавно (=) заменÑн на %3D, а знак пÑобела â на %20:
postgresql://user@localhost:5433/mydb?options=-c%20synchronous_commit%3Doff
СеÑÐ²ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ пÑедÑÑавиÑÑ Ð»Ð¸Ð±Ð¾ ÑеÑевÑм именем, либо 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
Родном URI можно задаÑÑ Ð½ÐµÑколÑко компоненÑов Ñзлов, каждÑй Ñ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм Ñказанием поÑÑа. URI вида postgresql://host1:port1,host2:port2,host3:port3/ ÑавнознаÑно ÑÑÑоке подклÑÑÐµÐ½Ð¸Ñ Ð²Ð¸Ð´Ð° host=host1,host2,host3 port=port1,port2,port3. Ðак опиÑÑваеÑÑÑ Ð½Ð¸Ð¶Ðµ, ÑÑи ÑÐ·Ð»Ñ Ð±ÑдÑÑ Ð¿ÐµÑебиÑаÑÑÑÑ Ð¿Ð¾ оÑеÑеди, пока не бÑÐ´ÐµÑ ÑÑÑановлено подклÑÑение.
33.1.1.3. Указание неÑколÑÐºÐ¸Ñ Ñзлов #
Ð ÑÑÑоке подклÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ Ð½ÐµÑколÑко Ñзлов, к коÑоÑÑм ÐºÐ»Ð¸ÐµÐ½Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ð² заданном поÑÑдке. ÐаÑамеÑÑÑ host, hostaddr и port в ÑоÑмаÑе клÑÑ/знаÑение пÑинимаÑÑ ÑпиÑки знаÑений, ÑазделÑннÑÑ
запÑÑÑми. Ркаждом опÑеделÑемом паÑамеÑÑе должно ÑодеÑжаÑÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ðµ ÑиÑло ÑлеменÑов, ÑÑобÑ, напÑимеÑ, пеÑвÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ hostaddr ÑооÑвеÑÑÑвовал пеÑÐ²Ð¾Ð¼Ñ ÑлеменÑÑ host, вÑоÑой â вÑоÑÐ¾Ð¼Ñ host и Ñак далее. ÐÑклÑÑение ÑоÑÑавлÑÐµÑ port â еÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑодеÑÐ¶Ð¸Ñ ÑолÑко один ÑлеменÑ, он пÑименÑеÑÑÑ ÐºÐ¾ вÑем Ñзлам.
Ð ÑоÑмаÑе URI внÑÑÑи компоненÑа host можно ÑказаÑÑ Ð½ÐµÑколÑко Ð¿Ð°Ñ host:port, ÑазделÑннÑÑ
запÑÑÑми.
РлÑбом ÑоÑмаÑе одно Ð¸Ð¼Ñ Ñзла Ð¼Ð¾Ð¶ÐµÑ Ð¿ÐµÑеводиÑÑÑÑ Ð² неÑколÑко ÑеÑевÑÑ Ð°Ð´ÑеÑов. ÐапÑимеÑ, ÑаÑÑо бÑваеÑ, ÑÑо один Ñзел Ð¸Ð¼ÐµÐµÑ Ð¸ адÑÐµÑ IPv4, и адÑÐµÑ IPv6.
Ðогда задаÑÑÑÑ Ð½ÐµÑколÑко Ñзлов или когда одно Ð¸Ð¼Ñ Ñзла пеÑеводиÑÑÑ Ð² неÑколÑко адÑеÑов, вÑе ÑÐ·Ð»Ñ Ð¸ адÑеÑа пеÑебиÑаÑÑÑÑ Ð¿Ð¾ поÑÑдкÑ, пока подклÑÑение не бÑÐ´ÐµÑ ÑÑÑановлено. ÐÑли ни один из адÑеÑов не бÑÐ´ÐµÑ Ð´Ð¾ÑÑÑпен, пÑоизойдÑÑ Ñбой подклÑÑениÑ. ÐÑли подклÑÑение ÑÑÑанавливаеÑÑÑ ÑÑпеÑно, но пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¾Ñибка аÑÑенÑиÑикаÑии, оÑÑалÑнÑе ÑÐ·Ð»Ñ Ð² ÑпиÑке не пеÑебиÑаÑÑÑÑ.
ÐÑли иÑполÑзÑеÑÑÑ Ñайл паÑолей, в нÑм можно задаÑÑ ÑазнÑе паÑоли Ð´Ð»Ñ ÑазнÑÑ Ñзлов. ÐÑе оÑÑалÑнÑе паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми Ð´Ð»Ñ Ð²ÑÐµÑ Ñзлов; напÑимеÑ, нелÑÐ·Ñ Ð·Ð°Ð´Ð°ÑÑ Ð´Ð»Ñ ÑазнÑÑ Ñзлов ÑазлиÑнÑе имена полÑзоваÑелей.
33.1.2. ÐлÑÑевÑе Ñлова-паÑамеÑÑÑ #
ÐлÑÑевÑе Ñлова-паÑамеÑÑÑ, ÑаÑпознаваемÑе в наÑÑоÑÑее вÑемÑ, ÑледÑÑÑие:
host#ÐÐ¼Ñ Ñзла Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. ÐÑли ÑÑо Ð¸Ð¼Ñ Ð²ÑглÑÐ´Ð¸Ñ ÐºÐ°Ðº Ñказание абÑолÑÑного пÑÑи, вÑбиÑаеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение ÑеÑез Unix-ÑокеÑ, а не ÑеÑез TCP/IP, и данное знаÑение опÑеделÑÐµÑ Ð¸Ð¼Ñ ÐºÐ°Ñалога, ÑодеÑжаÑего Ñайл ÑокеÑа. (Ð Unix-ÑиÑÑÐµÐ¼Ð°Ñ Ð°Ð±ÑолÑÑнÑй пÑÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ ÐºÐ¾Ñой ÑеÑÑÑ, а в Windows абÑолÑÑнÑе пÑÑи Ñакже могÑÑ Ð½Ð°ÑинаÑÑÑÑ Ñ Ð±ÑÐºÐ²Ñ Ð´Ð¸Ñка.) ÐÑли Ð¸Ð¼Ñ Ñзла наÑинаеÑÑÑ Ñ
@, оно воÑпÑинимаеÑÑÑ ÐºÐ°Ðº Unix-ÑÐ¾ÐºÐµÑ Ð² абÑÑÑакÑном пÑоÑÑÑанÑÑве имÑн (в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ð² Linux и Windows). Ðо ÑмолÑаниÑ, еÑли паÑамеÑÑhostоÑÑÑÑÑÑвÑÐµÑ Ð¸Ð»Ð¸ пÑÑÑ, вÑполнÑеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение к Unix-ÑокеÑÑ Ð²/tmp(или в Ñом каÑалоге ÑокеÑов, коÑоÑÑй бÑл задан пÑи ÑбоÑке Postgres Pro). Ð Windows по ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑполнÑеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение кlocalhost.Также пÑинимаеÑÑÑ ÑазделÑннÑй запÑÑÑми ÑпиÑок имÑн Ñзлов; пÑи ÑÑом даннÑе имена бÑдÑÑ Ð¿ÐµÑебиÑаÑÑÑÑ Ð¿Ð¾ поÑÑдкÑ. ÐÐ»Ñ Ð¿ÑÑÑÑÑ ÑлеменÑов ÑпиÑка пÑименÑеÑÑÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ по ÑмолÑаниÑ, опиÑанное вÑÑе. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 33.1.1.3.
hostaddr#ЧиÑловой IP-адÑÐµÑ Ñзла Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. Ðн должен бÑÑÑ Ð¿ÑедÑÑавлен в ÑÑандаÑÑном ÑоÑмаÑе адÑеÑов IPv4, напÑимеÑ,
172.28.40.9. ÐÑли ваÑа маÑина поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ IPv6, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¸ адÑеÑа IPv6. ÐÑли в ÑÑом паÑамеÑÑе пеÑедана непÑÑÑÐ°Ñ ÑÑÑока, Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð²Ñегда иÑполÑзÑеÑÑÑ TCP/IP. РоÑÑÑÑÑÑвие ÑÑого паÑамеÑÑа Ñелевой IP-адÑÐµÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑен из имени, заданного в паÑамеÑÑеhost, либо еÑли вhostзадан IP-адÑеÑ, бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно он.ÐÑполÑзование
hostaddrпозволÑÐµÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±Ð¾Ð¹ÑиÑÑ Ð±ÐµÐ· ÑазÑеÑÐµÐ½Ð¸Ñ Ð¸Ð¼Ñн, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ð°Ð¶Ð½Ð¾ Ð´Ð»Ñ Ð¿Ñиложений Ñ Ð¶ÑÑÑкими вÑеменнÑми огÑаниÑениÑми. Ðднако Ð¸Ð¼Ñ Ñзла ÑÑебÑеÑÑÑ Ð´Ð»Ñ Ð¼ÐµÑодов аÑÑенÑиÑикаÑии GSSAPI или SSPI, а Ñакже Ð´Ð»Ñ Ð¿ÑовеÑки полномоÑий на оÑнове SSL-ÑеÑÑиÑикаÑов в Ñежимеverify-full. ÐÑименÑÑÑÑÑ ÑледÑÑÑие пÑавила:ÐÑли адÑеÑ
hostзадаÑÑÑÑ Ð±ÐµÐ·hostaddr, оÑÑÑеÑÑвлÑеÑÑÑ ÑазÑеÑение имени. (ÐÑи иÑполÑзованииPQconnectPollÑазÑеÑение пÑоизводиÑÑÑ, когдаPQconnectPollÑаÑÑмаÑÑÐ¸Ð²Ð°ÐµÑ ÑÑо Ð¸Ð¼Ñ Ð² пеÑвÑй Ñаз, и Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸ÑоваÑÑPQconnectPollна неопÑеделÑнное вÑемÑ.)ÐÑли Ñказан
hostaddr, аhostне Ñказан, Ñогда знаÑениеhostaddrдаÑÑ ÑеÑевой адÑÐµÑ ÑеÑвеÑа. ÐопÑÑка подклÑÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²ÐµÑÑиÑÑÑ Ð½ÐµÑдаÑей, еÑли меÑод аÑÑенÑиÑикаÑии ÑÑебÑÐµÑ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ñзла.ÐÑли ÑÐºÐ°Ð·Ð°Ð½Ñ ÐºÐ°Ðº
host, Ñак иhostaddr, Ñогда знаÑениеhostaddrдаÑÑ ÑеÑевой адÑÐµÑ ÑеÑвеÑа, а знаÑениеhostигноÑиÑÑеÑÑÑ, еÑли ÑолÑко меÑод аÑÑенÑиÑикаÑии его не поÑÑебÑеÑ. Ð Ñаком ÑлÑÑае оно бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² каÑеÑÑве имени Ñзла.
ÐамеÑÑÑе, ÑÑо аÑÑенÑиÑикаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ Ð½ÐµÑдаÑей, еÑли
hostне ÑвлÑеÑÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ ÑеÑвеÑа Ñ ÑеÑевÑм адÑеÑомhostaddr. Также замеÑÑÑе, ÑÑо когда ÑказÑваеÑÑÑ Ð¸host, иhostaddr, Ñоединение в Ñайле паÑолей иденÑиÑиÑиÑÑеÑÑÑ Ð¿Ð¾ знаÑениÑhost(Ñм. Раздел 33.16).Также пÑинимаеÑÑÑ ÑазделÑннÑй запÑÑÑми ÑпиÑок знаÑений
hostaddr, пÑи ÑÑом даннÑе ÑÐ·Ð»Ñ Ð±ÑдÑÑ Ð¿ÐµÑебиÑаÑÑÑÑ Ð¿Ð¾ поÑÑдкÑ. ÐмеÑÑо пÑÑÑого ÑлеменÑа в ÑÑом ÑпиÑке бÑÐ´ÐµÑ Ð¿Ð¾Ð´ÑÑавлено Ð¸Ð¼Ñ ÑооÑвеÑÑÑвÑÑÑего Ñзла или, еÑли и оно не опÑеделено, Ð¸Ð¼Ñ Ñзла по ÑмолÑаниÑ. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 33.1.1.3.ÐÑли не ÑÐºÐ°Ð·Ð°Ð½Ñ Ð½Ð¸ Ð¸Ð¼Ñ Ñзла, ни его адÑеÑ, libpq бÑÐ´ÐµÑ Ð¿ÑоизводиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение, иÑполÑзÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑй Unix-ÑокеÑ; в Windows она бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº
localhost.port#ÐÐ¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа, к коÑоÑÐ¾Ð¼Ñ Ð½Ñжно подклÑÑаÑÑÑÑ Ð½Ð° ÑеÑвеÑе, либо ÑаÑÑиÑение имени Ñайла ÑокеÑа Ð´Ð»Ñ Ñоединений ÑеÑез Unix-ÑокеÑÑ. ÐÑли в паÑамеÑÑаÑ
hostилиhostaddrзадано неÑколÑко ÑеÑвеÑов, в данном паÑамеÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ ÑеÑез запÑÑÑÑ ÑпиÑок поÑÑов Ñакой же длинÑ, либо Ð¼Ð¾Ð¶ÐµÑ ÑказÑваÑÑÑÑ Ð¾Ð´Ð¸Ð½ Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа Ð´Ð»Ñ Ð²ÑÐµÑ Ñзлов. ÐÑÑÑÐ°Ñ ÑÑÑока или пÑÑÑой ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² ÑпиÑке ÑеÑез запÑÑÑÑ Ð²Ð¾ÑпÑинимаеÑÑÑ ÐºÐ°Ðº Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа по ÑмолÑаниÑ, ÑÑÑановленнÑй пÑи ÑбоÑке Postgres Pro.dbname#ÐÐ¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¾ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ полÑзоваÑелÑ. РопÑеделÑннÑÑ ÐºÐ¾Ð½ÑекÑÑÐ°Ñ ÑÑо знаÑение пÑовеÑÑеÑÑÑ Ð½Ð° ÑооÑвеÑÑÑвие ÑаÑÑиÑеннÑм ÑоÑмаÑам; Ñм. ÐодÑаздел 33.1.1 Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñобной инÑоÑмаÑии.
user#ÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Postgres Pro, иÑполÑзÑемое Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ñо же имÑ, коÑоÑое Ð¸Ð¼ÐµÐµÑ Ð² опеÑаÑионной ÑиÑÑеме полÑзоваÑелÑ, Ð¾Ñ Ð»Ð¸Ñа коÑоÑого вÑполнÑеÑÑÑ Ð¿Ñиложение.
password#ÐаÑолÑ, иÑполÑзÑемÑй в ÑлÑÑае, когда ÑеÑÐ²ÐµÑ ÑÑебÑÐµÑ Ð°ÑÑенÑиÑикаÑии по паÑолÑ.
passfile#ÐадаÑÑ Ð¸Ð¼Ñ Ñайла, в коÑоÑом бÑдÑÑ Ñ ÑаниÑÑÑÑ Ð¿Ð°Ñоли (Ñм. Раздел 33.16). Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо
~/.pgpassили%APPDATA%\postgresql\pgpass.confв Microsoft Windows. (ÐÑÑÑÑÑÑвие ÑÑого Ñайла не ÑÑиÑаеÑÑÑ Ð¾Ñибкой.)require_auth#УказÑÐ²Ð°ÐµÑ Ð¼ÐµÑод аÑÑенÑиÑикаÑии, коÑоÑÑй ÐºÐ»Ð¸ÐµÐ½Ñ ÑÑебÑÐµÑ Ð¾Ñ ÑеÑвеÑа. ÐÑли ÑеÑÐ²ÐµÑ Ð½Ðµ иÑполÑзÑÐµÑ ÑÑебÑемÑй меÑод Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии клиенÑа или еÑли обмен ÑообÑениÑми аÑÑенÑиÑикаÑии Ñо ÑÑоÑÐ¾Ð½Ñ ÑеÑвеÑа не завеÑÑÑн, Ñоединение не бÑÐ´ÐµÑ ÑÑÑановлено. Также в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑказаÑÑ ÑпиÑок меÑодов, ÑазделÑннÑÑ Ð·Ð°Ð¿ÑÑÑми, из коÑоÑÑÑ ÑеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ иÑполÑзоваÑÑ ÑолÑко один, ÑÑÐ¾Ð±Ñ Ñоединение бÑло ÑÑпеÑнÑм. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑинимаеÑÑÑ Ð»Ñбой меÑод аÑÑенÑиÑикаÑии, и ÑеÑÐ²ÐµÑ Ð´Ð°Ð¶Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð¾Ð±Ñе не вÑполнÑÑÑ ÐµÑ.
ÐеÑÐ¾Ð´Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑказаÑÑ Ñ Ð¾Ð¿ÐµÑаÑоÑом оÑÑиÑаниÑ
!, и в ÑÑом ÑлÑÑае ÑеÑÐ²ÐµÑ Ð½Ðµ должен пÑÑаÑÑÑÑ Ð¸ÑполÑзоваÑÑ ÑказаннÑй меÑод; допÑÑкаеÑÑÑ Ð»Ñбой дÑÑгой меÑод, и ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð¾Ð±Ñе не аÑÑенÑиÑиÑиÑоваÑÑ ÐºÐ»Ð¸ÐµÐ½Ñа. ÐÑли Ñказан ÑпиÑок меÑодов, ÑазделÑннÑÑ Ð·Ð°Ð¿ÑÑÑми, ÑеÑÐ²ÐµÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ Ð»Ñбой из пеÑеÑиÑленнÑÑ Ð¼ÐµÑодов Ñ Ð¾Ð¿ÐµÑаÑоÑом оÑÑиÑаниÑ. ФоÑÐ¼Ñ Ñ Ð¾ÑÑиÑанием и без не могÑÑ ÑказÑваÑÑÑÑ Ð²Ð¼ÐµÑÑе.ÐоÑледнÑÑ Ð¾ÑобенноÑÑÑ Ð¼ÐµÑода
noneÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ ÑеÑÐ²ÐµÑ Ð½Ðµ иÑполÑзовал аÑÑенÑиÑикаÑиÑ. (Ðго Ñакже можно ÑказаÑÑ Ñ Ð¾Ð¿ÐµÑаÑоÑом оÑÑиÑаниÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÑÑебоваÑÑ Ð½ÐµÐºÐ¾ÑоÑÑÑ ÑоÑÐ¼Ñ Ð°ÑÑенÑиÑикаÑии.)ÐогÑÑ Ð±ÑÑÑ ÑÐºÐ°Ð·Ð°Ð½Ñ ÑледÑÑÑие меÑодÑ:
passwordСеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ запÑаÑиваÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ паÑолÑ, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¾ÑкÑÑÑÑм ÑекÑÑом.
md5СеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ запÑаÑиваÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ паÑолÑ, заÑиÑÑÐ½Ð½Ð¾Ð¼Ñ MD5.
gssСеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ либо запÑоÑиÑÑ Ð¿Ð¾Ð´ÑвеÑждение ÑвÑзи Kerberos ÑеÑез GSSAPI, либо ÑÑÑановиÑÑ ÐºÐ°Ð½Ð°Ð» Ñ GSS ÑиÑÑованием (Ñм. Ñакже gssencmode).
sspiСеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ запÑаÑиваÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Windows SSPI.
scram-sha-256СеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑÑпеÑно завеÑÑиÑÑ Ð¾Ð±Ð¼ÐµÐ½ ÑообÑениÑми по ÑÑ ÐµÐ¼Ðµ аÑÑенÑиÑикаÑии SCRAM-SHA-256 Ñ ÐºÐ»Ð¸ÐµÐ½Ñом.
noneСеÑÐ²ÐµÑ Ð½Ðµ должен запÑаÑиваÑÑ Ñ ÐºÐ»Ð¸ÐµÐ½Ñа обмен по ÑÑ ÐµÐ¼Ðµ аÑÑенÑиÑикаÑии. (ÐÑо не запÑеÑÐ°ÐµÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ ÑеÑÑиÑикаÑа клиенÑа ÑеÑез TLS или аÑÑенÑиÑикаÑÐ¸Ñ GSS Ñ ÑиÑÑованием даннÑÑ Ð½Ð° ÑÑанÑпоÑÑном ÑÑовне.)
channel_binding#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑÐµÑ Ñежим иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑвÑзÑÐ²Ð°Ð½Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² клиенÑом. ÐаÑианÑ
requireознаÑаеÑ, ÑÑо Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ задейÑÑвоваÑÑÑÑ ÑвÑзÑвание каналов,preferâ ÐºÐ»Ð¸ÐµÐ½Ñ Ð±ÑÐ´ÐµÑ Ð²ÑбиÑаÑÑ ÑвÑзÑвание, еÑли оно поддеÑживаеÑÑÑ, аdisableпÑедоÑвÑаÑÐ°ÐµÑ Ð¸ÑполÑзование ÑÑого Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð°. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑазÑмеваеÑÑÑ Ð²Ð°ÑианÑprefer, еÑли Postgres Pro ÑобиÑаеÑÑÑ Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой SSL; в пÑоÑивном ÑлÑÑае âdisable.ÐÐµÑ Ð°Ð½Ð¸Ð·Ð¼ ÑвÑзÑÐ²Ð°Ð½Ð¸Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð² позволÑÐµÑ ÑеÑвеÑÑ Ð¿Ð¾Ð´ÑвеÑдиÑÑ ÑÐ²Ð¾Ñ Ð¿Ð¾Ð´Ð»Ð¸Ð½Ð½Ð¾ÑÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ. Ðн ÑабоÑÐ°ÐµÑ ÑолÑко Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑений повеÑÑ SSL Ñ ÑеÑвеÑами Postgres Pro веÑÑии 11 и новее, когда иÑполÑзÑеÑÑÑ Ð¼ÐµÑод аÑÑенÑиÑикаÑии
SCRAM.connect_timeout#ÐакÑималÑное вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ (задаÑÑÑÑ Ð´ÐµÑÑÑиÑнÑм ÑелÑм ÑиÑлом, напÑимеÑ:
10). ÐÑи нÑле, оÑÑиÑаÑелÑном или неопÑеделÑнном знаÑении ожидание бÑÐ´ÐµÑ Ð±ÐµÑконеÑнÑм. ÐинималÑнÑй допÑÑÑимÑй Ñайм-аÑÑ Ñавен 2 ÑекÑндам; Ñаким обÑазом, знаÑение1воÑпÑинимаеÑÑÑ ÐºÐ°Ðº2. ÐÑÐ¾Ñ Ñайм-аÑÑ Ð¿ÑименÑеÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного IP-адÑеÑа или имени ÑеÑвеÑа. ÐапÑимеÑ, еÑли Ð²Ñ Ð·Ð°Ð´Ð°Ð´Ð¸Ñе адÑеÑа двÑÑ ÑеÑвеÑов и знаÑениеconnect_timeoutбÑÐ´ÐµÑ Ñавно 5, Ñайм-аÑÑ Ð¿Ñи неÑдаÑной попÑÑке подклÑÑÐµÐ½Ð¸Ñ Ðº ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð¿ÑоизойдÑÑ ÑеÑез 5 ÑекÑнд, а обÑее вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾ÑÑигаÑÑ 10 ÑекÑнд.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или ÑавнознаÑнÑй; в дÑÑÐ³Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ Ð¾Ð½ не оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸ÑниÑ.tcp_user_timeout#УпÑавлÑÐµÑ Ð´Ð»Ð¸ÑелÑноÑÑÑÑ Ð¸Ð½ÑеÑвала (в миллиÑекÑÐ½Ð´Ð°Ñ ), в ÑеÑение коÑоÑого даннÑе могÑÑ Ð¾ÑÑаваÑÑÑÑ Ð½ÐµÐ¿Ð¾Ð´ÑвеÑждÑннÑми, пÑежде Ñем Ñоединение бÑÐ´ÐµÑ Ð¿ÑинÑдиÑелÑно закÑÑÑо. ÐÑи знаÑении 0 дейÑÑвÑÐµÑ ÑиÑÑÐµÐ¼Ð½Ð°Ñ Ð²ÐµÐ»Ð¸Ñина. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ Ð´Ð»Ñ Ñоединений, ÑÑÑановленнÑÑ ÑеÑез Unix-ÑокеÑÑ. Ðн поддеÑживаеÑÑÑ ÑолÑко в ÑиÑÑÐµÐ¼Ð°Ñ , воÑпÑинимаÑÑÐ¸Ñ Ð¿Ð°ÑамеÑÑ ÑокеÑа
TCP_USER_TIMEOUT; в дÑÑÐ³Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ Ð¾Ð½ не оказÑÐ²Ð°ÐµÑ Ð²Ð»Ð¸ÑниÑ.replication#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, должно ли подклÑÑение иÑполÑзоваÑÑ Ð¿ÑоÑокол ÑепликаÑии вмеÑÑо обÑÑного пÑоÑокола. ÐÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¸ÑполÑзÑÑÑ Ð²Ð½ÑÑÑи Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ñ ÑепликаÑии Postgres Pro и Ñакие ÑÑедÑÑва, как pg_basebackup, но он Ð¼Ð¾Ð¶ÐµÑ Ñакже пÑименÑÑÑÑÑ Ð¸ ÑÑоÑонними пÑиложениÑми. Ðа подÑобнÑм опиÑанием пÑоÑокола ÑепликаÑии обÑаÑиÑеÑÑ Ðº РазделÑ 54.4.
ÐоддеÑживаÑÑÑÑ ÑледÑÑÑие знаÑÐµÐ½Ð¸Ñ ÑÑого паÑамеÑÑа, без ÑÑÑÑа ÑегиÑÑÑа:
true,on,yes,1ÐодклÑÑение оÑÑÑеÑÑвлÑеÑÑÑ Ð² Ñежиме ÑизиÑеÑкой ÑепликаÑии.
databaseÐодклÑÑение оÑÑÑеÑÑвлÑеÑÑÑ Ð² Ñежиме логиÑеÑкой ÑепликаÑии, ÑÐµÐ»ÐµÐ²Ð°Ñ Ð±Ð°Ð·Ð° даннÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ð°ÑамеÑÑом
dbname.false,off,no,0ÐодклÑÑение вÑполнÑеÑÑÑ Ð² обÑÑном Ñежиме; ÑÑо поведение по ÑмолÑаниÑ.
Ð Ñежиме ÑизиÑеÑкой или логиÑеÑкой ÑепликаÑии Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко пÑоÑÑой пÑоÑокол запÑоÑов.
gssencmode#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑоглаÑовÑваÑÑÑÑ Ñ ÑеÑвеÑом заÑиÑÑнное GSS Ñоединение по пÑоÑÐ¾ÐºÐ¾Ð»Ñ TCP/IP, и еÑли да, Ñо в какой оÑеÑедноÑÑи. ÐÑего пÑедÑÑмоÑÑено ÑÑи Ñежима:
disableпÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко Ñоединение без ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ GSSAPI
prefer(по ÑмолÑаниÑ)еÑли Ñже имеÑÑÑÑ ÑÑÑÑнÑе даннÑе GSSAPI (в кеÑе ÑÑÑÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ ), ÑнаÑала попÑÑаÑÑÑÑ ÑÑÑановиÑÑ Ñоединение Ñ ÑиÑÑованием GSSAPI; еÑли ÑÑа попÑÑка не ÑдаÑÑÑÑ Ð¸Ð»Ð¸ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½ÐµÑ, попÑобоваÑÑ Ñоединение без ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ GSSAPI. ÐÑо знаÑение по ÑмолÑаниÑ, еÑли Postgres Pro бÑл ÑкомпилиÑован Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой GSSAPI.
requireпÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко Ñоединение Ñ ÑиÑÑованием GSSAPI
sslmodeигноÑиÑÑеÑÑÑ Ð¿Ñи иÑполÑзовании Unix-ÑокеÑов. ÐÑли Postgres Pro ÑкомпилиÑован без поддеÑжки GSSAPI, иÑполÑзование ваÑианÑаrequireпÑиведÑÑ Ðº оÑибке, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº паÑамеÑÑpreferбÑÐ´ÐµÑ Ð¿ÑинÑÑ, но libpq в дейÑÑвиÑелÑноÑÑи не бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ Ð·Ð°ÑиÑÑованное GSSAPI Ñоединение.sslmode#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ ÑоглаÑовÑваÑÑÑÑ Ñ ÑеÑвеÑом заÑиÑÑнное SSL-Ñоединение по пÑоÑÐ¾ÐºÐ¾Ð»Ñ TCP/IP, и еÑли да, Ñо в какой оÑеÑедноÑÑи. ÐÑего пÑедÑÑмоÑÑено ÑеÑÑÑ Ñежимов:
disableÑледÑÐµÑ Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко Ñоединение без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SSL
allowÑнаÑала ÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ Ñоединение без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SSL; еÑли попÑÑка бÑÐ´ÐµÑ Ð½ÐµÑдаÑной, нÑжно попÑÑаÑÑÑÑ ÑÑÑановиÑÑ SSL-Ñоединение
prefer(по ÑмолÑаниÑ)ÑнаÑала ÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ SSL-Ñоединение; еÑли попÑÑка бÑÐ´ÐµÑ Ð½ÐµÑдаÑной, нÑжно попÑÑаÑÑÑÑ ÑÑÑановиÑÑ Ñоединение без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ SSL
requireÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко SSL-Ñоединение. ÐÑли пÑиÑÑÑÑÑвÑÐµÑ Ñайл коÑневого ÑенÑÑа ÑеÑÑиÑикаÑии, Ñо нÑжно веÑиÑиÑиÑоваÑÑ ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ñаким же ÑпоÑобом, как бÑдÑо бÑл Ñказан паÑамеÑÑ
verify-caverify-caÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко SSL-Ñоединение, пÑи ÑÑом пÑоконÑÑолиÑоваÑÑ, ÑÑÐ¾Ð±Ñ ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÑеÑвеÑа бÑл вÑпÑÑен довеÑеннÑм ÑенÑÑом ÑеÑÑиÑикаÑии (CA)
verify-fullÑледÑÐµÑ Ð¿Ð¾Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ ÑолÑко SSL-Ñоединение, пÑи ÑÑом пÑоконÑÑолиÑоваÑÑ, ÑÑÐ¾Ð±Ñ ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÑеÑвеÑа бÑл вÑпÑÑен довеÑеннÑм ÑенÑÑом ÑеÑÑиÑикаÑии (CA) и ÑÑÐ¾Ð±Ñ Ð¸Ð¼Ñ Ð·Ð°Ð¿ÑоÑенного ÑеÑвеÑа ÑооÑвеÑÑÑвовало имени в ÑеÑÑиÑикаÑе
РРазделе 33.19 пÑиведено подÑобное опиÑание ÑабоÑÑ ÑÑÐ¸Ñ Ñежимов.
sslmodeигноÑиÑÑеÑÑÑ Ð¿Ñи иÑполÑзовании Unix-ÑокеÑов. ÐÑли Postgres Pro ÑкомпилиÑован без поддеÑжки SSL, иÑполÑзование паÑамеÑÑовrequire,verify-caилиverify-fullпÑиведÑÑ Ðº оÑибке, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº паÑамеÑÑÑallowиpreferбÑдÑÑ Ð¿ÑинÑÑÑ, но libpq в дейÑÑвиÑелÑноÑÑи не бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ ÑÑÑановиÑÑ SSL-Ñоединение.ÐамеÑÑÑе, ÑÑо пÑи возможноÑÑи иÑполÑзоваÑÑ ÑиÑÑование GSSAPI, оно бÑÐ´ÐµÑ Ð¿ÑедпоÑиÑаÑÑÑÑ ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ SSL вне завиÑимоÑÑи Ð¾Ñ Ð·Ð½Ð°ÑениÑ
sslmode. ЧÑÐ¾Ð±Ñ Ð¿ÑинÑдиÑелÑно иÑполÑзоваÑÑ SSL в окÑÑжении, где имееÑÑÑ ÑабоÑÐ°Ñ Ð¸Ð½ÑÑаÑÑÑÑкÑÑÑа GSSAPI (напÑимеÑ, ÑеÑÐ²ÐµÑ Kerberos), дополниÑелÑно ÑÑÑановиÑе длÑgssencmodeзнаÑениеdisable.requiressl#ÐÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ ÑекомендÑеÑÑÑ, в каÑеÑÑве Ð·Ð°Ð¼ÐµÐ½Ñ Ð¿ÑедлагаеÑÑÑ ÑÑÑановиÑÑ
sslmode.ÐÑли ÑÑÑановлено знаÑение 1, Ñо ÑÑебÑеÑÑÑ SSL-Ñоединение Ñ ÑеÑвеÑом (ÑÑо ÑквиваленÑно
sslmoderequire). libpq в Ñаком ÑлÑÑае оÑкажеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑаÑÑÑÑ, еÑли ÑеÑÐ²ÐµÑ Ð½Ðµ пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ SSL-Ñоединений. ÐÑли ÑÑÑановлено знаÑение 0 (по ÑмолÑаниÑ), Ñогда libpq бÑÐ´ÐµÑ ÑоглаÑовÑваÑÑ Ñип подклÑÑÐµÐ½Ð¸Ñ Ñ ÑеÑвеÑом (ÑквиваленÑноsslmodeprefer). ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð´Ð¾ÑÑÑпен, еÑли ÑолÑко Postgres Pro ÑкомпилиÑован Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой SSL.sslcompression#ÐÑли ÑÑÑановлено знаÑение 1, даннÑе, пеÑедаваемÑе ÑеÑез SSL-ÑоединениÑ, бÑдÑÑ ÑжимаÑÑÑÑ. ÐÑли ÑÑÑановлено знаÑение 0 (по ÑмолÑаниÑ), ÑжаÑие бÑÐ´ÐµÑ Ð¾ÑклÑÑено. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ, еÑли ÑÑÑановлено подклÑÑение без SSL.
СжаÑие SSL в наÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑиÑаеÑÑÑ Ð½ÐµÐ±ÐµÐ·Ð¾Ð¿Ð°ÑнÑм, и иÑполÑзоваÑÑ ÐµÐ³Ð¾ Ñже не ÑекомендÑеÑÑÑ. Ð OpenSSL 1.1.0 ÑжаÑие оÑклÑÑено по ÑмолÑаниÑ, к ÑÐ¾Ð¼Ñ Ð¶Ðµ во Ð¼Ð½Ð¾Ð³Ð¸Ñ Ð´Ð¸ÑÑÑибÑÑÐ¸Ð²Ð°Ñ Ð¾Ð½Ð¾ оÑклÑÑаеÑÑÑ Ð¸ Ñ Ð±Ð¾Ð»ÐµÐµ Ñанними веÑÑиÑми. РеÑли ÑеÑÐ²ÐµÑ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑжаÑие, вклÑÑение ÑÑого паÑамеÑÑа не Ð¾ÐºÐ°Ð¶ÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð³Ð¾ влиÑниÑ. Ð Postgres Pro 14 ÑжаÑие полноÑÑÑÑ Ð¾ÑклÑÑено на ÑеÑвеÑе.
ÐÑли вопÑоÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи не ÑÑоÑÑ Ð½Ð° пеÑвом меÑÑе, ÑжаÑие Ð¼Ð¾Ð¶ÐµÑ ÑÑкоÑиÑÑ Ð¿ÐµÑедаÑÑ Ð´Ð°Ð½Ð½ÑÑ , когда Ñзким меÑÑом ÑвлÑеÑÑÑ ÑеÑÑ. ÐÑклÑÑение ÑжаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð¾Ñклика и пÑопÑÑкнÑÑ ÑпоÑобноÑÑÑ, еÑли огÑаниÑиваÑÑим ÑакÑоÑом ÑвлÑеÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ CPU.
sslcert#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑедпиÑÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ñайла Ð´Ð»Ñ SSL-ÑеÑÑиÑикаÑа клиенÑа, заменÑÑÑего Ñайл по ÑмолÑаниÑ
~/.postgresql/postgresql.crt. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ, еÑли SSL-подклÑÑение не вÑполнено.sslkey#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑедпиÑÑÐ²Ð°ÐµÑ Ð¼ÐµÑÑоположение ÑекÑеÑного клÑÑа, иÑполÑзÑемого Ð´Ð»Ñ ÑеÑÑиÑикаÑа клиенÑа. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸Ð±Ð¾ ÑказÑваÑÑ Ð¸Ð¼Ñ Ñайла, коÑоÑое бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð²Ð¼ÐµÑÑо имени по ÑмолÑаниÑ
~/.postgresql/postgresql.key, либо он Ð¼Ð¾Ð¶ÐµÑ ÑказÑваÑÑ ÐºÐ»ÑÑ, полÑÑеннÑй Ð¾Ñ Ð²Ð½ÐµÑнего «кÑипÑомодÑлÑ» (кÑипÑомодÑли â ÑÑо загÑÑжаемÑе модÑли OpenSSL). СпеÑиÑикаÑÐ¸Ñ Ð²Ð½ÐµÑнего кÑипÑомодÑÐ»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑоÑÑоÑÑÑ Ð¸Ð· имени модÑÐ»Ñ Ð¸ клÑÑевого иденÑиÑикаÑоÑа, завиÑÑÑего Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного модÑлÑ, ÑазделÑннÑÑ Ð´Ð²Ð¾ÐµÑоÑием. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ, еÑли SSL-подклÑÑение не вÑполнено.sslpassword#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð·Ð°Ð´Ð°ÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð´Ð»Ñ ÑекÑеÑного клÑÑа, Ñказанного в
sslkey, ÑÑо позволÑÐµÑ Ñ ÑаниÑÑ Ð½Ð° диÑке закÑÑÑÑе клÑÑи клиенÑÑÐºÐ¸Ñ ÑеÑÑиÑикаÑов в заÑиÑÑованном виде, даже когда пÑименÑÑÑ Ð¸Ð½ÑеÑакÑивнÑй ввод паÑÐ¾Ð»Ñ Ð½ÐµÐ¿ÑакÑиÑно.Ðогда Ð´Ð»Ñ ÑÑого паÑамеÑÑа задаÑÑÑÑ Ð½ÐµÐ¿ÑÑÑое знаÑение, пÑиглаÑение OpenSSL
Enter PEM pass phrase:(ÐведиÑе паÑÐ¾Ð»Ñ Ð´Ð»Ñ PEM:) не вÑводиÑÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑо пÑиглаÑение вÑдаÑÑÑÑ, еÑли вlibpqпеÑедаÑÑÑÑ Ð·Ð°ÑиÑÑованнÑй клÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑкого ÑеÑÑиÑикаÑа.ÐÑли клÑÑ Ð½Ðµ заÑиÑÑован, ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ. ÐаннÑй паÑамеÑÑ Ð½Ðµ дейÑÑвÑÐµÑ Ð´Ð»Ñ ÐºÐ»ÑÑей, коÑоÑÑми опеÑиÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе модÑли OpenSSL, еÑли ÑолÑко модÑÐ»Ñ Ð½Ðµ полÑзÑеÑÑÑ Ð¿ÑедÑÑавленной в OpenSSL ÑÑнкÑией-обÑабоÑÑиком запÑоÑа паÑолÑ.
ÐÐ»Ñ ÑÑого паÑамеÑÑа Ð½ÐµÑ ÑооÑвеÑÑÑвÑÑÑей пеÑеменной окÑÑжениÑ, а Ñакже не Ñеализована возможноÑÑÑ Ð·Ð°Ð´Ð°ÑÑ ÐµÐ³Ð¾ в
.pgpass. Ðднако его можно задаÑÑ Ð² опÑеделении ÑвойÑÑв подклÑÑÐµÐ½Ð¸Ñ Ð² Ñайле ÑлÑжб. ÐолÑзоваÑелÑм, коÑоÑÑÑ Ð½Ðµ ÑÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ñакой пÑоÑÑой ÑпоÑоб Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÑолÑ, ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑпеÑиалÑнÑе модÑли и ÑÑедÑÑва OpenSSL, напÑÐ¸Ð¼ÐµÑ PKCS#11 или кÑипÑогÑаÑиÑеÑкие USB-ÑÑÑÑойÑÑва.sslcertmode#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÐºÐ»Ð¸ÐµÐ½Ñа бÑÑÑ Ð¾ÑпÑавлен ÑеÑвеÑÑ Ð¸ должен ли ÑеÑÐ²ÐµÑ Ð·Ð°Ð¿ÑаÑиваÑÑ ÐµÐ³Ð¾. ÐÑего пÑедÑÑмоÑÑено ÑÑи Ñежима:
disableСеÑÑиÑÐ¸ÐºÐ°Ñ ÐºÐ»Ð¸ÐµÐ½Ñа не оÑпÑавлÑеÑÑÑ, даже еÑли он доÑÑÑпен (ÑаÑположен по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ Ñказан в sslcert).
allow(по ÑмолÑаниÑ)СеÑÑиÑÐ¸ÐºÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑпÑавлен, еÑли ÑеÑÐ²ÐµÑ Ð·Ð°Ð¿ÑаÑÐ¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ и ÐºÐ»Ð¸ÐµÐ½Ñ Ð¼Ð¾Ð¶ÐµÑ ÐµÐ³Ð¾ оÑпÑавиÑÑ.
requireСеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ запÑаÑиваÑÑ ÑеÑÑиÑикаÑ. УÑÑановиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑение не ÑдаÑÑÑÑ, еÑли ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ðµ оÑпÑавлÑÐµÑ ÑеÑÑиÑикаÑ, а ÑеÑÐ²ÐµÑ Ð²ÑÑ Ñавно ÑÑпеÑно аÑÑенÑиÑиÑиÑÑÐµÑ ÐºÐ»Ð¸ÐµÐ½Ñа.
ÐÑимеÑание
УÑÑановка
sslcertmode=requireне повÑÑÐ°ÐµÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑÑ, поÑколÑÐºÑ Ð½ÐµÑ Ð³Ð°ÑанÑии, ÑÑо ÑеÑÐ²ÐµÑ Ð¿ÑавилÑно пÑовеÑÑÐµÑ ÑеÑÑиÑикаÑ. СеÑвеÑÑ Postgres Pro обÑÑно запÑаÑиваÑÑ ÑеÑÑиÑикаÑÑ TLS Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñов незавиÑимо Ð¾Ñ Ñого, пÑовеÑÑÑÑ Ð¾Ð½Ð¸ Ð¸Ñ Ð¸Ð»Ð¸ неÑ. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ пÑи ÑÑÑÑанении неполадок в более ÑложнÑÑ ÑÑ ÐµÐ¼Ð°Ñ TLS.sslrootcert#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ñайла, ÑодеÑжаÑего SSL-ÑеÑÑиÑикаÑÑ, вÑданнÑе ЦенÑÑом ÑеÑÑиÑикаÑии (CA). ÐÑли Ñайл ÑÑÑеÑÑвÑеÑ, ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÑеÑвеÑа бÑÐ´ÐµÑ Ð¿ÑовеÑен на пÑÐµÐ´Ð¼ÐµÑ ÐµÐ³Ð¾ подпиÑÐ°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¸Ð¼ из ÑÑÐ¸Ñ ÑенÑÑов. ÐÐ¼Ñ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ â
~/.postgresql/root.crt.ÐмеÑÑо ÑÑого можно ÑказаÑÑ ÑпеÑиалÑное знаÑение
system, и в ÑÑом ÑлÑÑае бÑдÑÑ Ð·Ð°Ð³ÑÑÐ¶ÐµÐ½Ñ Ð´Ð¾Ð²ÐµÑеннÑе ÑеÑÑиÑикаÑÑ ÐºÐ¾ÑневÑÑ Ð¦Ð¡, пÑедоÑÑавлÑемÑе ÑеализаÑией SSL. ТоÑное ÑаÑположение ÑÑÐ¸Ñ ÐºÐ¾ÑневÑÑ ÑеÑÑиÑикаÑов завиÑÐ¸Ñ Ð¾Ñ ÑеализаÑии SSL и плаÑÑоÑмÑ. Ð ÑаÑÑноÑÑи, Ð´Ð»Ñ OpenSSL ÑаÑположение можно ÑÑоÑниÑÑ Ð² пеÑеменнÑÑ Ð¾ÐºÑÑжениÑSSL_CERT_DIRиSSL_CERT_FILE.ÐÑимеÑание
ÐÑи иÑполÑзовании
sslrootcert=systemзнаÑениеsslmode, заданное по ÑмолÑаниÑ, менÑеÑÑÑ Ð½Ð°verify-full, и лÑбое знаÑение Ñ Ð¼ÐµÐ½ÐµÐµ ÑÑÑогой пÑовеÑкой пÑиведÑÑ Ðº оÑибке. РболÑÑинÑÑве ÑлÑÑаев неÑÑÑдно полÑÑиÑÑ Ð´Ð¾Ð²ÐµÑеннÑй Ð´Ð»Ñ ÑиÑÑÐµÐ¼Ñ ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð¿Ð¾ имени ÑпÑавлÑемого Ñзла, ÑÑо делаеÑverify-caи вÑе более ÑлабÑе ÑÐµÐ¶Ð¸Ð¼Ñ Ð±ÐµÑполезнÑми.ÐÑли ÑказаÑÑ Ñайл ÑеÑÑиÑикаÑа Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼
system, оно бÑÐ´ÐµÑ ÑаÑпознаваÑÑÑÑ ÐºÐ°Ðº оÑобое знаÑениеsystem, поÑÑÐ¾Ð¼Ñ Ð¿Ñи налиÑии Ñайла Ñ Ñаким именем ÑледÑÐµÑ Ð·Ð°Ð´Ð°ÑÑ Ð°Ð»ÑÑеÑнаÑивнÑй пÑÑÑ, напÑимеÑsslrootcert=./system.sslcrl#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ñайла, ÑодеÑжаÑего ÑпиÑок оÑозваннÑÑ ÑеÑвеÑнÑÑ ÑеÑÑиÑикаÑов (CRL) Ð´Ð»Ñ SSL. СеÑÑиÑикаÑÑ, пеÑеÑиÑленнÑе в ÑÑом Ñайле, еÑли он ÑÑÑеÑÑвÑеÑ, бÑдÑÑ Ð¾ÑвеÑгаÑÑÑÑ Ð¿Ñи попÑÑке ÑÑÑановиÑÑ Ð¿Ð¾Ð´Ð»Ð¸Ð½Ð½Ð¾ÑÑÑ ÑеÑÑиÑикаÑа ÑеÑвеÑа. ÐÑли ни sslcrl, ни sslcrldir не заданÑ, иÑполÑзÑеÑÑÑ Ñайл
~/.postgresql/root.crl.sslcrldir#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ ÐºÐ°Ñалога, ÑодеÑжаÑего ÑпиÑок оÑозваннÑÑ ÑеÑвеÑнÑÑ ÑеÑÑиÑикаÑов (CRL) Ð´Ð»Ñ SSL. СеÑÑиÑикаÑÑ, пеÑеÑиÑленнÑе в ÑÐ°Ð¹Ð»Ð°Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ каÑалога, еÑли он ÑÑÑеÑÑвÑеÑ, бÑдÑÑ ÑÑиÑаÑÑÑÑ Ð½ÐµÐ¿ÑиемлемÑми пÑи пÑовеÑке подлинноÑÑи ÑеÑÑиÑикаÑа ÑеÑвеÑа.
ÐаÑалог Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ подгоÑовиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ OpenSSL
openssl rehashилиc_rehash. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº докÑменÑаÑии OpenSSL.ÐаÑамеÑÑÑ
sslcrlиsslcrldirможно ÑказÑваÑÑ Ð²Ð¼ÐµÑÑе.sslsni#Со знаÑением, ÑавнÑм 1 (по ÑмолÑаниÑ), libpq вклÑÑÐ°ÐµÑ ÑаÑÑиÑение TLS «Server Name Indication» (SNI) Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑений Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой SSL. ÐÑи знаÑении, Ñавном 0, данное ÑаÑÑиÑение оÑклÑÑаеÑÑÑ.
Указание имени ÑеÑвеÑа (SNI) Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¿ÑокÑи-ÑеÑвеÑами Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой SSL Ð´Ð»Ñ Ð¼Ð°ÑÑÑÑÑизаÑии Ñоединений без ÑаÑÑиÑÑовÑÐ²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ñока SSL. (ÐбÑаÑиÑе внимание, ÑÑо Ð´Ð»Ñ ÑÑого ÑÑебÑеÑÑÑ Ð¿ÑокÑи-ÑеÑвеÑ, ÑаÑпознаÑÑий пакеÑÑ Ð¸Ð½Ð¸ÑиализаÑии пÑоÑокола Postgres Pro, а не лÑбой SSL пÑокÑи-ÑеÑвеÑ.) Ðднако пÑи вклÑÑении SNI Ð¸Ð¼Ñ Ñелевого ÑеÑвеÑа пеÑедаÑÑÑÑ Ð¿Ð¾ ÑеÑи в оÑкÑÑÑом виде, ÑÑо в некоÑоÑÑÑ ÑлÑÑаÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¶ÐµÐ»Ð°ÑелÑно.
requirepeer#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ, пÑедназнаÑенное Ð´Ð»Ñ ÑеÑвеÑа, напÑимеÑ,
requirepeer=postgres. ÐÑи Ñоздании подклÑÑÐµÐ½Ð¸Ñ ÑеÑез Unix-ÑокеÑ, еÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑÑÑановлен, ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿ÑовеÑÑÐµÑ Ð² Ñамом наÑале пÑоÑедÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ, ÑÑо ÑеÑвеÑнÑй пÑоÑеÑÑ Ð·Ð°Ð¿ÑÑен Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ñказанного полÑзоваÑелÑ; еÑли ÑÑо не Ñак, Ñоединение аваÑийно пÑеÑÑваеÑÑÑ Ñ Ð¾Ñибкой. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ ÑеÑвеÑа, подобнÑÑ Ñой, коÑоÑÐ°Ñ Ð´Ð¾ÑÑÑпна Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SSL-ÑеÑÑиÑикаÑов пÑи ÑоединениÑÑ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ TCP/IP. (ÐамеÑÑÑе, ÑÑо еÑли Unix-ÑÐ¾ÐºÐµÑ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² каÑалоге/tmpили в дÑÑгом каÑалоге, запиÑÑ Ð² коÑоÑÑй ÑазÑеÑена вÑем полÑзоваÑелÑм, Ñогда лÑбой полÑзоваÑÐµÐ»Ñ ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ ÑеÑвеÑ, пÑоÑлÑÑиваÑÑий ÑÐ¾ÐºÐµÑ Ð² Ñом каÑалоге. ÐÑполÑзÑйÑе ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, ÑÑÐ¾Ð±Ñ Ð³Ð°ÑанÑиÑоваÑÑ, ÑÑо Ð²Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ñ Ðº ÑеÑвеÑÑ, запÑÑÐµÐ½Ð½Ð¾Ð¼Ñ Ð´Ð¾Ð²ÐµÑеннÑм полÑзоваÑелем.) Ðн поддеÑживаеÑÑÑ ÑолÑко на плаÑÑоÑÐ¼Ð°Ñ , Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ñеализован меÑод аÑÑенÑиÑикаÑииpeer; Ñм. Раздел 19.9.ssl_min_protocol_version#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, Ñ ÐºÐ°ÐºÐ¾Ð¹ минималÑной веÑÑией пÑоÑокола SSL/TLS Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑановлено подклÑÑение. ÐопÑÑÑимÑе знаÑениÑ:
TLSv1,TLSv1.1,TLSv1.2иTLSv1.3. ÐÐ°Ð±Ð¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаемÑÑ Ð¿ÑоÑоколов завиÑÐ¸Ñ Ð¾Ñ Ð¸ÑполÑзÑемой веÑÑии OpenSSL; ÑÑаÑÑе веÑÑии могÑÑ Ð½Ðµ поддеÑживаÑÑ Ð¿Ð¾Ñледние пÑоÑоколÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»Ñной ÑÑиÑаеÑÑÑ Ð²ÐµÑÑиÑTLSv1.2, ÑÑо ÑооÑвеÑÑÑвÑÐµÑ ÑекомендаÑиÑм, акÑÑалÑнÑм в индÑÑÑÑии на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ð°Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑÑой докÑменÑаÑии.ssl_max_protocol_version#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, Ñ ÐºÐ°ÐºÐ¾Ð¹ макÑималÑной веÑÑией пÑоÑокола SSL/TLS Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑановлено подклÑÑение. ÐопÑÑÑимÑе знаÑениÑ:
TLSv1,TLSv1.1,TLSv1.2иTLSv1.3. ÐÐ°Ð±Ð¾Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаемÑÑ Ð¿ÑоÑоколов завиÑÐ¸Ñ Ð¾Ñ Ð¸ÑполÑзÑемой веÑÑии OpenSSL; ÑÑаÑÑе веÑÑии могÑÑ Ð½Ðµ поддеÑживаÑÑ Ð¿Ð¾Ñледние пÑоÑоколÑ. ÐÑли ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½Ðµ задан, пÑи подклÑÑении бÑÐ´ÐµÑ Ð´ÐµÐ¹ÑÑвоваÑÑ Ð¾Ð³ÑаниÑение веÑÑии ÑвеÑÑ Ñ, ÑÑÑановленное на ÑÑоÑоне ÑеÑвеÑа (пÑи налиÑии Ñакового). ÐозможноÑÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¼Ð°ÐºÑималÑной веÑÑии пÑоÑокола полезна пÑежде вÑего пÑи ÑеÑÑиÑовании или когда какой-либо ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ ÑабоÑÐ°ÐµÑ Ñ Ð½Ð¾Ð²Ñм пÑоÑоколом некоÑÑекÑно.krbsrvname#ÐÐ¼Ñ ÑлÑÐ¶Ð±Ñ Kerberos, коÑоÑое бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¿Ñи аÑÑенÑиÑикаÑии GSSAPI. ЧÑÐ¾Ð±Ñ Ð°ÑÑенÑиÑикаÑÐ¸Ñ Kerberos пÑоÑла ÑÑпеÑна, оно должно ÑооÑвеÑÑÑвоваÑÑ Ð¸Ð¼ÐµÐ½Ð¸ ÑлÑжбÑ, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð² конÑигÑÑаÑии ÑеÑвеÑа. (См. Ñакже Раздел 19.6.) Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð±ÑÑно вÑбиÑаеÑÑÑ Ð¸Ð¼Ñ
postgres, но его можно ÑмениÑÑ Ð¿Ñи ÑбоÑке Postgres Pro, пеÑедав клÑÑ--with-krb-srvnamÑкÑипÑÑ configure. РболÑÑинÑÑве ÑлÑÑаев менÑÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи. ÐÐ»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ ÑеализаÑий Kerberos Ð¼Ð¾Ð¶ÐµÑ ÑÑебоваÑÑÑÑ Ð´ÑÑгое Ð¸Ð¼Ñ ÑлÑжбÑ, напÑимеÑ, Microsoft Active Directory ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð¼Ñ ÑлÑÐ¶Ð±Ñ Ð·Ð°Ð´Ð°Ð²Ð°Ð»Ð¾ÑÑ Ð² веÑÑ Ð½ÐµÐ¼ ÑегиÑÑÑе (POSTGRES).gsslib#ÐиблиоÑека GSS, пÑедназнаÑÐµÐ½Ð½Ð°Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñи аÑÑенÑиÑикаÑии на оÑнове GSSAPI. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑо дейÑÑвÑÐµÑ ÑолÑко в ÑбоÑÐºÐ°Ñ Ð´Ð»Ñ Windows, поддеÑживаÑÑÐ¸Ñ Ð¾Ð´Ð½Ð¾Ð²Ñеменно и GSSAPI, и SSPI. ÐнаÑение
gssapiв ÑÐ°ÐºÐ¸Ñ ÑбоÑÐºÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑказаÑÑ, ÑÑо libpq должна иÑполÑзоваÑÑ Ð´Ð»Ñ Ð°ÑÑенÑиÑикаÑии библиоÑÐµÐºÑ GSSAPI, а не подÑазÑмеваемÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ SSPI.gssdelegation#ÐеÑеÑлаÑÑ (делегиÑоваÑÑ) ÑÑÑÑнÑе даннÑе GSS ÑеÑвеÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ Ð·Ð½Ð°Ñение
0. ÐÑо ознаÑаеÑ, ÑÑо ÑÑÑÑнÑе даннÑе не бÑдÑÑ Ð¿ÐµÑеÑÑлаÑÑÑÑ ÑеÑвеÑÑ. УÑÑановиÑе Ð´Ð»Ñ ÑÑого паÑамеÑÑа знаÑение1, ÑÑÐ¾Ð±Ñ ÑÑÑÑнÑе даннÑе пеÑеÑÑлалиÑÑ, когда ÑÑо возможно.service#ÐÐ¼Ñ ÑеÑвиÑа, иÑполÑзÑемое Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¿Ð°ÑамеÑÑов. Ðно ÑказÑÐ²Ð°ÐµÑ Ð¸Ð¼Ñ ÑеÑвиÑа в Ñайле
pg_service.conf, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе паÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. ÐÑо позволÑÐµÑ Ð¿ÑиложениÑм ÑказÑваÑÑ ÑолÑко Ð¸Ð¼Ñ ÑеÑвиÑа, поÑколÑÐºÑ Ð¿Ð°ÑамеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ ÑенÑÑализованно. См. Раздел 33.17.target_session_attrs#ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°ÐºÐ»Ð°Ð´ÑваÑÑ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° ÑвойÑÑва ÑеанÑов, коÑоÑÑе бÑдÑÑ ÑÑиÑаÑÑÑÑ Ð¿ÑиемлемÑми. ÐбÑÑно он иÑполÑзÑеÑÑÑ Ð²Ð¼ÐµÑÑе Ñ Ñказанием имÑн неÑколÑÐºÐ¸Ñ ÑеÑвеÑов и позволÑÐµÑ Ð²ÑбÑаÑÑ Ð¸Ð· Ð½Ð¸Ñ Ð¿ÐµÑвÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑий ваÑианÑ. ÐÑÑÑ ÑеÑÑÑ Ñежимов:
any(по ÑмолÑаниÑ)лÑбое ÑÑпеÑное Ñоединение пÑиемлемо
read-writeÑÐµÐ°Ð½Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑинимаÑÑ ÑÑанзакÑии ÑÑениÑ-запиÑи по ÑмолÑÐ°Ð½Ð¸Ñ (Ñо еÑÑÑ ÑеÑÐ²ÐµÑ Ð½Ðµ должен Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð² Ñежиме гоÑÑÑего ÑезеÑва, а Ñ Ð¿Ð°ÑамеÑÑа
default_transaction_read_onlyдолжно бÑÑÑ Ð·Ð½Ð°Ñениеoff)read-onlyÑÐµÐ°Ð½Ñ Ð½Ðµ должен пÑинимаÑÑ ÑÑанзакÑии ÑÑениÑ-запиÑи по ÑмолÑÐ°Ð½Ð¸Ñ (пÑоÑивоположнÑй ÑлÑÑай)
primaryÑеÑÐ²ÐµÑ Ð½Ðµ должен Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð² Ñежиме гоÑÑÑего ÑезеÑва
standbyÑеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð² Ñежиме гоÑÑÑего ÑезеÑва
prefer-standbyÑнаÑала пÑÑаÑÑÑÑ Ð½Ð°Ð¹Ñи ÑезеÑвнÑй ÑеÑвеÑ, но еÑли ни один из пеÑеÑиÑленнÑÑ ÑеÑвеÑов не ÑвлÑеÑÑÑ ÑезеÑвнÑм, попÑобоваÑÑ Ñнова в Ñежиме
any
load_balance_hosts#УпÑавлÑÐµÑ Ð¿Ð¾ÑÑдком, в коÑоÑом ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿ÑÑаеÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº доÑÑÑпнÑм Ñзлам и адÑеÑам. ÐÑли попÑÑка подклÑÑÐµÐ½Ð¸Ñ Ð¾ÐºÐ°Ð¶ÐµÑÑÑ ÑÑпеÑной, ÐºÐ»Ð¸ÐµÐ½Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº дÑÑгим Ñзлам и адÑеÑам. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð±ÑÑно иÑполÑзÑеÑÑÑ Ð²Ð¼ÐµÑÑе Ñ Ð½ÐµÑколÑкими именами Ñзлов или запиÑÑÑ DNS, коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð½ÐµÑколÑко IP-адÑеÑов. Ðго Ñакже можно иÑполÑзоваÑÑ Ð²Ð¼ÐµÑÑе Ñ target_session_attrs, напÑÐ¸Ð¼ÐµÑ Ð´Ð»Ñ Ð±Ð°Ð»Ð°Ð½ÑиÑовки нагÑÑзки ÑолÑко Ð¼ÐµÐ¶Ð´Ñ ÑезеÑвнÑми ÑеÑвеÑами. ÐоÑле ÑÑпеÑного подклÑÑÐµÐ½Ð¸Ñ Ð²Ñе поÑледÑÑÑие запÑоÑÑ Ð¿Ð¾ возвÑаÑÑÐ½Ð½Ð¾Ð¼Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¾ÑпÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½Ð° один и ÑÐ¾Ñ Ð¶Ðµ ÑеÑвеÑ. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÑÑÑеÑÑвÑÐµÑ Ð´Ð²Ð° Ñежима:
disable(по ÑмолÑаниÑ)ÐаланÑиÑовка нагÑÑзки Ð¼ÐµÐ¶Ð´Ñ Ñзлами не вÑполнÑеÑÑÑ. Ð£Ð·Ð»Ñ Ð¿ÐµÑебиÑаÑÑÑÑ Ð¿Ð¾ оÑеÑеди, а адÑеÑа â в Ñом поÑÑдке, в коÑоÑом они полÑÑÐµÐ½Ñ Ð¾Ñ DNS или Ñайлов Ñзлов.
randomÐ£Ð·Ð»Ñ Ð¸ адÑеÑа пеÑебиÑаÑÑÑÑ Ð² ÑлÑÑайном поÑÑдке. ÐÑо знаÑение наиболее полезно пÑи одновÑеменном оÑкÑÑÑии неÑколÑÐºÐ¸Ñ Ñоединений, возможно Ñ ÑазнÑÑ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑов. Таким обÑазом, нагÑÑзка Ð¼Ð¾Ð¶ÐµÑ ÑаÑпÑеделÑÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑоединениÑми неÑколÑÐºÐ¸Ñ ÑеÑвеÑов Postgres Pro.
ХоÑÑ ÑлÑÑÐ°Ð¹Ð½Ð°Ñ Ð±Ð°Ð»Ð°Ð½ÑиÑовка нагÑÑзки по Ñвоей пÑиÑоде поÑÑи никогда не пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº полноÑÑÑÑ ÑавномеÑÐ½Ð¾Ð¼Ñ ÑаÑпÑеделениÑ, ÑÑаÑиÑÑиÑеÑки она доволÑно близка к ÑÑомÑ. Ðажно Ñо, ÑÑо ÑÑÐ¾Ñ Ð°Ð»Ð³Ð¾ÑиÑм иÑполÑзÑÐµÑ Ð´Ð²Ð° ÑÑÐ¾Ð²Ð½Ñ ÑлÑÑайного вÑбоÑа: ÑнаÑала ÑÐ·Ð»Ñ ÑазÑеÑаÑÑÑÑ Ð² ÑлÑÑайном поÑÑдке, заÑем пеÑед ÑазÑеÑением ÑледÑÑÑего Ñзла вÑе ÑазÑеÑÑннÑе адÑеÑа ÑекÑÑего Ñзла пеÑебиÑаÑÑÑÑ Ð² ÑлÑÑайном поÑÑдке. Такое поведение Ð¼Ð¾Ð¶ÐµÑ ÑилÑно влиÑÑÑ Ð½Ð° колиÑеÑÑво подклÑÑений, коÑоÑÑе полÑÑÐ°ÐµÑ ÐºÐ°Ð¶Ð´Ñй Ñзел в опÑеделÑннÑÑ ÑлÑÑаÑÑ , напÑимеÑ, когда некоÑоÑÑе ÑÐ·Ð»Ñ ÑазÑеÑаÑÑ Ð±Ð¾Ð»ÑÑе адÑеÑов, Ñем дÑÑгие. Ðо Ñакое влиÑние можно иÑполÑзоваÑÑ Ð¸ намеÑенно. ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ ÑвелиÑиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво подклÑÑений к более кÑÑÐ¿Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ, можно неÑколÑко Ñаз ÑказаÑÑ ÐµÐ³Ð¾ Ð¸Ð¼Ñ Ð² ÑооÑвеÑÑÑвÑÑÑей ÑÑÑоке.
ÐÑи иÑполÑзовании ÑÑого знаÑÐµÐ½Ð¸Ñ ÑекомендÑеÑÑÑ Ñакже вÑбÑаÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑее знаÑение Ð´Ð»Ñ connect_timeout, поÑÐ¾Ð¼Ñ ÑÑо в Ñаком ÑлÑÑае, еÑли один из Ñзлов, иÑполÑзÑемÑÑ Ð´Ð»Ñ Ð±Ð°Ð»Ð°Ð½ÑиÑовки нагÑÑзки, не оÑвеÑаеÑ, бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½Ð¾Ð²Ñй Ñзел.
.