PostgreSQL的 initdb 源代码分析之十二
继续分析
- /* Now create all the text config files */
- setup_config();
将其展开:
实质就是,确定各种参数,分别写入 postgresql.conf 、pg_hba.conf、pg_indent.conf 文件。
- /*
- * set up all the config files
- */
- static void
- setup_config(void)
- {
- char **conflines;
- char repltok[];
- char path[MAXPGPATH];
- fputs(_("creating configuration files ... "), stdout);
- fflush(stdout);
- /* postgresql.conf */
- conflines = readfile(conf_file);
- snprintf(repltok, sizeof(repltok), "max_connections = %d", n_connections);
- conflines = replace_token(conflines, "#max_connections = 100", repltok);
- if ((n_buffers * (BLCKSZ / )) % == )
- snprintf(repltok, sizeof(repltok), "shared_buffers = %dMB",
- (n_buffers * (BLCKSZ / )) / );
- else
- snprintf(repltok, sizeof(repltok), "shared_buffers = %dkB",
- n_buffers * (BLCKSZ / ));
- conflines = replace_token(conflines, "#shared_buffers = 32MB", repltok);
- #if DEF_PGPORT != 5432
- snprintf(repltok, sizeof(repltok), "#port = %d", DEF_PGPORT);
- conflines = replace_token(conflines, "#port = 5432", repltok);
- #endif
- snprintf(repltok, sizeof(repltok), "lc_messages = '%s'",
- escape_quotes(lc_messages));
- conflines = replace_token(conflines, "#lc_messages = 'C'", repltok);
- snprintf(repltok, sizeof(repltok), "lc_monetary = '%s'",
- escape_quotes(lc_monetary));
- conflines = replace_token(conflines, "#lc_monetary = 'C'", repltok);
- snprintf(repltok, sizeof(repltok), "lc_numeric = '%s'",
- escape_quotes(lc_numeric));
- conflines = replace_token(conflines, "#lc_numeric = 'C'", repltok);
- snprintf(repltok, sizeof(repltok), "lc_time = '%s'",
- escape_quotes(lc_time));
- conflines = replace_token(conflines, "#lc_time = 'C'", repltok);
- switch (locale_date_order(lc_time))
- {
- case DATEORDER_YMD:
- strcpy(repltok, "datestyle = 'iso, ymd'");
- break;
- case DATEORDER_DMY:
- strcpy(repltok, "datestyle = 'iso, dmy'");
- break;
- case DATEORDER_MDY:
- default:
- strcpy(repltok, "datestyle = 'iso, mdy'");
- break;
- }
- conflines = replace_token(conflines, "#datestyle = 'iso, mdy'", repltok);
- snprintf(repltok, sizeof(repltok),
- "default_text_search_config = 'pg_catalog.%s'",
- escape_quotes(default_text_search_config));
- conflines = replace_token(conflines,
- "#default_text_search_config = 'pg_catalog.simple'",
- repltok);
- snprintf(path, sizeof(path), "%s/postgresql.conf", pg_data);
- writefile(path, conflines);
- chmod(path, S_IRUSR | S_IWUSR);
- free(conflines);
- /* pg_hba.conf */
- conflines = readfile(hba_file);
- #ifndef HAVE_UNIX_SOCKETS
- conflines = filter_lines_with_token(conflines, "@remove-line-for-nolocal@");
- #else
- conflines = replace_token(conflines, "@remove-line-for-nolocal@", "");
- #endif
- #ifdef HAVE_IPV6
- /*
- * Probe to see if there is really any platform support for IPv6, and
- * comment out the relevant pg_hba line if not. This avoids runtime
- * warnings if getaddrinfo doesn't actually cope with IPv6. Particularly
- * useful on Windows, where executables built on a machine with IPv6 may
- * have to run on a machine without.
- */
- {
- struct addrinfo *gai_result;
- struct addrinfo hints;
- int err = ;
- #ifdef WIN32
- /* need to call WSAStartup before calling getaddrinfo */
- WSADATA wsaData;
- err = WSAStartup(MAKEWORD(, ), &wsaData);
- #endif
- /* for best results, this code should match parse_hba() */
- hints.ai_flags = AI_NUMERICHOST;
- hints.ai_family = PF_UNSPEC;
- hints.ai_socktype = ;
- hints.ai_protocol = ;
- hints.ai_addrlen = ;
- hints.ai_canonname = NULL;
- hints.ai_addr = NULL;
- hints.ai_next = NULL;
- if (err != ||
- getaddrinfo("::1", NULL, &hints, &gai_result) != )
- conflines = replace_token(conflines,
- "host all all ::1",
- "#host all all ::1");
- }
- #else /* !HAVE_IPV6 */
- /* If we didn't compile IPV6 support at all, always comment it out */
- conflines = replace_token(conflines,
- "host all all ::1",
- "#host all all ::1");
- #endif /* HAVE_IPV6 */
- /* Replace default authentication methods */
- conflines = replace_token(conflines,
- "@authmethod@",
- authmethod);
- conflines = replace_token(conflines,
- "@authmethodlocal@",
- authmethodlocal);
- conflines = replace_token(conflines,
- "@authcomment@",
- strcmp(authmethod, "trust") ? "" : AUTHTRUST_WARNING);
- /* Replace username for replication */
- conflines = replace_token(conflines,
- "@default_username@",
- username);
- snprintf(path, sizeof(path), "%s/pg_hba.conf", pg_data);
- writefile(path, conflines);
- chmod(path, S_IRUSR | S_IWUSR);
- free(conflines);
- /* pg_ident.conf */
- conflines = readfile(ident_file);
- snprintf(path, sizeof(path), "%s/pg_ident.conf", pg_data);
- writefile(path, conflines);
- chmod(path, S_IRUSR | S_IWUSR);
- free(conflines);
- check_ok();
- }
PostgreSQL的 initdb 源代码分析之十二的更多相关文章
- PostgreSQL的 initdb 源代码分析之十五
继续分析: if (pwprompt || pwfilename) get_set_pwd(); 由于我启动initdb的时候,没有设置口令相关的选项,故此略过. 接下来: setup_depend( ...
- PostgreSQL的 initdb 源代码分析之十九
继续分析: setup_dictionary(); 展开: 其中: cmd 是:"/home/pgsql/project/bin/postgres" --single -F -O ...
- PostgreSQL的 initdb 源代码分析之十八
继续分析: setup_conversion(); 展开: 其实质是: 运行命令:"/home/pgsql/project/bin/postgres" --single -F -O ...
- PostgreSQL的 initdb 源代码分析之十六
继续分析 setup_description(); 展开后: 就是要把 share/postgres.description 文件的内容读入到 pg_description 和 pg_shdescri ...
- PostgreSQL的 initdb 源代码分析之十四
继续分析: /* * Make the per-database PG_VERSION for template1 only after init'ing it */ write_version_fi ...
- PostgreSQL的 initdb 源代码分析之十
继续分析, 如下这段,因为条件不成立,被跳过: /* Create transaction log symlink, if required */ ) { fprintf(stderr,"I ...
- PostgreSQL的 initdb 源代码分析之二十四
继续分析: make_template0(); 展开: 无需再作解释,就是创建template0数据库 /* * copy template1 to template0 */ static void ...
- PostgreSQL的 initdb 源代码分析之二十五
继续分析: make_postgres(); 展开: 目的是创建postgres数据库. cmd是:/home/pgsql/project/bin/postgres" --single -F ...
- PostgreSQL的 initdb 源代码分析之二十二
继续分析 load_plpgsql(); 展开: 就是让postgres 执行 create extension plpgsql cmd是: "/home/pgsql/project/bin ...
随机推荐
- POJ 1523 SPF (割点,连通分量)
题意:给出一个网络(不一定连通),求所有的割点,以及割点可以切分出多少个连通分量. 思路:很多种情况. (1)如果给的图已经不是连通图,直接“ No SPF nodes”. (2)求所有割点应该不难 ...
- noip2004提高组题解
这次有两道题以前已经做过了,所以分数什么的也没有意义了.发现这年的难度设置极不靠谱,前三题都比较简单,最后一题太难,不知道出题人怎么想的. 第一题:储蓄计划 模拟. 第二题:合并果子 贪心.每次选最小 ...
- JavaScript学习笔记(备忘录)
===运算符 判断数值和类型是否相等.如: console.log('s'==='s') //输出trueconsole.log('1'===1) //输出false
- 【Java】List的三种遍历方法
public void List_Test(){ List<String>list = new ArrayList<String>(); for(int i = 0;i < ...
- LwIP源代码文件目录解析
1 -- LwIP源代码文件目录 root@motadou:/home/motadou/lwip/lwip-1.4.1# tree . ├── CHANGELOG ├── COPYING ├── do ...
- __VA_ARGS__与逗号操作符的巧妙结合
class Test { public: template<class T> Test& operator,(T t) { //具体操作 return *this; } } Tes ...
- 让Apache支持ASP.NET
Apache是目前广泛使用的一种网络服务器程序,不仅在UNIX/LINUX平台上被大量使用,而且在Windows平台上也有许多站点放弃了IIS 而转向Apache..NET是微软推出的功能强大的开发技 ...
- Selenium2Library系列 keywords 之 _SelectElementKeywords 之 page_should_contain_list(self, locator, message='', loglevel='INFO')
def page_should_contain_list(self, locator, message='', loglevel='INFO'): """Verifies ...
- <转>配置DNS辅助服务器:DNS系列之四
配置DNS辅助服务器 在前面的博文中,我们介绍了如何在DNS服务器中创建常用的DNS记录,本文中我们要为大家介绍如何配置DNS的辅助服务器,同时也要介绍一下和辅助区域类似的存根区域. DNS辅助服 ...
- SCAU 07校赛 10317 Fans of Footbal Teams
10317 Fans of Footbal Teams 时间限制:1000MS 内存限制:65535K 题型: 编程题 语言: 无限制 Description Two famous footba ...