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)更多
其他相關(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)贊、留言、打賞額?。?!