了解 PostgerSQL 的门户 – Executor vs Process Utility

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

 当您向 PostgreSQL 发送查询时,查询会依次经历多个处理阶段,并在最后返回结果。这些阶段称为:

  • 解析

  • 分析

  • 重写

  • 计划

  • 执行

在另一篇文章中,我简要概述了PostgreSQL在每个查询处理阶段的主要责任。你可以在这里找到它。

https://www.highgo.ca/2024/01/26/a-comprehensive-overview-of-postgresql-query-processing-stages/

在这篇文章中。有一个主要聚焦规划器模块的功能,您可以在此处找到。

https://www.highgo.ca/2024/03/22/understand-postgresqls-planner-simple-scan-paths-vs-plans/

在这篇博客中,我们将重点介绍查询处理的执行器部分,作为连接 PostgreSQL 内部模块的关键枢纽,执行器负责协调并收集查询所需的确切数据。

实际上,将执行器用于描述查询处理的这一阶段并不准确。在 PostgreSQL 源代码中,这一角色更多地被整合在名为“portal”的对象框架内。通常,它有 2 条潜在的路径,即“执行器”路径或“指令处理器”路径。

通常情况下,我们只是将此阶段称为“执行器”而不是“门户”,因为执行器处理大多数涉及 SELECT、INSERT、UPDATE、DELETE 的 DML 查询类型......等等,它必须根据“planner”模块创建的查询计划来处理它们。

另一方面,”指令处理器”并不依赖于“计划器”生成的查询计划来执行流程,而是直接处理DDL(数据定义语言)操作以及其他非DML(数据操纵语言)的查询类型,例如 VACUUM、CREATE、PREPARE ...等。

就所涉及的逻辑而言,门户(或执行器)并不像计划器那么复杂,但它同样是PostgreSQL内部架构中不可或缺的一环,因为它需要协调众多其他模块共同协作,确保能够准确地处理并产生查询的正确输出。让我们来看看。

1、一切从这里开始

postgres.c 中的函数 exec_simple_query()函数 是查询处理阶段的关键环节。我们将重点关注 在调用 PortalStart() 函数之后会发生什么。

图片

2、Portal、Executor 和 ProcessUtility 之间的关系

如上所述,portal 是封装“executor”和“process utility”的对象,其中:

l执行器负责执行计划器创建的“计划”——选择、更新、插入......等

l指令处理器负责处理与计划无关的其他非 DML – 创建、显示、游标...等

它们可以可视化为:

图片

执行器在执行过程中,通常会与表和索引的访问方法紧密协作。这些方法通常访问缓冲区管理器,并最终访问磁盘以执行数据操作。有关访问方法的更多信息,请点击此处。

另一方面,指令处理器必须查看“nodeTag”并决定访问哪个模块才能完成请求。例如:

  • nodeTag=TRANS_STMT_BEGIN – 访问事务管理器以启动事务

  • nodeTag=T_CreateTableSpaceStmt – 访问表空间管理器以创建新的表空间

  • nodeTag=T_TruncateStmt – 访问截断表的访问方法

  • nodeTag=T_CreateRoleStmt – 访问用户管理器以创建新角色

  • .. 还有很多其他的。

3、门户 – 执行器路径

我们知道门户的目标,但具体实现细节则通过一系列复杂的函数调用得以展现。下面的调用堆栈图说明了用于处理不同类型扫描 (SELECT) 的重要函数调用。这将触发门户选择“执行器”路径。

图片

在PostgreSQL的执行阶段,两个核心函数——ExecInitNode和ExecProcNode,其通过它们执行器获取计划器模块创建的计划并将其转换为执行器可以理解的数据结构。最终会创建一个树结构,就像它的计划一样,其中包含类型为execProcNodes的一个主节点和若干个子节点例如,对于并行顺序扫描,主节点的类型为“gather”,而子节点 的类型为“seqScan”。

