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

1. 在配置文件增加你需要的参数

例如我增加一个参数,配置文件:data/postgresql.conf,
data目录怎么来的,可以参考《第5课 PostgreSQL 编译源代码进行开发》

2. 修改源代码

src/backend/utils/misc/guc.c,在这个文件中,针对不同的数据类型(bool,int, double,string)实现了4个init*函数和4个数据结构数组:

  • InitConfigureNamesBool()用来初始化bool类型参数,myConfigureNamesBool[]数组里配置我们需要的bool参数;
  • InitConfigureNamesInt()用来初始化int类型参数,myConfigureNamesInt[]数组里配置我们需要的int参数;
  • InitConfigureNamesReal()用来初始化double类型参数,InitConfigureNamesReal[]数组里配置我们需要的double参数;
  • InitConfigureNamesString()用来初始化string类型参数,InitConfigureNamesString[]数组里配置我们需要的string参数;

回到我们例子,我增加是字符串类型,我需要在InitConfigureNamesString[]数组中增加我的参数:

static void
InitConfigureNamesString(void)
{
struct config_string myConfigureNamesString[] =
{
    {
        {"myname", PGC_SIGHUP, LOGGING_WHAT,
            gettext_noop("my name"),
        },
        &myname,
        "duye", NULL, NULL
    },  

myname需要在前面定义好:

MT_LOCAL char* myname = NULL;

3. 查看变量是否设置成功

我们就在src/backend/postmaster/postmaster.c的PostmasterMain()函数中读取该参数,我们在该函数中可以看到InitializeGUCOptions()函数,他就是为了初始所有参数。

查看参数:

postgres=# show myname;
 myname 
--------
 duye
(1 行)

4. 程序中使用变量

在源码文件src/backend/utils/misc/guc.c提供了几个对外查询参数的接口,外部模块可以使用这些函数获取参数。

extern const char *GetConfigOption(const char *name);
extern const bool GetBoolConfigOption(const char *name);
extern const int GetIntConfigOption(const char *name);
extern const char *GetConfigOptionResetString(const char *name);
extern char *GetConfigOptionByName(const char *name, const char **varname);
extern void GetConfigOptionByNum(int varnum, const char **values, bool *noshow);
extern int  GetNumConfigOptions(void);

例如:

#include "utils/guc.h"
const char* var = GetConfigOption("myname");
printf("%s\n", var);

发现更多宝藏

我在喜马拉雅上分享声音

《PostgreSQL数据库内核分析》,点开链接可以听听,有点意思。

《数据库系统概论(第4版)》,点开链接可以听听,有点意思。

更多IT有声课程,点我发现更多

第 0 课 PostgreSQL 系列文章列表

其他相关文章分享列表:

第 23 课 PostgreSQL 创建自己的数据库、模式、用户
第 22 课 PostgreSQL 控制文件
第 21 课 PostgreSQL 日志系统
第 16 课 查询过程源码分析
第 15 课 PostgreSQL 系统参数配置
第 14 课 PostgreSQL 数据存储结构
第 13 课 PostgreSQL 存储之Page(页面)源码分析
第 12 课 PostgreSQL 认证方式
第 11 课 PostgreSQL 增加一个内核C函数
第 10 课 PostgreSQL 在内核增加一个配置参数
第 09 课 PostgreSQL 4种进程启动方式
第 08 课 PostgreSQL 事务介绍
第 07 课 PostgreSQL 数据库、模式、表、空间、用户间的关系
第 06 课 PostgreSQL 系统表介绍
第 05 课 PostgreSQL 编译源代码进行开发
第 04 课 PostgreSQL 安装最新的版本
第 03 课 PostgreSQL 代码结构
第 02 课 PostgreSQL 的特性、应用、安装
第 01 课 PostgreSQL 简介及发展历程

上面文章都在专辑中:PostgreSQL专辑链接,点我查看

如果有用,可以收藏这篇文件,随时在更新....

更多交流加群: PostgreSQL内核开发群 876673220

亲,记得点赞、留言、打赏额!!!

上一课
下一课

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,893评论 2 9
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,692评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 没有人能了解 我的悲伤 像一道月痕割在脸上 我也不了解 即使走出阴影 我的眼睛 仍习惯黑夜
    满_3539阅读 61评论 0 0
  • 停在这里,思绪像风车一样转 曾触不可及的爱情没有终点 贪心的人把现实演成话剧样精彩 悲欢离合却无处安置,如风化在那...
    云外楼头阅读 241评论 0 0