广告
返回顶部
首页 > 资讯 > 数据库 >PostgreSQL源码学习(1)Page页
  • 648
分享到

PostgreSQL源码学习(1)Page页

PostgreSQL源码学习(1)Page页 2015-11-20 17:11:11 648人浏览 猪猪侠
摘要

The Internals of postgresql中对于存储的描述Http://www.interdb.jp/pg/pgsql01.html#_1.2. 每个表或索引都作为一个page数组存储于物理数据文件中(page大小默认为8k,编

PostgreSQL源码学习(1)Page页

The Internals of postgresql中对于存储的描述Http://www.interdb.jp/pg/pgsql01.html#_1.2.

每个表或索引都作为一个page数组存储于物理数据文件中(page大小默认为8k,编译时可以指定),单个的表数据文件中包含多个page页(默认单个表文件最大1G,超过1G后会新建同名+“.1”后缀的数据文件,依次累加,同样在编译时可以指定单个文件的最大值)。page页的结构如下图所示。

page页的结构

而对于page页中存储的行数据Tuple,其结构为下图所示。 Heap Tuple结构

相关数据结构

// src/include/storage/bufpage.h

typedef struct PageHeaderData
{
	
	PageXLogRecPtr pd_lsn;		
	uint16		pd_checksum;	
	uint16		pd_flags;		
	LocationIndex pd_lower;		
	LocationIndex pd_upper;		
	LocationIndex pd_special;	
	uint16		pd_pagesize_version;
	TransactionId pd_prune_xid; 
	ItemIdData	pd_linp[FLEXIBLE_ARRAY_MEMBER]; 
} PageHeaderData;
// src/include/storage/itemid.h

typedef struct ItemIdData
{
	unsigned	lp_off:15,		
				lp_flags:2,		
				lp_len:15;		
} ItemIdData;


#define LP_UNUSED		0		
#define LP_NORMAL		1		
#define LP_REDIRECT		2		
#define LP_DEAD			3		
// src/include/access/htup_details.h

struct HeapTupleHeaderData
{
	uNIOn
	{
		HeapTupleFields t_heap;
		DatumTupleFields t_datum;
	}			t_choice;

	ItemPointerData t_ctid;		

	

#define FIELDNO_HEAPTUPLEHEADERDATA_INFOMASK2 2
	uint16		t_infomask2;	

#define FIELDNO_HEAPTUPLEHEADERDATA_INFOMASK 3
	uint16		t_infomask;		

#define FIELDNO_HEAPTUPLEHEADERDATA_HOFF 4
	uint8		t_hoff;			

	

#define FIELDNO_HEAPTUPLEHEADERDATA_BITS 5
	bits8		t_bits[FLEXIBLE_ARRAY_MEMBER];	

	
};
// src/include/access/htup.h

typedef struct HeapTupleData
{
	uint32		t_len;			
	ItemPointerData t_self;		
	Oid			t_tableOid;		
#define FIELDNO_HEAPTUPLEDATA_DATA 3
	HeapTupleHeader t_data;		
} HeapTupleData;
您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL源码学习(1)Page页

本文链接: https://www.lsjlt.com/news/5416.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作