PostgreSQL的 initdb 源代码分析之十六

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核8GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:

继续分析

    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;\n");

    PG_CMD_PRINTF1("COPY tmp_pg_description FROM E'%s';\n",
                   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;\n");

    PG_CMD_PUTS("CREATE TEMP TABLE tmp_pg_shdescription ( "
                " objoid oid, "
                " classname name, "
                " description text) WITHOUT OIDS;\n");

    PG_CMD_PRINTF1("COPY tmp_pg_shdescription FROM E'%s';\n",
                   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;\n");

    /* 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);\n");

    PG_CMD_CLOSE;

    check_ok();
}
复制代码
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 11 新特性解读 : Initdb/Pg_resetwal支持修改WAL文件大小
PostgreSQL 11 版本的一个重要调整是支持 initdb 和 pg_resetwal 修改 WAL 文件大小,而 11 版本之前只能在编译安装 PostgreSQL 时设置 WAL 文件大小。
9193 1
|
关系型数据库 PostgreSQL 网络架构
|
关系型数据库 PostgreSQL Windows
|
SQL 关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL
|
关系型数据库 PostgreSQL Linux
|
4月前
|
存储 关系型数据库 测试技术
拯救海量数据:PostgreSQL分区表性能优化实战手册(附压测对比)
本文深入解析PostgreSQL分区表的核心原理与优化策略,涵盖性能痛点、实战案例及压测对比。首先阐述分区表作为继承表+路由规则的逻辑封装,分析分区裁剪失效、全局索引膨胀和VACUUM堆积三大性能杀手,并通过电商订单表崩溃事件说明旧分区维护的重要性。接着提出四维设计法优化分区策略,包括时间范围分区黄金法则与自动化维护体系。同时对比局部索引与全局索引性能,展示后者在特定场景下的优势。进一步探讨并行查询优化、冷热数据分层存储及故障复盘,解决分区锁竞争问题。
443 2
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
518 0

推荐镜像

更多