32.11. ФÑнкÑии Ñазного назнаÑениÑ
Ðак вÑегда, Ð½Ð°Ñ Ð¾Ð´ÑÑÑÑ ÑÑнкÑии, коÑоÑÑе не попадаÑÑ Ð½Ð¸ в Ð¾Ð´Ð½Ñ Ð¸Ð· каÑегоÑий.
-
PQfreemem ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¿Ð°Ð¼ÑÑÑ, коÑоÑÑÑ Ð²Ñделила libpq.
void PQfreemem(void *ptr);
ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ Ð¿Ð°Ð¼ÑÑÑ, вÑделеннÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñекой libpq, а именно ÑÑнкÑиÑми
PQescapeByteaConn,PQescapeBytea,PQunescapeByteaиPQnotifies. ÐÑобенно важно иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑÑÑ ÑÑнкÑиÑ, а неfree(), в Microsoft Windows. ÐÑо ÑвÑзано Ñ Ñем, ÑÑо вÑделение памÑÑи в DLL и оÑвобождение ÐµÑ Ð² пÑиложении бÑÐ´ÐµÑ ÑабоÑаÑÑ, ÑолÑко еÑли Ñлаги многопоÑоÑной/однопоÑоÑной, вÑпÑÑкаемой/оÑладоÑной или ÑÑаÑиÑеÑкой/динамиÑеÑкой ÑбоÑки Ð´Ð»Ñ DLL и пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑовпадаÑÑ. Ðа дÑÑÐ³Ð¸Ñ Ð¿Ð»Ð°ÑÑоÑÐ¼Ð°Ñ ÑÑа ÑÑнкÑÐ¸Ñ Ð´ÐµÐ¹ÑÑвÑÐµÑ Ñак же, как ÑÑандаÑÑÐ½Ð°Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑеÑÐ½Ð°Ñ ÑÑнкÑиÑfree().-
PQconninfoFree ÐÑÐ²Ð¾Ð±Ð¾Ð¶Ð´Ð°ÐµÑ ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ , вÑделеннÑе ÑÑнкÑиÑми
PQconndefaultsиPQconninfoParse.void PQconninfoFree(PQconninfoOption *connOptions);
ÐÑоÑÑÐ°Ñ ÑÑнкÑиÑ
PQfreememне подойдÑÑ Ð´Ð»Ñ ÑÑого, Ñак как ÑÑи ÑÑÑÑкÑÑÑÑ ÑодеÑÐ¶Ð°Ñ ÑÑÑлки на подÑинÑннÑе ÑÑÑоки.-
PQencryptPasswordConn ÐодгоÑÐ°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð°ÑиÑÑованнÑÑ ÑоÑÐ¼Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Postgres Pro.
char *PQencryptPasswordConn(PGconn *conn, const char *passwd, const char *user, const char *algorithm);
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿ÑедназнаÑена Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑÐºÐ¸Ñ Ð¿Ñиложений, желаÑÑÐ¸Ñ Ð¿ÐµÑедаваÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð²Ð¸Ð´Ð°
ALTER USER joe PASSWORD 'pwd'. Ð Ñакой команде лÑÑÑе не пеÑедаваÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñй паÑÐ¾Ð»Ñ Ð¾ÑкÑÑÑÑм ÑекÑÑом, Ñак как он Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑвиÑÑÑÑ Ð² жÑÑÐ½Ð°Ð»Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´, мониÑоÑе акÑивноÑÑи и Ñ. д. ÐмеÑÑо ÑÑого воÑполÑзÑйÑеÑÑ Ð´Ð°Ð½Ð½Ð¾Ð¹ ÑÑнкÑией и пеÑеведиÑе паÑÐ¾Ð»Ñ Ð² заÑиÑÑованнÑÑ ÑоÑмÑ.РаÑгÑменÑаÑ
passwdиuserзадаÑÑÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð² оÑкÑÑÑом виде и SQL-Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑого он задаÑÑÑÑ. РаÑгÑменÑеalgorithmзадаÑÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑм Ð´Ð»Ñ ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑолÑ. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑмÑmd5иscram-sha-256(в каÑеÑÑве алÑÑеÑнаÑивнÑÑ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñенийmd5Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñо ÑÑаÑÑми веÑÑиÑми ÑеÑвеÑа поддеÑживаÑÑÑÑ Ð·Ð½Ð°ÑениÑonиoff). ÐамеÑÑÑе, ÑÑо поддеÑжкаscram-sha-256поÑвилаÑÑ Ð² Postgres Pro веÑÑии 10 и Ñо ÑÑаÑÑми веÑÑиÑми ÑеÑвеÑов ÑÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ ÑабоÑаÑÑ Ð½Ðµ бÑдеÑ. ÐÑлиalgorithmÑавенNULL, ÑÑа ÑÑнкÑÐ¸Ñ Ð·Ð°Ð¿ÑоÑÐ¸Ñ Ñ ÑеÑвеÑа ÑекÑÑее знаÑение паÑамеÑÑа password_encryption. ÐÑи ÑÑом возможна блокиÑовка и оÑказ пÑи вÑполнении ÑÑнкÑии, еÑли ÑекÑÑÐ°Ñ ÑÑанзакÑÐ¸Ñ Ð¿ÑеÑÑваеÑÑÑ Ð¸Ð»Ð¸ еÑли в ÑекÑÑем Ñоединении вÑполнÑеÑÑÑ Ð´ÑÑгой запÑоÑ. ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе иÑполÑзоваÑÑ Ð°Ð»Ð³Ð¾ÑиÑм по ÑмолÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа, но пÑи ÑÑом избежаÑÑ Ð±Ð»Ð¾ÐºÐ¸Ñовки, полÑÑиÑе знаÑениеpassword_encryptionÑамоÑÑоÑÑелÑно до вÑзоваPQencryptPasswordConnи пеÑедайÑе его в паÑамеÑÑеalgorithm.ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ ÑÑÑокÑ, вÑделеннÑÑ ÑÑнкÑией
malloc. ÐÑзÑваÑÑий код Ð¼Ð¾Ð¶ÐµÑ ÑаÑÑÑиÑÑваÑÑ Ð½Ð° Ñо, ÑÑо ÑÑа ÑÑÑока не ÑодеÑÐ¶Ð¸Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ ÑпеÑÑимволов, ÑÑебÑÑÑÐ¸Ñ ÑкÑаниÑованиÑ. ÐаконÑив ÑабоÑÑ Ñ Ð½ÐµÐ¹, оÑвободиÑе памÑÑÑ, вÑзвавPQfreemem. Ð ÑлÑÑае оÑибки ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑNULL, а ÑооÑвеÑÑÑвÑÑÑее ÑообÑение помеÑаеÑÑÑ Ð² обÑÐµÐºÑ ÑоединениÑ.-
PQencryptPassword ÐодгоÑÐ°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð°ÑиÑÑованнÑÑ md5 ÑоÑÐ¼Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Postgres Pro.
char *PQencryptPassword(const char *passwd, const char *user);
PQencryptPasswordâ ÑÑаÑаÑ, подлежаÑÐ°Ñ Ð»Ð¸ÐºÐ²Ð¸Ð´Ð°Ñии веÑÑиÑPQencryptPasswordConn. ÐÑлиÑие ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо длÑPQencryptPasswordне ÑÑебÑеÑÑÑ Ð¾Ð±ÑÐµÐºÑ ÑоединениÑ, а в каÑеÑÑве алгоÑиÑма ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñегда иÑполÑзÑеÑÑÑmd5.-
PQmakeEmptyPGresult ÐонÑÑÑÑиÑÑÐµÑ Ð¿ÑÑÑой обÑекÑ
PGresultÑ ÑказаннÑм ÑоÑÑоÑнием.PGresult *PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
ÐÑо внÑÑÑеннÑÑ ÑÑнкÑÐ¸Ñ libpq, вÑделÑÑÑÐ°Ñ Ð¿Ð°Ð¼ÑÑÑ Ð¸ иниÑиализиÑÑÑÑÐ°Ñ Ð¿ÑÑÑой обÑекÑ
PGresult. ÐÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑNULL, еÑли не Ð¼Ð¾Ð¶ÐµÑ Ð²ÑделиÑÑ Ð¿Ð°Ð¼ÑÑÑ. Ðна Ñделана ÑкÑпоÑÑиÑÑемой, Ñак как некоÑоÑÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð°Ñ Ð¾Ð´ÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм ÑоздаваÑÑ Ð¾Ð±ÑекÑÑ ÑезÑлÑÑаÑов (в ÑаÑÑноÑÑи, обÑекÑÑ Ñ ÑоÑÑоÑнием оÑибки) ÑамоÑÑоÑÑелÑно. ÐÑли вconnпеÑедаÑÑÑÑ Ð½Ðµ null иstatusÑказÑÐ²Ð°ÐµÑ Ð½Ð° оÑибкÑ, вPGresultкопиÑÑеÑÑÑ ÑекÑÑее ÑообÑение об оÑибке Ð´Ð»Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑоединениÑ. Также, еÑли вconnпеÑедаÑÑÑÑ Ð½Ðµ null, вPGresultкопиÑÑÑÑÑÑ Ð²Ñе пÑоÑедÑÑÑ ÑобÑÑий, заÑегиÑÑÑиÑованнÑе Ð´Ð»Ñ ÑÑого ÑоединениÑ. (ÐÑи ÑÑом вÑзовÑPGEVT_RESULTCREATEне вÑполнÑÑÑÑÑ; Ñм. опиÑаниеPQfireResultCreateEvents.) ÐамеÑÑÑе, ÑÑо в конÑе Ð´Ð»Ñ ÑÑого обÑекÑа ÑледÑÐµÑ Ð²ÑзваÑÑPQclear, как и Ð´Ð»Ñ Ð¾Ð±ÑекÑаPGresult, возвÑаÑÑнного Ñамой библиоÑекой libpq.-
PQfireResultCreateEvents ÐÑзÑÐ²Ð°ÐµÑ ÑобÑÑие
PGEVT_RESULTCREATE(Ñм. Раздел 32.13) Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ пÑоÑедÑÑÑ ÑобÑÑий, заÑегиÑÑÑиÑованной в обÑекÑеPGresult. ÐозвÑаÑÐ°ÐµÑ Ð½ÐµÐ½Ñлевое знаÑение в ÑлÑÑае ÑÑÐ¿ÐµÑ Ð° или Ð½Ð¾Ð»Ñ Ð² ÑлÑÑае оÑибки в одной из пÑоÑедÑÑ.int PQfireResultCreateEvents(PGconn *conn, PGresult *res);
ÐÑгÑменÑ
connпеÑедаÑÑÑÑ Ð¿ÑоÑедÑÑам ÑобÑÑий, но непоÑÑедÑÑвенно не иÑполÑзÑеÑÑÑ. Ðн Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑавенNULL, еÑли он не нÑжен пÑоÑедÑÑам ÑобÑÑий.ÐÑоÑедÑÑÑ ÑобÑÑий, Ñже полÑÑивÑие ÑобÑÑие
PGEVT_RESULTCREATEилиPGEVT_RESULTCOPYÐ´Ð»Ñ ÑÑого обÑекÑа, болÑÑе не вÑзÑваÑÑÑÑ.ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¿ÑиÑина оÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑÑой ÑÑнкÑии оÑ
PQmakeEmptyPGresultв Ñом, ÑÑо ÑаÑÑо ÑÑебÑеÑÑÑ ÑоздаÑÑ Ð¾Ð±ÑекÑPGresultи наполниÑÑ ÐµÐ³Ð¾ даннÑми, пÑежде Ñем вÑзÑваÑÑ Ð¿ÑоÑедÑÑÑ ÑобÑÑий.-
PQcopyResult СоздаÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð¾Ð±ÑекÑа
PGresult. ÐÑа ÐºÐ¾Ð¿Ð¸Ñ Ð½Ð¸ÐºÐ°Ðº не ÑвÑзана Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ñм ÑезÑлÑÑаÑом и поÑÑомÑ, когда она ÑÑановиÑÑÑ Ð½Ðµ нÑжна, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑзваÑÑPQclear. ÐÑли ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ð¾Ñибкой, она возвÑаÑаеÑNULL.PGresult *PQcopyResult(const PGresult *src, int flags);
Ð¡Ð¾Ð·Ð´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð½Ðµ бÑÐ´ÐµÑ ÑоÑной. РвозвÑаÑаемÑй ÑезÑлÑÑÐ°Ñ Ð²Ñегда помеÑаеÑÑÑ ÑоÑÑоÑние
PGRES_TUPLES_OKи в него не копиÑÑÑÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ðµ ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑÐ¸Ð±ÐºÐ°Ñ Ð¸Ð· иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ обÑекÑа. (Ðднако в него копиÑÑеÑÑÑ ÑÑÑока ÑоÑÑоÑÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ.) ЧÑо еÑÑ Ð² него бÑÐ´ÐµÑ ÐºÐ¾Ð¿Ð¸ÑоваÑÑÑÑ, опÑеделÑÐµÑ Ð°ÑгÑменÑflags, в коÑоÑом ÑкладÑваÑÑÑÑ Ð½ÐµÑколÑко Ñлагов. ФлагPG_COPYRES_ATTRSвклÑÑÐ°ÐµÑ ÐºÐ¾Ð¿Ð¸Ñование аÑÑибÑÑов иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ обÑекÑа (опÑеделений ÑÑолбÑов), а ÑлагPG_COPYRES_TUPLESвклÑÑÐ°ÐµÑ ÐºÐ¾Ð¿Ð¸Ñование коÑÑежей из иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ обÑекÑа (пÑи ÑÑом Ñакже копиÑÑÑÑÑÑ Ð¸ аÑÑибÑÑÑ.) ФлагPG_COPYRES_NOTICEHOOKSвклÑÑÐ°ÐµÑ ÐºÐ¾Ð¿Ð¸Ñование обÑабоÑÑиков замеÑаний, а ÑлагPG_COPYRES_EVENTSâ ÑобÑÑий из иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ обÑекÑа ÑезÑлÑÑаÑа. (Ðо лÑбÑе даннÑе, ÑвÑзаннÑе Ñ ÑкземплÑÑом иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ обÑекÑа, не копиÑÑÑÑÑÑ.)-
PQsetResultAttrs УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð°ÑÑибÑÑÑ Ð¾Ð±ÑекÑа
PGresult.int PQsetResultAttrs(PGresult *res, int numAttributes, PGresAttDesc *attDescs);
ÐÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð½Ð°Ñ ÑÑÑÑкÑÑÑа
attDescsкопиÑÑеÑÑÑ Ð² ÑезÑлÑÑаÑ. ÐÑли ÑказаÑелÑattDescsÑавенNULLилиnumAttributesменÑÑе одного, запÑÐ¾Ñ Ð¸Ð³Ð½Ð¾ÑиÑÑеÑÑÑ Ð¸ ÑÑнкÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ Ð±ÐµÐ· оÑибки. ÐÑлиresÑже ÑодеÑÐ¶Ð¸Ñ Ð°ÑÑибÑÑÑ, ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ð¾Ñибкой. Ð ÑлÑÑае оÑибки ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð½Ð¾Ð»Ñ, а в обÑаÑном ÑлÑÑае â ненÑлевое знаÑение.-
PQsetvalue УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð·Ð½Ð°Ñение Ð¿Ð¾Ð»Ñ ÐºÐ¾ÑÑежа в обÑекÑе
PGresult.int PQsetvalue(PGresult *res, int tup_num, int field_num, char *value, int len);
ÐÑа ÑÑнкÑÐ¸Ñ Ð°Ð²ÑомаÑиÑеÑки ÑвелиÑÐ¸Ð²Ð°ÐµÑ Ð²Ð½ÑÑÑенний маÑÑив коÑÑежей пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи. Ðднако знаÑение
tup_numдолжно бÑÑÑ Ð¼ÐµÐ½ÑÑе или ÑавноPQntuples, ÑÑо ознаÑаеÑ, ÑÑо ÑÑа ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиваÑÑ Ð¼Ð°ÑÑив коÑÑежей ÑолÑко на один коÑÑеж. Ðо в ÑÑÑеÑÑвÑÑÑем коÑÑеже лÑбÑе Ð¿Ð¾Ð»Ñ Ð¼Ð¾Ð³ÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÑÑÑÑ Ð² лÑбом поÑÑдке. ÐÑли знаÑение в поле Ñ Ð½Ð¾Ð¼ÐµÑомfield_numÑже ÑÑÑеÑÑвÑеÑ, оно бÑÐ´ÐµÑ Ð¿ÐµÑезапиÑано. ÐÑлиlenÑавно -1 илиvalueÑавноNULL, в поле бÑÐ´ÐµÑ Ð·Ð°Ð¿Ð¸Ñано знаÑение SQL NULL. УÑÑанавливаемое знаÑение (value) копиÑÑеÑÑÑ Ð² закÑÑÑÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð¾Ð±ÑекÑа ÑезÑлÑÑаÑа, Ñак ÑÑо Ð¾Ñ Ð½ÐµÐ³Ð¾ можно избавиÑÑÑÑ Ð¿Ð¾Ñле завеÑÑÐµÐ½Ð¸Ñ ÑÑнкÑии. ÐÑли ÑÑнкÑÐ¸Ñ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ð¾Ñибкой, она возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð»Ñ, а в обÑаÑном ÑлÑÑае â ненÑлевое знаÑение.-
PQresultAlloc ÐÑделÑÐµÑ Ð¿Ð¾Ð´ÑинÑннÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð¿Ð°Ð¼ÑÑи Ð´Ð»Ñ Ð¾Ð±ÑекÑа
PGresult.void *PQresultAlloc(PGresult *res, size_t nBytes);
ÐÑÐ±Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ, вÑÐ´ÐµÐ»ÐµÐ½Ð½Ð°Ñ ÑÑой ÑÑнкÑией, бÑÐ´ÐµÑ Ð¾Ñвобождена пÑи оÑиÑÑке обÑекÑа
res. Ð ÑлÑÑае оÑибки ÑÑа ÑÑнкÑÐ¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑNULL. РезÑлÑÑÐ°Ñ Ð³Ð°ÑанÑиÑованно вÑÑавниваеÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñм обÑазом Ð´Ð»Ñ Ð»Ñбого Ñипа даннÑÑ , как и пÑиmalloc.-
PQlibVersion ÐозвÑаÑÐ°ÐµÑ Ð²ÐµÑÑÐ¸Ñ Ð¸ÑполÑзÑемой библиоÑеки libpq.
int PQlibVersion(void);
Ðо ÑезÑлÑÑаÑÑ ÑÑой ÑÑнкÑии можно во вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделиÑÑ, пÑедоÑÑавлÑеÑÑÑ Ð»Ð¸ опÑеделÑÐ½Ð½Ð°Ñ ÑÑнкÑионалÑноÑÑÑ Ð·Ð°Ð³ÑÑженной в даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²ÐµÑÑией libpq. ÐÑа ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ, напÑимеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð½ÑÑÑ, какие паÑамеÑÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинÑÑÑ
PQconnectdb.ÐÑо ÑиÑло ÑоÑмиÑÑеÑÑÑ Ð² ÑезÑлÑÑаÑе ÑÐ¼Ð½Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑа оÑновной веÑÑии библиоÑеки на 10000 и Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑа дополниÑелÑной веÑÑии. ÐапÑимеÑ, Ð´Ð»Ñ Ð²ÐµÑÑии 10.1 бÑÐ´ÐµÑ Ð²Ñдано 100001, а Ð´Ð»Ñ Ð²ÐµÑÑии 11.0 â 110000.
Ðо веÑÑии 10, в Postgres Pro номеÑа веÑÑий обÑазовÑвалиÑÑ Ð¸Ð· ÑÑÑÑ ÑиÑел, пеÑвÑе два из коÑоÑÑÑ Ð¿ÑедÑÑавлÑли оÑновнÑÑ Ð²ÐµÑÑиÑ. ÐÐ»Ñ ÑÐ°ÐºÐ¸Ñ Ð²ÐµÑÑий
PQlibVersionоÑÐ²Ð¾Ð´Ð¸Ñ Ð½Ð° каждое ÑиÑло по две ÑиÑÑÑ; напÑимеÑ, Ð´Ð»Ñ Ð²ÐµÑÑии 9.1.5 бÑÐ´ÐµÑ Ð²Ñдано 90105, а Ð´Ð»Ñ Ð²ÐµÑÑии 9.2.0 â 90200.Таким обÑазом, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий Ð½Ð¾Ð¼ÐµÑ Ð²ÐµÑÑии Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпноÑÑи ÑÑнкÑионала, пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑазделиÑÑ ÑезÑлÑÑаÑ
PQlibVersionна 100, а не на 10000. Ðо вÑÐµÑ ÑеÑиÑÑ Ð½Ð¾Ð¼ÐµÑа дополниÑелÑнÑÑ (коÑÑекÑиÑÑÑÑÐ¸Ñ ) вÑпÑÑков ÑазлиÑаÑÑÑÑ ÑолÑко в двÑÑ Ð¿Ð¾ÑÐ»ÐµÐ´Ð½Ð¸Ñ ÑиÑÑÐ°Ñ .ÐÑимеÑание
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾ÑвилаÑÑ Ð² PostgreSQL веÑÑии 9.1, поÑÑÐ¾Ð¼Ñ Ñ ÐµÑ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð¿ÑовеÑиÑÑ ÑÑнкÑионалÑноÑÑÑ Ð¿ÑедÑдÑÑÐ¸Ñ Ð²ÐµÑÑий, Ñак как пÑи вÑзове ÐµÑ Ð±ÑÐ´ÐµÑ Ñоздана завиÑимоÑÑÑ Ð¾Ñ Ð²ÐµÑÑии 9.1 или новее.