↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0
历史版本PostgreSQL 13 已于 2025 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

33.6. 取消进行中的查询 #

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

PQgetCancel #

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

PGcancel *PQgetCancel(PGconn *conn);

PQgetCancel 基于一个 PGconn 连接对象创建 PGcancel 对象。如果给定的 conn 为 NULL 或无效连接,则返回 NULL。PGcancel 是不透明结构体,不应由应用程序直接访问;它只能传给 PQcancel 或 PQfreeCancel。

PQfreeCancel #

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

void PQfreeCancel(PGcancel *cancel);

PQfreeCancel 释放先前由 PQgetCancel 创建的数据对象。

PQcancel #

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

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

返回值为 1 表示取消请求成功发送,为 0 表示未成功发送。如果未成功发送,errbuf 将填充解释性错误消息。errbuf 必须是大小为 errbufsize 的字符数组(推荐大小为 256 字节)。

取消请求成功分派并不保证一定会产生效果。如果取消成功,当前命令会提前终止并返回错误结果;如果取消失败(例如服务器已经处理完该命令),则不会有任何可见结果。

如果 errbuf 是信号处理程序中的局部变量,则 PQcancel 可以安全地从信号处理程序中调用。对于 PQcancel 而言,PGcancel 对象是只读的,因此也可以从与操作 PGconn 对象的线程不同的线程中调用。

PQrequestCancel #

PQrequestCancel 是 PQcancel 的一个已弃用变体。

int PQrequestCancel(PGconn *conn);

请求服务器放弃当前命令的处理。它直接作用于 PGconn 对象,失败时会把错误消息存储到 PGconn 对象中(可通过 PQerrorMessage 获取)。虽然功能相同,但这种方法在多线程程序或信号处理程序中并不安全,因为它可能覆盖 PGconn 中的错误消息,从而破坏当前连接上正在进行的操作。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。