PostreSQL 的模式创建的代码位于何处

简介:

主要代码在 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 ,被用到了什么地方,以何种方式存储。








本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/10/26/2740700.html,如需转载请自行联系原作者

目录
相关文章
|
算法 前端开发 UED
封装一个快速生成目录树的全局脚本
封装一个快速生成目录树的全局脚本
126 0
|
存储 小程序 索引
小程序跨页面传递参数的几种方式
小程序跨页面传递参数的几种方式
551 0
|
11月前
|
存储
Cloudstack启动实例模板从二级存储复制到主存储过程
Cloudstack启动实例模板从二级存储复制到主存储过程
LabVIEW使用调用节点与通过引用调用节点调用VI时的差别
LabVIEW使用调用节点与通过引用调用节点调用VI时的差别
184 1
|
C#
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
125 0
|
JavaScript 前端开发
脚本可放置与外部文件中
脚本可放置与外部文件中
82 1
|
Python
跨文件夹调用自定义模块
跨文件夹调用自定义模块
136 0
|
开发者 iOS开发
SwiftUI—创建第一个SwiftUI项目
SwiftUI—创建第一个SwiftUI项目
952 0
SwiftUI—创建第一个SwiftUI项目
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了
454 0
有点玄学,虽然不知道为什么第一个工程配置文件的资源放到某个位置,建立第一个工程时也是同样放到那个位置,就配置文件内容不断报错了