PostgreSQL 取消進(jìn)行中的查詢

2021-09-02 11:25 更新

一個(gè)客戶端應(yīng)用可以使用本節(jié)描述的函數(shù)請求取消一個(gè)仍在被服務(wù)器處理的命令。

PQgetCancel

創(chuàng)建一個(gè)數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)包含取消一個(gè)通過特定數(shù)據(jù)庫連接發(fā)出的命令所需要的信息。

PGcancel *PQgetCancel(PGconn *conn);

PQgetCancel 創(chuàng)建一個(gè)PGcancel 對象,給出一個(gè) PGconn 連接對象。 他將返回NULL,如果給出的connNULL 或是一個(gè)無效的連接。 The PGcancel 對象是一個(gè)不透明結(jié)構(gòu),不應(yīng)該被應(yīng)用所直接訪問。它只能夠傳遞到 PQcancelPQfreeCancel。

PQfreeCancel

釋放一個(gè)由PQgetCancel創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)。

void PQfreeCancel(PGcancel *cancel);

PQfreeCancel釋放一個(gè)之前由PQgetCancel創(chuàng)建的數(shù)據(jù)對象。

PQcancel

要求服務(wù)器放棄當(dāng)前命令的處理。

int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize);

如果取消請求成功發(fā)送,則返回值為 1,否則為 0。如果不成功,則errbuf會(huì)被填充一個(gè)解釋性的錯(cuò)誤消息。errbuf必須是一個(gè)尺寸為errbufsize的字符數(shù)組(推薦尺寸為 256 字節(jié))。,解釋為何不成功。errbuf必須是 一個(gè)大小為errbufsize的 char 數(shù)組(建議大小為 256 字節(jié))。

不過,成功的發(fā)送并不保證請求會(huì)有任何效果。如果取消有效,那么當(dāng)前的命令將提前終止并且返回一個(gè)錯(cuò)誤結(jié)果。如果取消失?。ㄒ簿褪钦f, 因?yàn)榉?wù)器已經(jīng)完成命令的處理),那么就根本不會(huì)有可見的結(jié)果。

如果errbuf是信號(hào)處理器中的一個(gè)局部變量,PQcancel可以從一個(gè)信號(hào)處理器中安全地調(diào)用。 在PGcancel有關(guān)的范圍內(nèi), PQcancel 都是只讀的,因此也可以在一個(gè)從操縱PGconn對象的線程中獨(dú)立出來的線程中調(diào)用它。

PQrequestCancel

PQrequestCancelPQcancel的一個(gè)被廢棄的變體。

int PQrequestCancel(PGconn *conn);

要求服務(wù)器放棄當(dāng)前命令的處理。它直接在PGconn對象上進(jìn)行操作, 并且如果失敗,就會(huì)在PGconn對象里存儲(chǔ)錯(cuò)誤消息(因此可以用PQerrorMessage檢索出來)。 盡管功能相同,這個(gè)方法在多線程程序里和信號(hào)處理器里會(huì)帶來危險(xiǎn),因?yàn)樗赡? 覆蓋PGconn的錯(cuò)誤消息,進(jìn)而將當(dāng)前連接上正在處理的操作搞亂。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)