zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    仿网易/QQ空间视频列表滚动连播炫酷效果
    UIScrollerView当前显示3张图
    iOS AVPlayer视频播放器
    iOS 购物车动画
    C++从零实现简单深度神经网络(基于OpenCV)
    Android 轻松实现仿淘宝地区选择
    微信小程序之下拉刷新,上拉更多列表实现
    iOS 指南针
    tableView 获取网络图片,并且设置为圆角(优化,fps)
    黑客技术 —— Linux 命令行
  • 原文地址:https://www.cnblogs.com/gaojian/p/3178344.html
Copyright © 2011-2022 走看看