德尼·拉克萨尔德:PostgreSQL 17和Psycopg 3.2中的改进查询取消功能

💡 原文英文,约700词,阅读约需3分钟。
📝

内容提要

PostgreSQL 17和Psycopg版本3.2将提供改进的查询取消功能,通过添加更好的取消请求机制和加密连接来实现。Psycopg将在即将发布的3.2版本中集成此功能,实现非阻塞查询取消。

🔎

延伸解读

非阻塞取消如何提升异步应用性能

在异步编程中,阻塞操作会拖慢整个事件循环。PostgreSQL 17 新增的 PQcancelStart 和 PQcancelPoll 允许非阻塞地发送取消请求,Psycopg 3.2 的 cancel_safe 方法正是基于此。这意味着在等待取消完成时,程序可以继续处理其他请求,避免因取消操作而卡住。对于使用 asyncio 等框架的应用,这能显著提升响应性和吞吐量。

取消连接加密:安全性的重要补强

旧版 PQcancel API 在发送取消请求时不加密连接,即使原连接已加密,这可能导致敏感信息泄露。PostgreSQL 17 的 PQcancelConn 结构确保取消连接使用与原连接相同的加密设置。Psycopg 3.2 集成后,cancel_safe 方法将自动继承这一安全特性,使取消操作不再成为安全链条中的薄弱环节。

向后兼容与平滑升级

Psycopg 3.2 的 cancel_safe 方法设计为向后兼容:如果底层 libpq 版本低于 17,它会回退到原有的 cancel() 实现。这意味着开发者无需立即升级 PostgreSQL 即可使用新方法,但只有搭配 PostgreSQL 17 才能获得非阻塞和加密的优势。这种渐进式升级路径降低了采用门槛,同时鼓励用户跟进最新版本。

❓

Q&A

PostgreSQL 17的查询取消功能有什么改进?

PostgreSQL 17改进了查询取消功能,增加了非阻塞查询取消和加密连接,改善了PQcancel API。

Psycopg 3.2如何集成新的查询取消功能?

Psycopg 3.2将集成新的PQcancel接口,支持非阻塞的cancel()方法,并与Daniele Varrazzo合作提升安全性。

PQcancelConn结构的作用是什么?

PQcancelConn结构提供了更好的取消请求机制,支持加密连接并允许非阻塞的取消请求。

Psycopg的cancel_safe方法有什么特点?

cancel_safe方法是非阻塞的,允许在等待取消时处理其他请求,并在超时后抛出CancellationTimeout异常。

如何使用Psycopg的非阻塞查询取消功能?

可以通过AsyncConnection类的cancel_safe方法实现非阻塞查询取消,允许在执行长时间查询时处理其他操作。

PostgreSQL 17和Psycopg 3.2的发布有什么时间安排?

PostgreSQL 17和Psycopg 3.2的具体发布日期尚未确定,但预计将很快推出。

🏷️

标签

➡️

继续阅读