之所以这样布局,是因为 Gather 节点需要从其所有 seqScan 子节点收集元组数据。请注意,将在 PortalRun 期间创建快照,在获取元组时计算元组的可见性时,需要这样做。有关可见性的更多信息,请点击此处。

4、门户 – 指令处理器路径

指令处理器路径不像执行器部分那么复杂。它不需要基于计划创建 execProcNode。它基本上从正确的模块调用正确的函数来处理不同类型的 NodeTag。

图片

5、总结

执行器和指令处理器共同构成了 PostgreSQL 数据库引擎的核心支柱。几乎每个查询类型都由执行器或指令处理器处理。然而,它们并非孤立工作,而是巧妙地扮演着“调度者”的角色,将适当的任务分配给正确的模块来执行。因此,当您在 PostgreSQL 中引入一个新的自定义模块时,您可能还需要修改执行器/指令处理器。希望此文能够帮助您探索 PostgreSQL 内部机制、深入理解其工作原理。

原文链接:

https://www.highgo.ca/2024/05/17/understand-postgersqls-portal-executor-vs-process-utility/

IvorySQL——一款开源的兼容Oracle的PostgreSQL

官方网址:

https://www.ivorysql.org

社区仓库:

https://github.com/IvorySQL/IvorySQL

IvorySQL社区欢迎并赞赏所有类型的贡献,期待您的加入!

记得在GitHub给我们一个 ⭐奥~

ESP32-CAM入门教程 ArduinoESP32-CAM下载模块(接上USB就能用,很方便,如果没有买就只有资金用USB-TTL了)如下图两个合在一起如下图。 阅读详情

相关推荐

浅谈IC测试向量(pattern)及其转换

随着集成电路的飞速发展,其规模越来越大,对电路的质量与可靠性要求进一步提高,集成电路的测试方法也变得越来越困难,为了实现芯片的快速测试和筛选,ATE设备为其提供了强有力的支撑。ATE运用芯片设计仿真文件,将其作为芯片输入激励,通过ATE测试平台提供芯片测试环境,将芯片的输出和测试结果进行比较,以此来判定芯片的好坏。 说起IC测试,不得不说一下Pattern这个词,它中文的意思是模式。在图像处理中,这个词意思为图像的纹理特征,而在IC也即芯片测试行业,这个词实际上代表了需要测试芯片的时序特征。简单的说,在测

flomingo1的专栏 1万+

Postgresql源码(62)查询执行——子模块ProcessUtility

本篇重点分析ProcessUtility子模块

InternalsOf 1040

挑战第七天:Llamaindex RAG 实践

安装python 依赖包,并安装 Llamaindex和相关包以及Sentence Transformer 模型。进入开发机后,创建新的conda环境,命名为。镜像,然后在资源配置中,使用。的选项,然后立即创建开发机器。后,点击 选择镜像 使用。然后安装相关基础依赖。

weixin_53579823的博客 728

PostgreSQL 入门

由于PG对SQL标准的严格执行,除了部分数据库库采用的方言可能需要调整一下,在使用过程中我们基本不需要考虑标准的SQL不兼容的情况。考虑到技术成熟性和装机量,我这里选择较老的版本9.6.24,该版本也是部分国产数据库的基础。一个PG数据库实例可以有多个数据库,每个数据库内可以有多个模式,每个模式中可以有多个表。的模式作为默认模式,若在创建表时没有指定模式,那么表将在默认模式内创建。模式(scheme)在PG是可选的,默认在创建数据库时会创建一个名为。程序作为PG的客户端,类似于MySQL中的。

q1009020096的博客 2994

软件测试——白盒测试实验报告,输入年月日算星期几

软件测试——白盒测试实验报告,输入年月日算星期几,测试用例设计和结果展示

weixin_52278161的博客 2746

AOSP 8.0.0编译中的ANDROID_DATA缺失问题解决方案

