1.介绍
本篇博客用于解释扩展协议的工作原理以及它与简单查询的区别。
2.简单查询
在PostgreSQL中,客户端连接能够发起两种类型的查询:简单查询和扩展协议查询。
简单查询顾名思义。
当启动 psql 客户端连接到pg服务器时,几乎所有发送的sql命令会被视为简单查询。
包括使用 begin 和 commit 包起来的显式事务;使用分号分割的多语句查询;执行或定义函数等等。
简单查询自动遵循标准查询处理流程,其中包括以下阶段:
- Parser
- Analyzer
- Rewriter
- Planner
- Executor
这些具体含义这里不再赘述。网上的资料很多。
客户端和服务器之间的通信也非常简单。
case 1, insert
客户端将查询发送到服务器进行处理,服务器响应一个 CommandComplete 消息(比如 INSERT 0 1,接一个ReadyForQuery(IDLE)消息),表示现在服务器已经完成了查询,目前是闲置状态,客户端可以发送另一个查询,新的查询遵循同样的逻辑。
case 2, select
在 SELECT 查询的情况下,服务器将先发送结果 row 的行结构描述,然后发送满足查询的实际行数据,直到没有更多行可返回为止。
最后,