zoukankan      html  css  js  c++  java
  • 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]

     

  • 相关阅读:
    包含了访问命名服务的类和接口
    JNDI架构提供了一组标准的独立于命名系统的API
    利用JNDI的命名与服务功能来满足企业级API对命名与服务的访问
    JNDI(Java Naming and Directory Interface,Java命名和目录接口)
    Servlet 国际化
    重要的调试技巧
    使用 JDB 调试器
    Servlet 调试
    Servlet 打包部署
    编译包中的 Servlet
  • 原文地址:https://www.cnblogs.com/gaojian/p/2740700.html
Copyright © 2011-2022 走看看