今天跟同事们讨论了一下initdb -s 的输出中“POSTGRES_SUPERUSERNAME”值的来源,从代码中确认了POSTGRES_SUPERUSERNAME值的来源
1. 打开网站https://doxygen.postgresql.org,右上角搜索"initdb",点击搜索结果中的initdb.c
2. ctrl+F 搜索,搜索关键字是"POSTGRES_SUPERUSERNAME"
3. 第一个搜索结果 摘录如下,
if (show_setting || debug)
{
fprintf(stderr,
"VERSION=%s\n"
"PGDATA=%s\nshare_path=%s\nPGPATH=%s\n"
"POSTGRES_SUPERUSERNAME=%s\nPOSTGRES_BKI=%s\n"
"POSTGRES_DESCR=%s\nPOSTGRES_SHDESCR=%s\n"
"POSTGRESQL_CONF_SAMPLE=%s\n"
"PG_HBA_SAMPLE=%s\nPG_IDENT_SAMPLE=%s\n",
PG_VERSION,
pg_data, share_path, bin_path,
注意此处<<<---username, bki_file,
desc_file, shdesc_file,
conf_file,
hba_file, ident_file);
if (show_setting)
exit(0);
上面的username显然是赋值,然后就继续追查这个"username",把鼠标放在“username”上之后,网页自动显示如下
username
static char * username
Definition: initdb.c:132
4.然后再定位到“initdb.c:132”,132行是:
static char *username = NULL;
5.ctrl+F 搜索,搜索关键字是"*username",找到第4个搜索结果,如下:
username = get_user_name_or_exit(progname);
6.再追查 get_user_name_or_exit()函数,找到如下代码:
/*
* Returns the current user name in a static buffer or exits
*/
const char *
get_user_name_or_exit(const char *progname)
{
const char *user_name;
char *errstr;
user_name = get_user_name(&errstr);
if (!user_name)
{
fprintf(stderr, "%s: %s\n", progname, errstr);
exit(1);
}
return user_name;
}
注意看注释:Returns the current user name in a static buffer or exits
中文意思是:返回静态buffer中的 current user name ,应该可以理解成启动pg cluster 的os user name