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

     

  • 相关阅读:
    PDO 数据访问抽象层
    递归例子
    Windows对象操作:浏览器窗口信息
    练习题:选择器和选择好友
    搭建wamp环境,数据库基础知识
    堆表空间管理
    vc弹出USB的方法. 附试验通过的代码!
    javascript 调用C++函数
    [转]在Win7 64位注册ActiveX控件
    SetForegroundWindow的正确用法
  • 原文地址:https://www.cnblogs.com/gaojian/p/2740700.html
Copyright © 2020-2023  润新知