postgresql 内核开发之系统参数增加(上)

PostgreSQL内核开发——添加内核函数 在PostgreSQL内核的学习过程中,可以尝试向内核中添加一些函数,扩展PostgreSQL的功能。同时可以增加自己对PG内核的理解。这里我们以简单的添加一个helloworld函数为例,分析一下这个过程中涉及到的相关源码。 阅读详情

postgres数据库内部提供了大量的系统参数做各种管理、控制、调优等无处不在无孔不入无所不用其及的精细功能调整,毫不客气的说,一个DBA对参数的理解程度往往决定了这个DBA的水平。那么我们如何增加一个自己的参数呢?其实很简单。
前面 postgresql内核开发之Oracle date类型兼容 这篇介绍了如何增加一个兼容oracle的date类型。实际上类型的修改对数据库内核的影响是比较大的,往往希望这个功能可以控制,想用时兼容oracle,不用时保持postgres功能最好,增加一个参数就能很方便的满足需求。
假如我们新增加的参数叫 oracle_style, 把它定义成全局变量:

bool oracle_style = false;

定义位置放哪无所谓,比方说我们这个定义要在gram.y中用,那么就把定义把gram.y上面,注意要放C代码段。如果增加的参数要能允许插件使用,那么在声名前要加上 PGDLLEXPORT,如 PGDLLEXPORT bool oracle_style = false;
然后在增加逻辑控制date类型行为,如下:

        if(oracle_style && (0 == strcmp($1, "date")))
        {
            $$ = makeTypeName(pstrdup("timestamp"));
			$$->typmods = list_make1(makeIntConst(0, @1));                       
        }

oracle_style为true时才生效,否则走默认用法。
然后在guc.c中增加参数,这是bool型参数就增加到bool参数数组中,注意要在上面 extern bool oracle_style;

    {
        { "oracle_style", PGC_USERSET, QUERY_TUNING_METHOD,
        gettext_noop("compatible oracle."),
        NULL
        },
        &oracle_style,
        false,
        NULL, NULL, NULL
    },

加到 static struct config_bool ConfigureNamesBool[] 数组中。
这里第一个”oracle_sytle”定义的是我们的参数名,即可以写到postgrsql.conf中的参数名字,PGC_USERSET是参数级别,用户可以随意改,&oracle_style是参数 “oracle_sytle”实际的存值地址,通过这样的方式把两者联系起来,虽然两者大多是相同的字符串,但可以不同,false是初始值。其它有信息有大家可看看注释,对字符串、整型等参数可以参考其它定义,如新增参数有不明白可以参考一个类似的学习。
下面看看实际效果:

postgres=# show oracle_style;
 oracle_style
--------------
 off
(1 row)


postgres=# create table a(d1 date);
CREATE TABLE
postgres=# insert into a values(now());
INSERT 0 1
postgres=# set oracle_style = on;
SET
postgres=#  show oracle_style;
 oracle_style
--------------
 on
(1 row)


postgres=# create table b(d1 date);
CREATE TABLE
postgres=# insert into b values(now());
INSERT 0 1
postgres=# select *from a;
     d1
------------
 2016-12-07
(1 row)


postgres=# select *from b;
         d1
---------------------
 2016-12-07 00:34:59
(1 row)

参数增加是不是很简单?这样增加的参数往往能满足绝大部分用法了,但有时也会有些奇葩需求,比方说,A用户连进来,修改某个参数值,希望这个值能立即让所以活跃连接生效,当前10个连接的10个子进程立马能更新这个参数值。postgres本身不支持这样的功能,但我们可能利用现有的功能实现一个,具体请见下篇。

postgreSQL内核分析1 1前言一直都想写关于PostgreSQL实现原理方面的文章,由于这是一个工作量巨大的工作,平时还要工作谋生,很难抽出时间 来写,希望能够坚持下来。PostgreSQL作为历史最悠久的开源数据库 管理系统 ,有关它的详细信息可以到http://www.postgresql.org/ 去查阅,这里不再赘述。在MySQL被Oracle 抓在手中以后,MySQL变得前途未卜,在这种情况下,PostgreS 阅读详情

相关推荐

PostgreSQL的学习心得和知识总结(五)|系统隐藏列

注:首先声明一下 本人在过去的一年时间内,得到了很多的同学和老师 以及优快云上面老哥的帮助,在今年毕业之后主要做PostgreSQL内核开发方面的(完全是个人兴趣)。刚才优快云通知:可以设置专栏 什么收费什么的,我在此声明:虽然我不是什么大牛,也不想挣大钱。喜欢本人的文章的小伙伴,我谢谢你们的支持。写的不好,你们可以骂我,当然我更希望我们可以一起进步。绝不收费!绝不收费!绝不收费! 为什么这么愤慨呢?我的一个学弟,技术非常good 是我佩服和羡慕的人,他有很多粉丝。然鹅,今天我去查看他的博客时,发现

孤傲小二~阿沐的博客 1335

PostgreSQL 源码解读(174)- 内核研发#2(如何添加系统字段)#2

