美文网首页
第 10 课 PostgreSQL 在内核增加一个配置参数

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

作者: 椟夜 | 来源:发表于2018-09-06 15:43 被阅读47次

    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

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

    上一课
    下一课

    相关文章

      网友评论

          本文标题:第 10 课 PostgreSQL 在内核增加一个配置参数

          本文链接:https://www.haomeiwen.com/subject/lgbtgftx.html