W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
服務器產(chǎn)生的通知和警告消息不會被查詢執(zhí)行函數(shù)返回,因為它們不代表查詢失敗。它們可以被傳遞給一個通知處理函數(shù),并且在處理者返回后執(zhí)行會繼續(xù)正常進行。默認的處理函數(shù)會把消息打印在stderr
上,但是應用可以通過提供它自己的處理函數(shù)來重載這種行為。
由于歷史原因,通知處理有兩個級別,稱為通知接收器和通知處理器。通知接收器的默認行為是格式化通知并且將一個字符串傳遞給通知處理器來打印。不過,如果一個應用選擇提供自己的通知接收器,它通常會忽略通知處理器層并且在通知接收器中完成所有工作。
函數(shù)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);
這些函數(shù)中的每一個會返回之前的通知接收器或處理器函數(shù)指針,并且設置新值。如果你提供了一個空函數(shù)指針,將不會采取任何動作,只會返回當前指針。
當接收到一個服務器產(chǎn)生的或者libpq內(nèi)部產(chǎn)生的通知或警告消息,通知接收器函數(shù)會被調(diào)用。 它會以一種PGRES_NONFATAL_ERROR
PGresult
的形式傳遞該消息 (這允許接收器使用
PQresultErrorField
抽取個別的域,或者使用PQresultErrorMessage
或者PQresultVerboseErrorMessage
得到一個完整的預格式化的消息)。
被傳遞給PQsetNoticeReceiver
的同一個空指針也被傳遞(必要時,這個指針可以被用來訪問應用相關(guān)的狀態(tài))。
默認的通知接收器會簡單地抽取消息(使用PQresultErrorMessage
)并且將它傳遞給通知處理器。
通知處理器負責處理一個以文本形式給出的通知或警告消息。該消息的字符串文本(包括一個收尾的新行)被傳遞給通知處理器,外加一個同時被傳遞給PQsetNoticeProcessor
的空指針(必要時,這個指針可以被用來訪問應用相關(guān)的狀態(tài))。
默認的通知處理器很簡單:
static void
defaultNoticeProcessor(void *arg, const char *message)
{
fprintf(stderr, "%s", message);
}
一旦你設定了一個通知接收器或處理器,你應該期待只要PGconn
對象或者從它構(gòu)造出的PGresult
對象存在,該函數(shù)就應該能被調(diào)用。 在一個PGresult
創(chuàng)建時,PGconn
的當前通知處理指針被復制到PGresult
中,以備類似
PQgetvalue
的函數(shù)使用。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: