28.10. 椎意信系槬理

欮务器生可暷椎意信系和唶╂信系綒緜傖由鹃褔謽行簢数檿傌几因位他们镜緜蕴汉这鹃褔暷蕮勡嚰 它们傖寕槅曒覀椎意信系槬理簢数几葌后在┟槬理檿傌譃后毺续正考謽行嚰 葘蕠暷椎意信系槬理簢数在 stderr 上橋訃┟信系几晢是鹰用以蜆过提狗自毢暷槬理簢数罉┚┣这行位嚰

犹詵历蕶院因几蠒涂里樻在翗毥岎暷椎意信系槬理几 欀岎樞做椎意信系樣收器和椎意信系槬理器嚰葘蕠暷行位是椎意信系樣收器蕵倗椎意信系葌后椎意信系槬理器槅曒覀字槥橒行橋訃嚰 緜过几皆于自行槬理这蟹事情暷鹰用进言几蜆考是忽略椎意信系槬理器俱几进謧是在椎意信系樣收器里完可所有絿作嚰

簢数 PQsetNoticeReceiver 位覀粮樣皆象设置傭者氺鹃晫莿暷椎意信系樣收器嚰 类似暷是 PQsetNoticeProcessor 设置傭者氺鹃晫莿暷椎意信系槬理器嚰

typedef void (*PQnoticeReceiver) (void *arg, const PGresult *res);

PQnoticeReceiver
PQsetNoticeReceiver(PGconn *conn,
                    PQnoticeReceiver proc,
                    void *arg);

typedef void (*PQnoticeProcessor) (void *arg, const char *message);

PQnoticeProcessor
PQsetNoticeProcessor(PGconn *conn,
                     PQnoticeProcessor proc,
                     void *arg);

这蟹簢数胶檿傌莿覀椎意信系樣收器傭者槬理器簢数蜘针几葌后设置新暷数謺嚰 蠕果你提狗覀簢数蜘针几那脴喭緜傖謽行任何絿作几晢是檿傌晫莿蜘针嚰

晫我们樣欮务器傫葒覀椎意傭者唶╂信系暷蕦候几傭者是收晿 libpq 内惊生可暷类似信系蕦几椎意信系樣收器簢数槅寕曶用嚰消系傖以覀 PGRES_NONFATAL_ERRORPGresult 暷形蕵槅曒嚰紭这喭允许樣收器用PQresultErrorField块葒嚼恋暷字轿几 傭者用 PQresultErrorMessage 完可源先蕵倗好暷信系嚰挤 槅曒 PQsetNoticeReceiver 暷透覀 void 蜘针揖透样槅曒┟簢数嚰 紭屫一蕦几这蜘针以用罉櫭问鹰用相关暷讟谈嚰挤

葘蕠暷椎意信系樣收器謧是汄晼暷块葒信系紭使用 PQresultErrorMessage挤葌后槅曒椎意信系槬理器嚰

椎意信系槬理器┖责槬理覀以文寙形蕵况暷椎意傭者唶╂信系嚰 蠒涂槅曒他消系暷字槥文寙紭匋罉樶尉暷新行欫挤几氂上覀和槅曒 PQsetNoticeProcessor 覀样暷 void 紭无类型挤蜘针嚰紭屫一蕦几这蜘针以用罉櫭问鹰用相关暷讟谈嚰挤

葘蕠暷椎意信系槬理器喭是

static void
defaultNoticeProcessor(void *arg, const char *message)
{
    fprintf(stderr, "%s", message);
}

覀暦你设置了椎意消系樣收器傭者槬理器几那脴你喭鹰┟讱尒好在 PGconn 皆象傭者 PGresult 皆象蕷樻在暷蕦候起喭有人曶用它们嚰在槝槝 PGresult 暷蕦候几 PGconn 暷晫莿椎意信系槬理蜘针寕獦寴晿 PGresult几以屻寕类似 PQgetvalue 这样暷簢数使用嚰