文章 2022-02-16 来自:开发者社区

PostgreSQL SQL filter (SQL 成本|语义过滤器)

标签 PostgreSQL , pg_plan_filter , HOOK , 成本过滤 , 语义过滤 , 防火墙 背景 SQL防火墙,或SQL过滤器,在一些特定的场合可能会比较有用。 例如限制某些用户执行可能会耗费很多资源的SQL,限制用户执行SELECT以外的SQL(尽管SELECT不能保证对数据不产生修改,例如SELECT FUNCTION)。 PostgreSQL 提供了一些HOOK...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之三

前面已经说过,在 exec_simple_query中,完成sql文的执行。 具体地说,是要构造portal,然后运行 PortalStart , PortalRun... 下面就先看看 portal如何构造: 在 exec_simple_query中,有这么一段: 1 /* 2 * Create unnamed portal to run the quer...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之五

在定义了Portal之后,需要运行:PortalStart,它主要的任务是明确执行策略,然后再执行 ExecutorStart: 代码太长,进行缩略: void PortalStart(Portal portal, ParamListInfo params, int eflags, bool use_active_snapshot) { ... PG_...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之四

看看portal生成完毕后,干了什么(PortalDefineQuery): 1 /* 2 * Create unnamed portal to run the query or queries in. If there 3 * already is one, silently drop it. 4 */ 5 ...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之六

前面说过 PortalStart明确执行策略后,要执行 ExecutorStart。 那么ExecutorStart 到底作了什么呢。以下是缩略: /* ---------------------------------------------------------------- * ExecutorStart * * This routine must ...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之七

前面已经说过,exec_simple_query要运行 PortalStart和 PortalRun。 可以说,PortalRun是重头戏,sql的真正执行,就在这里完成。 /* * PortalRun * Run a portal's query or queries. * * count <= 0 is interpreted as a no-op: the ...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之八

在PortalRun里要调用 PortalRunSelect,具体的过程缩略如下: /* * PortalRunSelect * Execute a portal's query in PORTAL_ONE_SELECT mode, and also * when fetching from a completed holdStore in PORTAL_O...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之十三

继续: /*-------------------- * grouping_planner * Perform planning steps related to grouping, aggregation, etc. * This primarily means adding top-level processing to the basic * qu...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之十二

接前面,对 subquery_planner,进行进一步的分析: /*-------------------- * subquery_planner * Invokes the planner on a subquery. We recurse to here for each * sub-SELECT found in the query tree. * *...

文章 2022-02-16 来自:开发者社区

PostgreSQL在何处处理 sql查询之十四

Path莫非指的就是 物理访问路径? /* * query_planner * Generate a path (that is, a simplified plan) for a basic query, * which may involve joins but not any fancier features. * * Since query_planne...

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

产品推荐

数据库

分享数据库前沿,解构实战干货,推动数据库技术变革

+关注