博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PostreSQL 的模式创建的代码位于何处
阅读量:6323 次
发布时间:2019-06-22

本文共 2944 字,大约阅读时间需要 9 分钟。

[作者:技术者高健@博客园  mail:

主要代码在 src/backend/catalog/pg_namespace.c

/* ----------------                         * NamespaceCreate                         *                         * Create a namespace (schema) with the given name and owner OID.                         *                         * If isTemp is true, this schema is a per-backend schema for holding                         * temporary tables.  Currently, the only effect of that is to prevent it                         * from being linked as a member of any active extension.  (If someone                         * does CREATE TEMP TABLE in an extension script, we don't want the temp                         * schema to become part of the extension.)                         * ---------------                         */                        Oid                        NamespaceCreate(const char *nspName, Oid ownerId, bool isTemp)                        {                            ……                        nspoid = simple_heap_insert(nspdesc, tup);                        Assert(OidIsValid(nspoid));                                                CatalogUpdateIndexes(nspdesc, tup);                                                heap_close(nspdesc, RowExclusiveLock);                                                /* Record dependencies */                        myself.classId = NamespaceRelationId;                        myself.objectId = nspoid;                        myself.objectSubId = 0;                                                /* dependency on owner */                        recordDependencyOnOwner(NamespaceRelationId, nspoid, ownerId);                                                /* dependency on extension ... but not for magic temp schemas */                        if (!isTemp)                            recordDependencyOnCurrentExtension(&myself, false);                                            /* Post creation hook for new schema */                        InvokeObjectAccessHook(OAT_POST_CREATE,                                       NamespaceRelationId, nspoid, 0, NULL);                                    return nspoid;                        ……                    }
NamespaceCreate 被 src/backend/commands/schemacmds.c 的 CreateSchemaCommand 调用
/*                             * CREATE SCHEMA                             */                            void                            CreateSchemaCommand(CreateSchemaStmt *stmt, const char *queryString)                            {                                ……                            /* Create the schema's namespace */                            namespaceId = NamespaceCreate(schemaName, owner_uid, false);                                                        /* Advance cmd counter to make the namespace visible */                            CommandCounterIncrement();                            ……                        }

接下来,我特别想知道,得到的 oid ,被用到了什么地方,以何种方式存储。

[作者:技术者高健@博客园  mail:

 

转载地址:http://nclaa.baihongyu.com/

你可能感兴趣的文章
CSS3中linear-gradient实现百分比进度条
查看>>
Java设计模式精讲
查看>>
数据库索引为什么用B+树实现?
查看>>
Gensim训练维基百科语料库
查看>>
iOS 10.3应用内更换icon
查看>>
全局光照---光子映射
查看>>
支持向量机---线性支持向量机与软间隔最大化
查看>>
puppet自动化管理工具学习之文件
查看>>
Ubuntu安装RPM格式软件包
查看>>
SQL Server中的临时表和表变量 Declare @Tablename Table【转】
查看>>
汇编语言指令英文全称
查看>>
pure-ftpd脚本安装
查看>>
Linux NC 命令
查看>>
ThinkingInJava_6
查看>>
抓取安居客二手房经纪人数据,python爬虫自动翻页
查看>>
Office 2013 正式版--英文版/简体中文版下载(正版验证)
查看>>
iOS程序框架设计之皮肤切换功能 (白天与夜间效果)
查看>>
iptables
查看>>
Project facet Java 6.0 is not supported by target runtime Apache Tomcat v5.5.
查看>>
一个全新的拖拽分页—艺术啊
查看>>