openGauss内核分析(七):SQL by pass & 经典执行器 (二)

文章详细介绍了PostgreSQL执行SQL语句时的Portal机制,包括Portal的生命周期管理、不同类型的PortalStrategy以及执行流程中的关键函数,如PortalStart、PortalRun和PortalDrop。特别提到了在关闭enable_opfusion的情况下,简单INSERT语句的执行计划,并指出PortalRunMulti是处理多查询语句的核心部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

02 经典的执行器

关闭enable_opfusion,简单insert的执行计划是这样的: ![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg’ xmlns:xlink=‘http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=‘%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

在这种执行流程中Portal是执行SQL语句的载体,每一条SQL对应唯一的Portal,不同的查询类型对应的Portal类型也有区别。

typedef enum PortalStrategy {
    PORTAL_ONE_SELECT, // SQL语句包含单一的SELECT查询
    PORTAL_ONE_RETURNING, // INSERT/UPDATE/DELETE语句包含Returning
    PORTAL_ONE_MOD_WITH, // 查询语句包含With
    PORTAL_UTIL_SELECT, // 工具类型查询语句,如explain
    PORTAL_MULTI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值