本节继续处理上一节给出的任务,重点介绍第二部分:输出,实现结果投影列名称命名为sysdate 一、输出 参...

348

PostgreSQL 在内核增加一个配置参数

1. 在配置文件增加你需要的参数 例如我增加一个参数,配置文件:data/postgresql.conf, data目录怎么来的,可以参考《第5课 PostgreSQL 编译源代码进行开发》 2. 修改源代码 src/backend/utils/misc/guc.c,在这个文件中,针对不同的数据类型(bool,int, double,string)实现了4个init*函数和4个数据结构数组: ...

椟夜 780

postgresql源码学习(45)—— PostmasterMain(2) GUC参数简介及设置

对于解析到的每个参数及其参数值,调用SetConfigOption函数完成参数修改。GUC(Grand Unified Configuration)参数,其实指的就是pg中的各类参数。铺垫了这么多,终于又回到PostmasterMain函数上,我们接着上次的代码继续往下看。解析postmaster命令行参数,并用于设置GUC参数值。每种类型的GUC参数都有两部分组成:共性部分+特性部分。,如果一切合法,则将当前目录转入数据目录。,相同参数优先级更高的来源值会生效。数据库内核分析》第二章。

Hehuyi_In的博客 3871

大牛总结的PostgreSQL开发指南

本指南目的在于经验总结, 帮助PostgreSQL使用者快速入门,在开发及管理过程中有章可循:命名规范Column设计 Constraints 设计Index 设计关于NULL开发相关规范 管理相关规范

CentOS中运行PostgreSQL需要修改的内核参数及配置脚本分享

主要介绍了CentOS中运行PostgreSQL需要修改的内核参数及配置脚本分享,本文从系统资源限制类和内存参数优化类来进行说明,需要的朋友可以参考下

给 PostgreSQL 内核源码增加参数

最近一个工作,需要给PG增加一个参数,作为删除输入字符串中 \0 的开关,研究了一下怎么给内核增加参数。 其实如果不深究PG内核参数的整个体系架构,增加参数一点也不难,下面记录一下之前的工作(写给自己看,细节不再详述): 1. 在你自己维护的PG模块的c文件里增加一个全局变量,这个变量就是用来存储参数值的。 例如,我在postgres.c里增加了变量: /* GUC variable for removing '\0' in bind text string*/ bool bind_t...

howard_shooter的博客 1345

一次渗透测试引发的Json格式下CSRF攻击的探索

一次渗透测试引发的Json格式下CSRF攻击的探索

weixin_52501704的博客 1050

postgresql 内核开发之系统参数增加(下)

上篇介绍了怎么加一个常规参数,同时也留下了一个问题,如何加一个奇葩参数设置功能,使任意一个session设置参数值,全局所有连接立即生效。

postgres20的博客 966

西门子S7-200 SMART PLC高速计数器与增量式编码器实战配置指南

在工业自动化控制系统中,传感器是将物理量转换为电信号的关键组件,其中编码器作为核心的位置与速度检测元件,其工作原理基于光电或磁电效应,将机械位移转换为脉冲序列。增量式编码器通过输出相位差90度的A/B两相脉冲,不仅能实现精确的位移测量,还能通过相位关系自动判别运动方向,并通过倍频技术提升分辨率。其技术价值在于为PLC等控制器提供了实时、高精度的位置反馈,是实现闭环控制、提升系统精度与可靠性的基础。在包装机械、物料输送、绕线设备等应用场景中,编码器与PLC高速计数器的协同工作是实现精确定位、定长切割与速度控制

weixin_29178069的博客 400

VS2022离线安装包 - 下载安装教程

VS2022离线安装包 - 下载安装教程

鲤籽鲲的博客 3万+

PostgreSQL与操作系统(OS)内核相关的几个参数

一、概述 PostgreSQL在postgresql.conf里面的配置参数有几个是和OS的内核参数紧密相关的,通常默认值是偏小的,但设置过大也会造成Postgres的启动失败。  二、测试 1.测试环境 DB: postgres 9.1.3(之后版本这几个参数并未变动) OS: CentOS 6.2 / Redhat(Ubuntu、Debian等linux系统也是一样) 2.内核参数

竹林听雨 1716

cartographer错误终结者 ordered_multi_queue.cc:155 Queue waiting for data

错误描述 错误提示的感应器数据可能是: Queue waiting for data:(0, points2) Queue waiting for data:(0, odom) 说明在提供给cartographter的传感器数据出现了问题,没有被成功解析。 原因分析 小编是使用自己编写的odom话题发布时,cartographer爆出了该错误。 于是设想传感器数据相关的tf或lua配置或数据本身存在错误。 于是逐个排查,最终发现了错误原因。 排查可能原因:tf错误 小编之前已处理过tf与lua配置的问题 参

人工智能机器人 4157

调整Linux内核参数来优化PostgreSQL

目录 文档用途 详细信息 文档用途 为了使PostgreSQL数据库获得最佳性能,需要正确定义操作系统参数。如果操作系统内核参数配置不当,可能会导致数据库服务器性能下降。因此,必须根据数据库服务器及其工作负载配置这些参数。本文将介绍一些可能影响数据库服务器性能的重要内核参数以及如何调整这些参数来提升性能。 注:本文所有命令及参数设置均针对Linux操作系统。 详细信息 1.SHMMA...

