受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

Chapter 49. PostgreSQL 内部概述

作者

本章最初源自[sim98] Stefan Simkovics 在维也纳技术大学完成的硕士论文,该论文由 O.Univ.Prof.Dr. Georg Gottlob 和 Univ.Ass. Mag. Katrin Seyr 指导。

本章概述 PostgreSQL 后端的内部结构。阅读以下各节之后,你应该能够大致了解一个查询是如何被处理的。本章旨在帮助读者理解,从后端收到一个查询开始,到将结果返回给客户端为止,内部通常有哪些操作步骤。

49.1. 查询的路径 #

这里将简要概述一个查询为得到结果必须经过的各个阶段。

  1. 必须先建立从应用程序到 PostgreSQL 服务器的连接。应用程序将查询发送给服务器,并等待接收服务器返回的结果。

  2. 解析器阶段检查应用程序传来的查询是否具有正确的语法,并创建一棵 查询树

  3. 重写系统接收由解析器阶段创建的查询树,并查找任何可应用于该查询树的 规则(存储在 系统目录 中)。它执行这些 规则体 中给出的转换。

    重写系统的一个应用是实现 视图。每当对一个视图(即 虚拟表)发出查询时,重写系统都会将用户的查询重写成一个改为访问 视图定义中给出的 基表 的查询。

  4. 规划器/优化器接收(重写后的)查询树,并创建一个查询计划,将作为 执行器 的输入。

    它首先生成所有能得到同一结果的可能 路径。例如,如果待扫描的某个关系上有一个索引,那么该扫描就有两条路径:一种是简单的顺序扫描,另一种是使用该索引。接着会估算执行每条路径的代价,并选择代价最低的路径。代价最低的路径会被展开成一个完整的计划,供执行器使用。

  5. 执行器会递归地遍历 计划树,并以计划所表示的方式提取行。执行器在扫描关系时会使用 存储系统,执行 排序连接,计算 限定条件,最后返回得到的行。

在后续各节中,我们将更详细地介绍上述各项内容,以便更好地理解 PostgreSQL 的内部控制和数据结构。

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。