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

[作者:技术者高健@博客园  mail: luckyjackgao@gmail.com]

主要代码在 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: luckyjackgao@gmail.com]

 

posted @ 2012-10-26 10:38  健哥的数据花园  阅读(375)  评论(0)    收藏  举报