↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5
历史版本。 PostgreSQL 9.1 已结束支持。 2016-10-27. 请参阅 当前版本手册.

第 44 章 PostgreSQL 内部概述

作者

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

本章概述 PostgreSQL 后端的内部结构。阅读以下各节之后,你应该能够大致了解一个查询是如何被处理的。本章并不试图详细描述 PostgreSQL 的内部运作,因为那样的文档会非常庞大。相反,本章旨在帮助读者理解,从后端收到一个查询开始,到将结果返回给客户端为止,内部通常有哪些操作步骤。

44.1. 查询的路径 #

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

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

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

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

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

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

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

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

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

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.