第 10 課 PostgreSQL 在內(nèi)核增加一個(gè)配置參數(shù)

1. 在配置文件增加你需要的參數(shù)

例如我增加一個(gè)參數(shù),配置文件:data/postgresql.conf,
data目錄怎么來的,可以參考《第5課 PostgreSQL 編譯源代碼進(jìn)行開發(fā)》

2. 修改源代碼

src/backend/utils/misc/guc.c,在這個(gè)文件中,針對(duì)不同的數(shù)據(jù)類型(bool,int, double,string)實(shí)現(xiàn)了4個(gè)init*函數(shù)和4個(gè)數(shù)據(jù)結(jié)構(gòu)數(shù)組:

  • InitConfigureNamesBool()用來初始化bool類型參數(shù),myConfigureNamesBool[]數(shù)組里配置我們需要的bool參數(shù);
  • InitConfigureNamesInt()用來初始化int類型參數(shù),myConfigureNamesInt[]數(shù)組里配置我們需要的int參數(shù);
  • InitConfigureNamesReal()用來初始化double類型參數(shù),InitConfigureNamesReal[]數(shù)組里配置我們需要的double參數(shù);
  • InitConfigureNamesString()用來初始化string類型參數(shù),InitConfigureNamesString[]數(shù)組里配置我們需要的string參數(shù);

回到我們例子,我增加是字符串類型,我需要在InitConfigureNamesString[]數(shù)組中增加我的參數(shù):

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. 查看變量是否設(shè)置成功

我們就在src/backend/postmaster/postmaster.c的PostmasterMain()函數(shù)中讀取該參數(shù),我們?cè)谠摵瘮?shù)中可以看到InitializeGUCOptions()函數(shù),他就是為了初始所有參數(shù)。

查看參數(shù):

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

4. 程序中使用變量

在源碼文件src/backend/utils/misc/guc.c提供了幾個(gè)對(duì)外查詢參數(shù)的接口,外部模塊可以使用這些函數(shù)獲取參數(shù)。

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);

發(fā)現(xiàn)更多寶藏

我在喜馬拉雅上分享聲音

《PostgreSQL數(shù)據(jù)庫內(nèi)核分析》,點(diǎn)開鏈接可以聽聽,有點(diǎn)意思。

《數(shù)據(jù)庫系統(tǒng)概論(第4版)》,點(diǎn)開鏈接可以聽聽,有點(diǎn)意思。

更多IT有聲課程,點(diǎn)我發(fā)現(xiàn)更多

第 0 課 PostgreSQL 系列文章列表

其他相關(guān)文章分享列表:

第 23 課 PostgreSQL 創(chuàng)建自己的數(shù)據(jù)庫、模式、用戶
第 22 課 PostgreSQL 控制文件
第 21 課 PostgreSQL 日志系統(tǒng)
第 16 課 查詢過程源碼分析
第 15 課 PostgreSQL 系統(tǒng)參數(shù)配置
第 14 課 PostgreSQL 數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)
第 13 課 PostgreSQL 存儲(chǔ)之Page(頁面)源碼分析
第 12 課 PostgreSQL 認(rèn)證方式
第 11 課 PostgreSQL 增加一個(gè)內(nèi)核C函數(shù)
第 10 課 PostgreSQL 在內(nèi)核增加一個(gè)配置參數(shù)
第 09 課 PostgreSQL 4種進(jìn)程啟動(dòng)方式
第 08 課 PostgreSQL 事務(wù)介紹
第 07 課 PostgreSQL 數(shù)據(jù)庫、模式、表、空間、用戶間的關(guān)系
第 06 課 PostgreSQL 系統(tǒng)表介紹
第 05 課 PostgreSQL 編譯源代碼進(jìn)行開發(fā)
第 04 課 PostgreSQL 安裝最新的版本
第 03 課 PostgreSQL 代碼結(jié)構(gòu)
第 02 課 PostgreSQL 的特性、應(yīng)用、安裝
第 01 課 PostgreSQL 簡(jiǎn)介及發(fā)展歷程

上面文章都在專輯中:PostgreSQL專輯鏈接,點(diǎn)我查看

如果有用,可以收藏這篇文件,隨時(shí)在更新....

更多交流加群: PostgreSQL內(nèi)核開發(fā)群 876673220

親,記得點(diǎn)贊、留言、打賞額?。?!

上一課
下一課

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡(jiǎn)書還為我保存起的...
    Jenaral閱讀 3,143評(píng)論 2 9
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 30,235評(píng)論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,653評(píng)論 1 32
  • 沒有人能了解 我的悲傷 像一道月痕割在臉上 我也不了解 即使走出陰影 我的眼睛 仍習(xí)慣黑夜
    滿_3539閱讀 83評(píng)論 0 0
  • 停在這里,思緒像風(fēng)車一樣轉(zhuǎn) 曾觸不可及的愛情沒有終點(diǎn) 貪心的人把現(xiàn)實(shí)演成話劇樣精彩 悲歡離合卻無處安置,如風(fēng)化在那...
    云外樓頭閱讀 275評(píng)論 0 0

友情鏈接更多精彩內(nèi)容