• 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]

     

  • 相关阅读:
    BZOJ-3211花神游历各国 并查集+树状数组
    HDU-1754I Hate It 线段树区间最值
    POJ-2777Count Color 线段树+位移
    BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
    HDU-1394 Minimum Inversion Number 线段树+逆序对
    HDU-1698 JUST A HOOK 线段树
    学习笔记 --- 线段树
    poj 2155 Matrix---树状数组套树状数组
    hdu 1166 敌兵布阵--BIT
    学习笔记 BIT(树状数组)
  • 原文地址:https://www.cnblogs.com/gaojian/p/2740700.html
Copyright © 2020-2023  润新知