postgresql postgres客户端的后续请求

4xrmg8kj  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(79)

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

ef1yzkbh

ef1yzkbh1#

是的,这是可能的;请参阅前端-后端协议的文档:
使用扩展查询协议允许流水线操作,这意味着发送一系列查询而不等待前面的查询完成。这减少了完成给定系列操作所需的网络往返次数。但是,如果其中一个步骤失败,用户必须仔细考虑所需的行为,因为后面的查询已经在向服务器发送。
[...]
扩展查询协议提供了另一种管理此问题的方法,即省略在依赖的步骤之间发送Sync消息。由于在出错后,后端将跳过命令消息,直到找到Sync,这允许在管道中较早的命令失败时自动跳过较晚的命令,而客户端不必使用开始和COMMIT显式地管理它。管道的可独立提交段可以通过Sync消息分隔。
PostgreSQL的最新版本在C API中支持这种模式,参见the documentation。我不认为JDBC驱动程序支持管道模式,但我不确定。Python driver have support for pipeline mode的最新版本也是如此。
很容易区分哪个响应属于哪个语句,因为响应到达的顺序与语句发送的顺序相同。
有关更多细节和C代码示例,请参见my article

相关问题