postgres.h文件分析(原创,持续更新)

postgres.h是postgresql数据库服务器端各个主要模块代码都会包含的一个头文件。这个头文件中包含了服务器端广泛使用的变量的声明,因此,首先分析这个文件对阅读整个源码有很大的帮助。
postgres.h又包含了三个头文件:
c.h:一些简单类型的定义,其中包括很多typedef和一些简单的struct。
utils/elog.h:一些错误报告和日志的定义。
utils/palloc.h:定义了postgresql内存分配的基本接口。
结构 varatt_external的定义:
struct varatt_external
{
    int32        va_rawsize;        /* 数据的实际大小 */
    int32        va_extsize;        /* 实际存储的大小 */
    Oid        va_valueid;        /* TOAST表中该数据的唯一标识ID */
    Oid        va_toastrelid;        /* 包含该数据的TOAST表的RelID */
}
这个结构用来提取那些被压缩了的数据。由于postgresql允许存储用户自定义的对象,当这个对象的数据量太大时,为了便于存储,需要对数据进行压缩。压缩后的数据就可以利用这个结构进行提取。
typedef union
{
    struct                        /* Normal varlena (4-byte length) */
    {
        uint32        va_header;
        char        va_data[1];
    }            va_4byte;
    struct                        /* Compressed-in-line format */
    {
        uint32        va_header;
        uint32        va_rawsize; /* Original data size (excludes header) */
        char        va_data[1]; /* Compressed data */
    }            va_compressed;
} varattrib_4b;

这个联合表示varlena数据的头部信息。varlena是一个定义在c.h中的结构,它的功能和varatt_external结构的功能有点类似,不同的地方在于varlena可以被客户端和一些特殊的类型使用,而varatt_external只能用于服务器端。

 

阅读代码的同学如果发现以上的分析有错误,请及时告知。

posted @ 2010-01-18 22:06  电信415实验室  阅读(1733)  评论(0)    收藏  举报