这里是对查询获取结果必须经过的阶段的简要概述。
必须建立应用程序与 PostgreSQL 服务器的连接。应用程序将查询传输到服务器,并等待接收服务器发送回的结果。
解析器阶段检查由应用程序传输的查询是否具有正确的语法并创建查询树。
重写系统获取由解析器阶段创建的查询树,并查找要应用到查询树的任何规则(存储在系统目录中)。它执行规则主体中给出的转换。
重写系统的一个应用是实现视图。针对视图(即虚拟表)进行查询时,重写系统将用户的查询重写为访问视图定义中给出的基本表的查询。
计划程序/优化器获取(重写的)查询树并创建一个查询计划,该计划将作为执行器的输入。
它首先创建导致相同结果的所有可能的路径。例如,如果正在扫描的关系上存在索引,则扫描有两种路径。一种可能是一个简单的顺序扫描,另一种可能性是使用索引。接下来,估算每条路径执行的成本,并选择成本最低的路径。将成本最低的路径扩展到执行器可用的完整计划中。
执行器递归遍历计划树,并以计划中表示的方式检索行。在扫描关系时,执行器利用存储系统执行排序和联接,计算限定符,最后返回派生的行。
在以下部分中,我们将更详细地介绍上述每个项目,以便更好地理解PostgreSQL的内部控件和数据结构。