HighGO 968

【算法】—前缀和与差分详解

前缀和指一个数组的某下标之前的所有数组元素的和(即数列的前n项求和),前缀和是一种重要的预处理,能够降低算法的时间复杂度,可以快速地求出某一段的和,对于处理区间之间的问题是往往十分高效相比较其他算法而言,前缀和更像是一种解题的技巧,一种优化方式输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r 对于每个询问,输出原序列中从第 l 个数到第 r 个数的和5 32 1 3 6 41 21 32 4123453610。

DAY I 的成长之路 6025

15、 深入理解Akka微服务:创建与管理体育博彩平台

本博文深入探讨了如何使用Akka微服务架构为体育博彩平台创建投影和管理事件数据,包括市场投影、投注投影以及数据库投影的实现。同时,介绍了通过gRPC提供HTTP端点以供外部系统访问的方法,并详细说明了在本地环境和Kubernetes中运行应用程序的步骤及配置建议。

weixin_35756624的博客 97

PostgreSQL数据库内核(二):增加controlfile参数

新增guc参数pg_test_parameter,支持从initdb和pg_ctl命令中传递/覆盖参数,使用场景是TDE透明加密指定算法或者某些定制化需求。

叶子叶来 688

华为OD机试双机位C卷:采购订单 (Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 采购订单,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,并提供在线OJ模拟做题。华为OD机试真题【采购订单】

qq_45776114的博客 3534

PostgreSQL 内核开发与数据共享教程

PostgreSQL 内核开发与数据共享教程 1. 项目介绍 本项目旨在为开发者提供一个深入了解 PostgreSQL 内核开发和数据共享的教程。通过本教程,开发者可以学习如何进行 PostgreSQL 内核的定制开发,以及如何在多个 PostgreSQL 实例之间实现高效的数据共享。 项目链接:https://github.com/TsinghuaLucky912/PostgreSQL-kern...

gitblog_00653的博客 949

BLDC&PMSM电机控制器硬件设计工程(八)72V 10kW电机控制器原理图工程及库文件

电机控制器基本需求:接口类型;MCU平台;通信接口;供电;信号采集;信号输出;功率;EMC或者认证需求。

小幽余生不加糖 376

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

PostgreSQL数据库内核(一):增加系统表pg_test_catalog

使用PostgreSQL14.5源码版本编译,操作系统CentOS,本地windos系统+CLion代码工具,首先下载。以上就完成了增加系统表流程,这里系统表并没有一些逻辑交互,如果涉及复杂的逻辑交互需要修改backend里面的代码或者调用;

叶子叶来 1849

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

PG内核解读-第1节PostgreSQL系统概述

本课程主要面向PostgreSQL DBA、高校学生、内核开发爱好者。解决PostgreSQL DBA遇到的问题,希望用户可以通过查看代码深入了解PG原理。让没有接触过数据库内核的同学,了解内核基本原理、代码实现,可以完成简单功能开发,大家一起共同学习、共同成长。本系列的章节设置,参照彭智勇老师的《PostgreSQL数据库内核分析》,内容互补。每章节先介绍架构、原理、使用,再介绍代码。

于巍,花名漠雪,移动云数据库技术委员会主任,海山数据库研发负责人,PG中文社区常委,PG中文社区海外联络人。15年数据库内核研发经验,4年美国、以色列等海外研发经历,华为GaussDB、阿里云PolarDB、移动云He3DB等核心架构 490

OV9734 DATASHEET,完整规格书

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

PostgreSQL调优1:PostgreSQL系统参数

默认的PostgreSQL配置参数并不是针对某种负载优化过的。默认值主要是确保PostgreSQL可以在任何环境下都能运行起来,因此默认配置使用了最少的资源。根据数据库的负载来对数据库进行调优,是DBA或是开发的主要职责。 有时虽然可以使用索引,但是SQL却使用了全表扫描,或是执行了开销比较的join或是聚集操作,这种情况下,就算是数据库是调优过了,数据库的性能也不会好。这种情况下,在写SQL的时候就需要格外的小心。数据的参数调优依然是非常重要的。以下是7个最可能影响...

zxw986的专栏 3746

postgresql修炼之道_PostgreSQL内核开发学习资料

我自2011年便开始进行PostgreSQL内核开发岗,在公司内也算是时间比较久了,带了一些新人入门,总结了一些不同阶段需要学习的资料。我将PostgreSQL内核知识划分为3层:数据库基础对象,内容最多,比如系统表、表、系统函数、语法、前端工具、通讯协议等等;进程运行过程;数据库核心内容,存储、事务以及查询处理器。根据内核知识层级,我将PostgreSQL内核开发工程师的知识水平划分为5个级别,...

weixin_39667080的博客 428
上一篇: postgresql内核开发之add_months函数实战
下一篇: postgresql 内核开发之系统参数增加(下)
postgres20
博客等级 码龄10年 100粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值