在AOSP编译过程中,环境变量和路径设置的正确性至关重要。遇到相关的错误时,检查并修正环境配置通常是解决问题的关键。希望本文提供的分析和解决方案能帮助你顺利编译AOSP。

m0_74337424的博客 398

PostgreSQL数据库查询执行——ProcessUtility

PortalRun–>PortalRunMulti–>PortalRunUtility–>ProcessUtility–>standard_ProcessUtility PortalRun–>FillPortalStore–>PortalRunUtility–>ProcessUtility–>standard_ProcessUtility (Execute SQL FETCH or MOVE command) PerformPortalFetch–>P.

肥叔菌的博客 977

【OD统一考试(B卷)】比赛的冠亚季军,Python 解答

比赛的规则是 0 号和 1 号比赛,2 号和 3 号比赛,以此类推,每一轮,相邻的运动员进行比赛,获胜的进入下一轮,实力值大的获胜,实力值相等的情况,id 小的情况下获胜,轮空的直接进入下一轮。第一轮比赛,id 为 0 实力值为 2 的运动员和 id 为 1 实力值为 3 的运动员比赛, 1 号胜出进入下一轮争夺冠亚军,id 为 2 的运动员和 id 为 3 的运动员比赛,3 号胜出进入下一轮争夺冠亚军;2 号与 0 号,比赛进行季军的争夺,2 号实力值为 4,0 号实力值 2,故 2 号胜出,得季军。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1万+

postgresql Hook机制加实例详解

摘要:Hook,wiki说明文档:               hook实际上就是static 的函数指针.hook工作原理:每一个hook是由一个全局性的函数指针构成的。服务端进行运行初始化其为NULL,当数据库必须调用的时候,首先会检测是否为NULL,不是则优先调用函数,否则执行标准函数。设置函数指针:当数据库载入共享库时,首先会将其载入到内存中,然后执行一个函数调用_PG_init。这个函数...

liguangxianbin的博客 3150

Harness Engineering:让Coding Agent真正落地生产

本文将带你系统性地了解如何让Coding Agent真正落地生产,核心是依托(全球领先的持续交付、云成本管理、 feature flagging、安全治理一体化平台),结合企业级AIDD(AI-Driven Development)的工程化实践,构建一套可信赖、可观测、可扩展、可治理的Coding Agent落地体系。核心概念与理论基础:什么是Coding Agent?它和普通的AI代码补全工具(比如GitHub Copilot)有什么区别?什么是Harness Engineering?

移动开发前沿的博客 456

高级电机控制场景实例:基于Simulink的永磁同步电机基于Luenberger观测器的弱磁控制仿真

本文基于Simulink实现表贴式永磁同步电机(SPMSM)的Luenberger观测器弱磁控制仿真,通过构建“观测-弱磁-控制”协同逻辑,突破传统矢量控制的基速限制。利用线性化模型设计观测器实时估计电流与磁链,结合电压极限约束动态注入负d轴电流,实现转速扩展至12000rpm(4倍基速),弱磁区电流THD低于3%,动态响应时间小于5ms,验证了高速运行下系统稳定性与鲁棒性。附完整建模步骤、MATLAB函数代码及性能分析,适用于电动汽车、机床等高速驱动场景,为高级电机控制提供可复现的技术范式。

amy_mhd的博客 32

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 477

Python 爬虫教程:金融数据定向抓取(银行 + 投资网站数据结构化提取)

在当今数字化时代,金融数据的获取和分析对于投资者、分析师以及金融机构来说至关重要。Python 爬虫技术可以帮助我们高效地从各种网站上抓取金融数据,从而为投资决策、风险评估和市场分析提供支持。本文将详细介绍如何使用 Python 爬虫技术来定向抓取银行和投资网站的数据,并将其结构化提取,以便进一步分析和使用。

u014481728的博客 884

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 432

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【基于 WebSocket 的多用户网页五子棋】—— 数据管理模块

但行好事,莫问前程

qq_42996461的博客 250

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++算法(七)

C++ stack算法题和一些客观题

