PostgreSQL DBA(34) - (HashAggregate vs GroupAggregate)
PostgreSQL数据库中,聚合函数如max/min/count等有两种实现方式:HashAggregate与GroupAggregate.本节简单介绍这两者的区别.案例一 首先我们看一个案例:测试表: drop table if exists t_agg; create table t_agg(bh varchar(20),c1 int,c2 int,c3 int,c4 int,c5
PostgreSQL 源码解读(177)- 内核研发#3(如何添加系统字段)#3
本节继续处理上一节给出的任务,重点介绍第三部分:实现,这一部分实现了类似CURRENT_DATE函数的功能. 一、实现实现部分,涉及到转换SQLValueFunction(在gram.y中把新增的列zz_sysdate设置为SQLValueFunction),解析SQLValueFunction以及PG的一些内部处理.转换SQLValueFunctionSQLValueFunction转换在文件
PostgreSQL 源码解读(176)- 查询#94(语法分析:gram.y)#3
本节继续介绍PostgreSQL的语法分析定义文件gram.y的第三部分Productions(产生式).Bison输入文件的组成: %{ Declarations %} Definitions %% Productions %% User subroutines 一、ProductionsProductions即产生式,这是用户编写的语法产生式,产生式的书写格式如下: S -
PostgreSQL 源码解读(175)- 查询#93(语法分析:gram.y)#2
本节继续介绍PostgreSQL的语法分析定义文件gram.y的第二部分Definitions.Bison输入文件的组成: %{ Declarations %} Definitions %% Productions %% User subroutines 一、DefinitionsDefinitions在Bison的作用与Flex中的功能也差不多,在这个段定义一些Bison专有变
PostgreSQL 源码解读(174)- 内核研发#2(如何添加系统字段)#2
本节继续处理上一节给出的任务,重点介绍第二部分:输出,实现结果投影列名称命名为sysdate
PostgreSQL 源码解读(173)- 查询#92(语法分析:gram.y)#1
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.本节介绍了PostgreSQL的语法分析定义文件gram.y,该文件位于目录src/backend/parser中.如前所述,PG利用Bison对语法进行分析,Bison输入文件由以下四部分组成: %{ Declarations %} Definitions %%
PostgreSQL 源码解读(172)- 内核研发#1(如何添加系统字段)#1
经过这么多源码的洗礼,下面让我们动手把玩PostgreSQL一把.第一个任务是希望添加一个系统字段,该字段输出的为当前日期(与PG的CURRENT_DATE日期函数输出一致).我们假定该字段名称为zz_sysdate(之所以zz打头是为了方便起见,把该字段放在PG其他字段之后),客户端输出的名称为sysdate.下面对这个任务进行分解,总的来说有几个工作需要完成:1.输入:让PG可以识别zz_sy
PostgreSQL 源码解读(171)- 查询#91(PG中的词法定义:scanner.l)#4
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.本节介绍了PostgreSQL的词法定义文件(Flex输入文件),在文件src/backend/parser/scan.l中.如前所述,Flex输入文件由四部分组成: %{ Declarations %} Definitions %% Rules %% Us
PostgreSQL 源码解读(170)- 查询#90(PG中的词法定义:scanner.l)#3
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析.本节介绍了PostgreSQL的词法定义文件(Flex输入文件),在文件src/backend/parser/scan.l中.如前所述,Flex输入文件由四部分组成: %{ Declarations %} Definitions %% Rules %% Us
PostgreSQL 源码解读(169)- 查询#89(PG中的词法定义:scanner.l)#2
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析. 本节介绍了PostgreSQL的词法定义文件(Flex输入文件)的第二部分Definitions.
PostgreSQL 源码解读(168)- 查询#88(PG中的词法定义:scanner.l)#1
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析. 本节介绍了PostgreSQL的词法定义文件(Flex输入文件),在文件src/backend/parser/scan.l中.
PostgreSQL 源码解读(167)- 查询#87(基础知识-语法分析器Bison)
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析. 本节介绍了开源工具语法分析器Bison.
PostgreSQL 源码解读(166)- 查询#86(基础知识-上下文无关语法)
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息?接下来的几节将逐一进行解析. 本节介绍了语法分析中的上下文无关语法.
PostgreSQL 源码解读(165)- 查询#85(基础知识-词法分析)
输入一条SQL语句,PostgreSQL如何解析输入的SQL,识别SQL类型以及基表/字段等信息.接下来的几节将逐一进行解析,本节首先介绍解析SQL相关的基础知识:词法分析.
PostgreSQL 源码解读(164)- 查询#84(表达式求值)
先前三个小节的内容介绍了PostgreSQL如何构建解析表达式的步骤,本节以int4pl为例介绍PostgreSQL如何解析表达式.
PostgreSQL 源码解读(163)- 查询#83(如何构建表达式解析步骤#3)
本节继续介绍PG如何构建表达式解析步骤,这是第三部分,介绍了ExecInitIndexScan->...->ExecBuildProjectionInfo->ExecInitExprRec->ExecInitFunc函数的实现.
PostgreSQL 源码解读(162)- 查询#82(如何构建表达式解析步骤#2)
本节介绍了PG如何构建表达式解析步骤,这是第二部分,介绍了ExecInitIndexScan->...->ExecBuildProjectionInfo->ExecInitExprRec函数的实现.
PostgreSQL 源码解读(161)- 查询#81(如何构建表达式解析步骤#1)
上一节介绍了PostgreSQL如何解析查询语句中的表达式列并计算得出该列的值,也了解了PG通过执行一系列的步骤对表达式进行解析最终得到表达式列值.本节介绍了PG如何构建表达式解析步骤,这是第一部分,介绍了ExecInitIndexScan->...->ExecBuildProjectionInfo函数的实现. 每一个ExecInitXXXScan节点都会调用ExecBuildProjectionInfo函数,用于根据targetlist构建投影(Project)信息,构建投影信息的时候构建表达式解析步骤.
PostgreSQL 源码解读(160)- 查询#80(如何实现表达式解析)
本节介绍了PostgreSQL如何解析查询语句中的表达式列并计算得出该列的值.
PostgreSQL 源码解读(159)-PG Tools#6(What does pg_rewind do)
基于streaming replication搭建的PostgreSQL HA环境,如出现网络访问/硬件故障等原因Standby节点升级为Master节点,但Old Master节点数据库并未损坏,在排除故障后Old Master节点可以通过pg_rewind工具而不需要通过备份的方式成为New Master节点的Standby节点. pg_rewind执行时做了什么?本节一探究竟.