33.11. ФÑнкÑии ÑпÑавлениÑ
ÐÑи ÑÑнкÑии ÑпÑавлÑÑÑ ÑазлиÑнÑми аÑпекÑами Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ libpq.
PQclientEncodingÐозвÑаÑÐ°ÐµÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ ÐºÐ»Ð¸ÐµÐ½Ñа.
int PQclientEncoding(const PGconn *
conn);ÐамеÑÑÑе, ÑÑо она возвÑаÑÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÐºÐ¾Ð´Ð¸Ñовки, а не ÑимволÑнÑÑ ÑÑÑÐ¾ÐºÑ Ð²Ð¸Ð´Ð°
EUC_JP. Ð ÑлÑÑае оÑибки она возвÑаÑÐ°ÐµÑ -1. ÐÑеобÑазоваÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÐºÐ¾Ð´Ð¸Ñовки в Ð¸Ð¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾, воÑполÑзовавÑиÑÑ ÑледÑÑÑей ÑÑнкÑией:char *pg_encoding_to_char(int
encoding_id);PQsetClientEncodingУÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ ÐºÐ»Ð¸ÐµÐ½Ñа.
int PQsetClientEncoding(PGconn *
conn, const char *encoding);Ð
connпеÑедаÑÑÑÑ Ñоединение Ñ ÑеÑвеÑом, а вencodingâ Ð¸Ð¼Ñ ÑÑебÑемой кодиÑовки. ÐÑли ÑÑнкÑÐ¸Ñ ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ ÑÑпеÑно, она возвÑаÑÐ°ÐµÑ 0, или -1 в пÑоÑивном ÑлÑÑае. ÐпÑеделиÑÑ ÑекÑÑÑÑ ÐºÐ¾Ð´Ð¸ÑÐ¾Ð²ÐºÑ Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾, воÑполÑзовавÑиÑÑ ÑÑнкÑиейPQclientEncoding.PQsetErrorVerbosityÐпÑеделÑÐµÑ ÑÑÐ¾Ð²ÐµÐ½Ñ Ð´ÐµÑализаÑии ÑообÑений, возвÑаÑаемÑÑ ÑÑнкÑиÑми
PQerrorMessageиPQresultErrorMessage.typedef enum { PQERRORS_TERSE, PQERRORS_DEFAULT, PQERRORS_VERBOSE, PQERRORS_SQLSTATE } PGVerbosity; PGVerbosity PQsetErrorVerbosity(PGconn *conn, PGVerbosity verbosity);PQsetErrorVerbosityÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñежим деÑализаÑии и возвÑаÑÐ°ÐµÑ Ð¿ÑедÑдÑÑее знаÑение Ð´Ð»Ñ ÑоединениÑ. Р«лакониÑном» Ñежиме (TERSE) возвÑаÑаемÑе ÑообÑÐµÐ½Ð¸Ñ ÑодеÑÐ¶Ð°Ñ ÑолÑко ÑÑÐ¾Ð²ÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ÑÑи, оÑновной ÑекÑÑ Ð¸ позиÑиÑ; вÑÑ ÑÑо обÑÑно ÑмеÑаеÑÑÑ Ð² одной ÑÑÑоке. Ð Ñежиме по ÑмолÑÐ°Ð½Ð¸Ñ (DEFAULT) вÑдаваемÑе ÑообÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно ÑодеÑÐ¶Ð°Ñ Ð¿Ð¾Ð»Ñ Ð¿Ð¾Ð´Ñобного опиÑаниÑ, подÑказки или конÑекÑÑа (они могÑÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð½ÐµÑколÑко ÑÑÑок). Р«многоÑловном» Ñежиме (VERBOSE) пеÑедаÑÑÑÑ Ð²Ñе доÑÑÑпнÑе Ð¿Ð¾Ð»Ñ ÑообÑениÑ. Ð Ñежиме SQLSTATE вÑдаÑÑÑÑ ÑолÑко ÑÑÐ¾Ð²ÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ÑÑи и код оÑибкиSQLSTATE, еÑли он имееÑÑÑ (еÑли же его неÑ, вÑводиÑÑÑ Ñа же инÑоÑмаÑиÑ, ÑÑо и в Ñежиме TERSE).Ðзменение ÑÑÐ¾Ð²Ð½Ñ Ð´ÐµÑализаÑии не влиÑÐµÑ Ð½Ð° ÑообÑениÑ, Ñже ÑÑоÑмиÑованнÑе в ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð¾Ð±ÑекÑаÑ
PGresult, а заÑÑÐ°Ð³Ð¸Ð²Ð°ÐµÑ ÑолÑко поÑледÑÑÑие ÑообÑениÑ. (Ðо можно воÑполÑзоваÑÑÑÑPQresultVerboseErrorMessage, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿ÑедÑдÑÑÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ñ Ð´ÑÑгим ÑÑовнем деÑализаÑии.)PQsetErrorContextVisibilityÐпÑеделÑÐµÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¾Ð±ÑабоÑки полей
CONTEXTв ÑообÑениÑÑ , возвÑаÑаемÑÑ ÑÑнкÑиÑмиPQerrorMessageиPQresultErrorMessage.typedef enum { PQSHOW_CONTEXT_NEVER, PQSHOW_CONTEXT_ERRORS, PQSHOW_CONTEXT_ALWAYS } PGContextVisibility; PGContextVisibility PQsetErrorContextVisibility(PGconn *conn, PGContextVisibility show_context);PQsetErrorContextVisibilityÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ñежим вÑвода конÑекÑÑа и возвÑаÑÐ°ÐµÑ Ð¿ÑедÑдÑÑее знаÑение Ð´Ð»Ñ ÑоединениÑ. ÐÑÐ¾Ñ Ñежим опÑеделÑеÑ, бÑÐ´ÐµÑ Ð»Ð¸ полеCONTEXTвклÑÑаÑÑÑÑ Ð² ÑообÑениÑ. Ð Ñежиме NEVER полеCONTEXTне вклÑÑаеÑÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð°, а в Ñежиме ALWAYS вклÑÑаеÑÑÑ Ð²Ñегда, пÑи налиÑии. Ð Ñежиме ERRORS (по ÑмолÑаниÑ) полеCONTEXTвклÑÑаеÑÑÑ ÑолÑко в ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð± оÑÐ¸Ð±ÐºÐ°Ñ , но не в замеÑÐ°Ð½Ð¸Ñ Ð¸ пÑедÑпÑеждениÑ. (Ðднако пÑи ÑÑовне деÑализаÑии TERSE или SQLSTATE полеCONTEXTопÑÑкаеÑÑÑ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ Ñежима вÑвода конÑекÑÑа.)Смена ÑÑого Ñежима не влиÑÐµÑ Ð½Ð° ÑообÑениÑ, Ñже ÑÑоÑмиÑованнÑе в ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð¾Ð±ÑекÑаÑ
PGresult, а заÑÑÐ°Ð³Ð¸Ð²Ð°ÐµÑ ÑолÑко поÑледÑÑÑие ÑообÑениÑ. (Ðо можно воÑполÑзоваÑÑÑÑPQresultVerboseErrorMessage>, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð¿ÑедÑдÑÑÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð² дÑÑгом Ñежиме вÑвода.)PQtraceÐклÑÑÐ°ÐµÑ ÑÑаÑÑиÑÐ¾Ð²ÐºÑ ÐºÐ»Ð¸ÐµÐ½Ñ-ÑеÑвеÑного взаимодейÑÑÐ²Ð¸Ñ Ñ Ð²Ñводом в поÑок оÑладоÑнÑÑ ÑообÑений.
void PQtrace(PGconn *conn, FILE *stream);
ÐÐ°Ð¶Ð´Ð°Ñ ÑÑÑока ÑодеÑжиÑ: необÑзаÑелÑнÑÑ Ð¾ÑмеÑÐºÑ Ð²Ñемени, индикаÑÐ¾Ñ Ð½Ð°Ð¿ÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ (
FÐ´Ð»Ñ ÑообÑений клиенÑа ÑеÑвеÑÑ Ð¸Ð»Ð¸BÐ´Ð»Ñ ÑообÑений ÑеÑвеÑа клиенÑÑ), Ð´Ð»Ð¸Ð½Ñ ÑообÑениÑ, Ñип ÑообÑÐµÐ½Ð¸Ñ Ð¸ ÑодеÑжимое ÑообÑениÑ. ÐÐ¾Ð»Ñ ÑодеÑжимого, не ÑвÑзаннÑе Ñ ÑообÑением (оÑмеÑка вÑемени, напÑавление, длина и Ñип ÑообÑениÑ), ÑазделÑÑÑÑÑ ÑабÑлÑÑией. СодеÑжимое ÑообÑÐµÐ½Ð¸Ñ ÑазделÑеÑÑÑ Ð¿Ñобелами. СÑÑоки пÑоÑокола заклÑÑаÑÑÑÑ Ð² двойнÑе кавÑÑки, а ÑÑÑоки, иÑполÑзÑемÑе в каÑеÑÑве знаÑений даннÑÑ , â в апоÑÑÑоÑÑ. ÐепеÑаÑаемÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²ÑводÑÑÑÑ Ð² виде ÑеÑÑнадÑаÑеÑиÑнÑÑ ÑпеÑпоÑледоваÑелÑноÑÑей. ÐополниÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ ÑÐ¸Ð¿Ð°Ñ ÑообÑений можно найÑи в Разделе 54.7.ÐÑимеÑание
Ð Windows, еÑли библиоÑека libpq и пÑиложение ÑкомпилиÑÐ¾Ð²Ð°Ð½Ñ Ñ ÑазнÑми Ñлагами, ÑÑа ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ ÐºÑÐ°Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð·-за ÑазлиÑий внÑÑÑеннего пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑказаÑелей
FILE. Ð ÑаÑÑноÑÑи, Ñлаги многопоÑоÑной/однопоÑоÑной, вÑпÑÑкаемой/оÑладоÑной или ÑÑаÑиÑеÑкой/динамиÑеÑкой ÑбоÑки Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми Ð´Ð»Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки и вÑÐµÑ Ð¸ÑполÑзÑÑÑÐ¸Ñ ÐµÑ Ð¿Ñиложений.PQsetTraceFlagsУпÑавлÑÐµÑ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸ÐµÐ¼ ÑÑаÑÑиÑовки клиенÑ-ÑеÑвеÑного взаимодейÑÑвиÑ.
void PQsetTraceFlags(PGconn *conn, int flags);
flagsÑодеÑÐ¶Ð¸Ñ Ð±Ð¸ÑÑ Ñлагов, опиÑÑваÑÑие Ñежим ÑабоÑÑ ÑÑаÑÑиÑовки. ÐÑлиflagsÑодеÑжиÑPQTRACE_SUPPRESS_TIMESTAMPS, меÑка вÑемени не добавлÑеÑÑÑ Ð¿Ñи пеÑаÑи каждого ÑообÑениÑ. ÐÑли паÑамеÑÑflagsÑодеÑжиÑPQTRACE_REGRESS_MODE, некоÑоÑÑе Ð¿Ð¾Ð»Ñ Ð² вÑводимÑÑ ÑообÑениÑÑ ÑедакÑиÑÑÑÑÑÑ, в ÑаÑÑноÑÑи заменÑÑÑÑÑ OID обÑекÑов, ÑÑÐ¾Ð±Ñ ÑÑÐ¾Ñ Ð²Ñвод можно бÑло иÑполÑзоваÑÑ Ð¿Ñи ÑеÑÑиÑовании. ÐÑа ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° вÑзÑваÑÑÑÑ Ð¿Ð¾Ñле вÑзоваPQtrace.PQuntraceÐÑклÑÑÐ°ÐµÑ ÑÑаÑÑиÑовкÑ, запÑÑеннÑÑ ÑÑнкÑией
PQtrace.void PQuntrace(PGconn *conn);