PostgreSQL的 initdb 源代码分析之十五

继续分析:

    if (pwprompt || pwfilename)
        get_set_pwd();

由于我启动initdb的时候,没有设置口令相关的选项,故此略过。

接下来:

    setup_depend();

展开:

就是一组sql问,送给 postgres 执行:

cmd的值是: 

"/home/pgsql/project/bin/postgres" --single -F -O -c search_path=pg_catalog -c exit_on_error=true template1 >/dev/null

/*
 * set up pg_depend
 */
static void
setup_depend(void)
{
    PG_CMD_DECL;
    const char **line;
    static const char *pg_depend_setup[] = {
        /*
         * Make PIN entries in pg_depend for all objects made so far in the
         * tables that the dependency code handles.  This is overkill (the
         * system doesn't really depend on having every last weird datatype,
         * for instance) but generating only the minimum required set of
         * dependencies seems hard.
         *
         * Note that we deliberately do not pin the system views, which
         * haven't been created yet.  Also, no conversions, databases, or
         * tablespaces are pinned.
         *
         * First delete any already-made entries; PINs override all else, and
         * must be the only entries for their objects.
         */
        "DELETE FROM pg_depend;
",
        "VACUUM pg_depend;
",
        "DELETE FROM pg_shdepend;
",
        "VACUUM pg_shdepend;
",

        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_class;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_proc;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_type;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_cast;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_constraint;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_attrdef;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_language;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_operator;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_opclass;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_opfamily;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_amop;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_amproc;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_rewrite;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_trigger;
",

        /*
         * restriction here to avoid pinning the public namespace
         */
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_namespace "
        "    WHERE nspname LIKE 'pg%';
",

        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_ts_parser;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_ts_dict;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_ts_template;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_ts_config;
",
        "INSERT INTO pg_depend SELECT 0,0,0, tableoid,oid,0, 'p' "
        " FROM pg_collation;
",
        "INSERT INTO pg_shdepend SELECT 0,0,0,0, tableoid,oid, 'p' "
        " FROM pg_authid;
",
        NULL
    };

    fputs(_("initializing dependencies ... "), stdout);
    fflush(stdout);

    snprintf(cmd, sizeof(cmd),
             ""%s" %s template1 >%s",
             backend_exec, backend_options,
             DEVNULL);

    PG_CMD_OPEN;

    for (line = pg_depend_setup; *line != NULL; line++)
        PG_CMD_PUTS(*line);

    PG_CMD_CLOSE;

    check_ok();
}
原文地址:https://www.cnblogs.com/gaojian/p/3178344.html