来自 postgres 客户端的后续请求

问题描述 投票:0回答:1

Postgres客户端是否支持发送后续请求而不接收响应?如果是这样,客户端如何将请求与服务器的响应关联起来?

postgresql network-programming
1个回答
0
投票

是的,这是可能的;请参阅前后端协议文档

使用扩展查询协议允许管道操作,这意味着发送一系列查询而无需等待早期查询完成。这减少了完成给定系列操作所需的网络往返次数。但是,如果其中一个步骤失败,用户必须仔细考虑所需的行为,因为后续查询将已经发送到服务器。

[...]

扩展查询协议提供了另一种方法来管理此问题,即省略在相关步骤之间发送同步消息。由于在发生错误后,后端将跳过命令消息,直到找到同步,这允许在较早的命令失败时自动跳过管道中的后续命令,而客户端无需使用 BEGIN 和 COMMIT 显式管理该命令。管道的独立可提交段可以通过同步消息分隔。

最新版本的 PostgreSQL 在 C API 中支持该功能,请参阅文档。我不认为 JDBC 驱动程序支持管道模式,但我不确定。最新版本的 Python 驱动程序也支持管道模式

很容易辨别哪个响应属于哪个语句,因为响应到达的顺序与发送语句的顺序相同。

有关更多详细信息和 C 代码示例,请参阅我的文章

© www.soinside.com 2019 - 2024. All rights reserved.