# 34.7.取消正在进行的查询

客户端应用程序可以使用本节介绍的功能,请求取消服务器仍在处理的命令。

PQgetCancel

创建一个数据结构,其中包含取消通过特定数据库连接发出的命令所需的信息。

PGcancel *PQgetCancel(PGconn *conn);

PQgetCancel创造一个取消给定的对象PGconn连接对象。它会回来的无效的如果*康涅狄格州*是无效的或者是无效的连接。这个取消对象是一个不透明的结构,应用程序不能直接访问它;它只能传递给取消PQfreeCancel.

PQfree取消

释放由创建的数据结构PQgetCancel.

void PQfreeCancel(PGcancel *cancel);

PQfree取消释放先前创建的数据对象PQgetCancel.

取消

请求服务器放弃当前命令的处理。

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

如果取消请求成功发送,则返回值为 1,否则返回 0.如果不,错误的充满了解释性错误消息。错误的必须是大小为 char 的数组错误大小(推荐大小为 256 字节)。

但是,成功发送并不能保证请求会产生任何效果。如果取消有效,当前命令将提前终止并返回错误结果。如果取消失败(例如,因为服务器已经完成了命令的处理),那么根本不会有可见的结果。

取消可以安全地从信号处理程序调用,如果*错误的*是信号处理程序中的局部变量。这PG取消对象是只读的取消是有关的,因此它也可以从与操作线程分开的线程中调用PGconn目的。

PQrequest取消

PQrequest取消是不推荐使用的变体取消.

int PQrequestCancel(PGconn *conn);

请求服务器放弃当前命令的处理。它直接在PGconn对象,并在失败的情况下将错误消息存储在PGconn对象(可以通过以下方式检索它)PQerrorMessage)。尽管功能相同,但这种方法会为多线程程序和信号处理程序带来危险,因为可能会覆盖PGconn的错误消息将弄乱当前正在进行的连接操作。