zoukankan      html  css  js  c++  java
  • PostgreSQL的 initdb 源代码分析之十六

    继续分析

        setup_description();

    展开后:

    就是要把 share/postgres.description 文件的内容读入到 pg_description 和 pg_shdescription

    /*
     * load description data
     */
    static void
    setup_description(void)
    {
        PG_CMD_DECL;
    
        fputs(_("loading system objects' descriptions ... "), stdout);
        fflush(stdout);
    
        snprintf(cmd, sizeof(cmd),
                 ""%s" %s template1 >%s",
                 backend_exec, backend_options,
                 DEVNULL);
    
        PG_CMD_OPEN;
    
        PG_CMD_PUTS("CREATE TEMP TABLE tmp_pg_description ( "
                    "    objoid oid, "
                    "    classname name, "
                    "    objsubid int4, "
                    "    description text) WITHOUT OIDS;
    ");
    
        PG_CMD_PRINTF1("COPY tmp_pg_description FROM E'%s';
    ",
                       escape_quotes(desc_file));
    
        PG_CMD_PUTS("INSERT INTO pg_description "
                    " SELECT t.objoid, c.oid, t.objsubid, t.description "
                    "  FROM tmp_pg_description t, pg_class c "
                    "    WHERE c.relname = t.classname;
    ");
    
        PG_CMD_PUTS("CREATE TEMP TABLE tmp_pg_shdescription ( "
                    " objoid oid, "
                    " classname name, "
                    " description text) WITHOUT OIDS;
    ");
    
        PG_CMD_PRINTF1("COPY tmp_pg_shdescription FROM E'%s';
    ",
                       escape_quotes(shdesc_file));
    
        PG_CMD_PUTS("INSERT INTO pg_shdescription "
                    " SELECT t.objoid, c.oid, t.description "
                    "  FROM tmp_pg_shdescription t, pg_class c "
                    "   WHERE c.relname = t.classname;
    ");
    
        /* Create default descriptions for operator implementation functions */
        PG_CMD_PUTS("WITH funcdescs AS ( "
                    "SELECT p.oid as p_oid, oprname, "
                  "coalesce(obj_description(o.oid, 'pg_operator'),'') as opdesc "
                    "FROM pg_proc p JOIN pg_operator o ON oprcode = p.oid ) "
                    "INSERT INTO pg_description "
                    "  SELECT p_oid, 'pg_proc'::regclass, 0, "
                    "    'implementation of ' || oprname || ' operator' "
                    "  FROM funcdescs "
                    "  WHERE opdesc NOT LIKE 'deprecated%' AND "
                    "  NOT EXISTS (SELECT 1 FROM pg_description "
              "    WHERE objoid = p_oid AND classoid = 'pg_proc'::regclass);
    ");
    
        PG_CMD_CLOSE;
    
        check_ok();
    }
  • 相关阅读:
    react
    问题总结21-07-12至21-08-15
    排序
    问题总结21-06-28至21-07-11
    问题总结21-06-14至21-06-27
    问题总结21-05-29至21-06-13
    问题总结21-04-19至21-05-28
    问题总结21-03-29至21-04-18
    问题总结21-03-08至21-03-28
    问题总结21-03-01至21-03-07
  • 原文地址:https://www.cnblogs.com/gaojian/p/3178349.html
Copyright © 2011-2022 走看看