接前面,继续分析: putenv("TZ=GMT") 设置了时区信息。
find_other_exec(argv[0], "postgres", PG_BACKEND_VERSIONSTR, backend_exec))
就是要找到同目录下、同版本的postgres备用。initdb 执行后期,很多事情要依赖 postgres来处理的。
/* * Also ensure that TZ is set, so that we don't waste time identifying the * system timezone each of the many times we start a standalone backend. * It's okay to use a hard-wired value here because nothing done during * initdb cares about the timezone setting. */ putenv("TZ=GMT"); if ((ret = find_other_exec(argv[0], "postgres", PG_BACKEND_VERSIONSTR, backend_exec)) < 0) { char full_path[MAXPGPATH]; if (find_my_exec(argv[0], full_path) < 0) strlcpy(full_path, progname, sizeof(full_path)); if (ret == -1) fprintf(stderr, _("The program "postgres" is needed by %s " "but was not found in the " "same directory as "%s". " "Check your installation. "), progname, full_path); else fprintf(stderr, _("The program "postgres" was found by "%s" " "but was not the same version as %s. " "Check your installation. "), full_path, progname); exit(1); }
接下来,获得路径:
一个是 bin_path: 就是initdb执行的路径。我运行的结果是: /home/pgsql/project/bin
一个是 share_path: 就是一些共享用信息的路径。我运行的结果是: /home/pgsql/project/share
/* store binary directory */ strcpy(bin_path, backend_exec); *last_dir_separator(bin_path) = '