PostgreSQL的initdb 源代码分析之五

接前面,继续分析: 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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值