↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 7.0 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 61 章 PostgreSQL 内部概述

作者

本章最初是 Simkovics, 1998 (Stefan Simkovics 在维也纳技术大学完成的硕士论文,由 O.Univ.Prof.Dr. Georg Gottlob 和 Univ.Ass. Mag. Katrin Seyr 指导)的一部分。

本章概述 Postgres 后端的内部结构。阅读以下各节之后,你应该能够大致了解一个查询是如何被处理的。不要期望在这里看到详细的描述(我认为,一份涵盖 Postgres 中使用的所有数据结构和函数的描述将超过 1000 页!)。本章旨在帮助读者理解后端从收到一个查询到发送结果为止,其内部总体上的控制流和数据流。

61.1. 查询的路径

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

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

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

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

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

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

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

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

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

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。