接前面,继续分析: 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\n" "same directory as \"%s\".\n" "Check your installation.\n"), progname, full_path); else fprintf(stderr, _("The program \"postgres\" was found by \"%s\"\n" "but was not the same version as %s.\n" "Check your installation.\n"), 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) = '\0'; canonicalize_path(bin_path); fprintf(stderr,"bin_path is: %s \n",bin_path); if (!share_path) { share_path = pg_malloc(MAXPGPATH); get_share_path(backend_exec, share_path); } else if (!is_absolute_path(share_path)) { fprintf(stderr, _("%s: input file location must be an absolute path\n"), progname); exit(1); } canonicalize_path(share_path); fprintf(stderr,"share_path is: %s \n",share_path);