33.6. 取消進行中的查詢
一個用戶端應用可以使用本節描述的函數請求取消一個仍在被伺服器處理的指令。
-
PQgetCancel
- 建立一個資料結構,這個資料結構包含取消一個通過特定資料庫連接配接發出的指令所需要的資訊。
給出一個PQgetCancel連接配接對象,PQgetCancel建立一個 PGcancel對象。如果給出 的conn是NULL或者是一個無效的連接配接,那麼它将傳回NULL。PGcancel對象是一個不透明的結構, 不應該為應用所直接通路;我們隻能把它傳遞給PQcancel或者PQfreeCancel。 給定一個PGcancel *PQgetCancel(PGconn *conn);
連接配接對象,PGconn
建立一個PQgetCancel
對象。如果給定的PGcancel
為conn
或者一個不合法的連接配接,它将傳回NULL
。NULL
對象是一個透明的結構,它不能直接被應用通路。它隻能被傳遞給PGcancel
或PQcancel
PQfreeCancel
-
PQfreeCancel
- 釋放一個由
建立的資料結構。PQgetCancel
PQfreeCancel釋放一個由前面的PQgetCancel建立的資料對象。void PQfreeCancel(PGcancel *cancel);
釋放一個之前由PQfreeCancel
建立的資料對象。PQgetCancel
-
PQcancel
- 要求伺服器放棄目前指令的處理。
如果取消請求成功發送,則傳回值為 1,否則為 0。如果不成功,則int PQcancel(PGcancel *cancel, char *errbuf, int errbufsize);
會被填充一個解釋性的錯誤消息。errbuf
必須是一個尺寸為errbuf
errbufsize
的字元數組(推薦尺寸為 256 位元組)。,解釋為何不成功。errbuf必須是 一個大小為errbufsize的 char 數組(建議大小為 256 位元組)。
不過,成功的發送并不保證請求會有任何效果。如果取消有效,那麼目前的指令将提前終止并且傳回一個錯誤結果。如果取消失敗(也就是說, 因為伺服器已經完成指令的處理),那麼就根本不會有可見的結果。
如果PQcancel是信号句柄裡的一個局部變量,那麼PQcancel可以在一個信号 句柄裡安全地調用。在PQcancel涉及的範圍裡,PQcancel對象都是隻讀的, 是以我們也可以從一個與處理PGconn對象的線程分離的線程裡處理它。 如果
是信号處理器中的一個局部變量,errbuf
可以從一個信号處理器中安全地調用。在PQcancel
有關的範圍内,PGcancel
都是隻讀的,是以也可以在一個從操縱PQcancel
對象的線程中獨立出來的線程中調用它。PGconn