2503_94479566的博客 378

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

OpenClaw 深度调查:把 AI 助手做成你自己的控制平面

对 openclaw/openclaw 的完整技术尽调:Gateway 架构、Agent 运行时、工具与沙箱、30 个消息通道、181 个插件、安全信任边界、工程代价与采用建议。17 章 / 10 张图,全部数字标注口径,数据截至 2026-10-31。

厚积薄发 294

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 176

TransactionInactiveError:await 之后事务已经不活跃了

TransactionInactiveError 出现于 IndexedDB 事务已结束(非 active 状态)时调用 put、get 等操作。常见于 await 后或 setTimeout 中执行请求,因任务已完成,事务已提交或进入 finished 状态。请求必须在创建事务的同一任务中挂起,否则无效。解决方法:在 onsuccess 回调内同步发起后续操作,或提前将所有请求挂入事务。避免在异步上下文中使用事务操作,确保请求在事务活跃期内完成。

qq_40822000的博客 159

云计算课程小组PPT汇报任务书

36人分为6组,每组6人;形式:生活案例调研 + 理论解读;汇报时长7‑9min;PPT建议10‑14页。

Michelle8023的博客 207

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 295

软件项目交付时,源代码之外还应该交付哪些技术资料?

软件项目交付时,除可运行程序外,还应核对源代码、数据库结构、接口文档、部署运维、测试验收和账号资产。本文从实际交付环节拆解完整资料清单,并说明合同如何约定交付范围、知识产权与维护边界。

chengduyoushu的博客 305

Axum 初步入门学习笔记

)自定义错误实现后,可以直接作为Result的ErrAxum 是一个构建在 Tokio、Tower、Hyper 之上的 Rust Web 框架,核心能力是:Router 路由、Extractor 提取器、Tower 中间件、IntoResponse 响应机制、State 共享状态。那张分层架构图是“地图”不是“说明书”:它帮你建立全局观,但 Service、Repository、数据库、Redis、MQ 都是你自己在 Handler 内部调用的业务/基础设施层,不是 Axum 自带的。

weixin_43219667的博客 182

MySQL报Too many open files?句柄耗尽的排查与参数配置

文章讲清 max_connections 与 open_files_limit 两个额度、句柄被谁占走、分区表为什么最容易踩,给出从 error log 到 /proc/pid/limits 的定位顺序与句柄预算算法。

「一个在数据库赛道上边学边分享的学妹」——聚焦国产数据库/信创方向、分享学习笔记、踩坑经验和行业观察。 336

SQL Server 数据库双备份:简化配置,兼顾本地留存与异机归档

本文针对中小企业SQLServer数据库备份难题,提出简化配置与本地+异机双副本方案。传统原生备份依赖手动脚本,存在配置复杂、传输易中断、日志分散、静默失败等问题。推荐使用图形化工具实现备份、本地留存与异机同步一体化管理,支持断点续传、加密传输、自动清理与版本控制,降低运维负担。双副本策略提升数据安全性,本地快速恢复,异地防硬件故障。建议定期验证恢复流程,确保备份可用性。

2501_93776716的博客 291

Redis 入门详解:核心特性、重要文件与全局命令实战

本文系统介绍了Redis的核心特性、重要文件及全局命令。Redis凭借内存存储、C语言实现和单线程设计,具备极高的读写性能;支持持久化(RDB/AOF)、主从复制与集群架构,适用于缓存、排行榜、计数器等场景,但不适合存储海量冷数据。文中还解析了常见面试题,如为何快速、单线程原理、持久化机制、KEYS *禁用原因及过期键处理策略,强调其在高并发场景下的优势与局限。

2303_77004089的博客 206
上一篇: 让PG停摆一周的大会:PGCon.Dev参会记
下一篇: Centos7 被停用!如何利用 Ora2Pg 将 Oracle 迁移至 IvorySQL?
IvorySQL
博客等级 码龄5年 745粉丝 565原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值