前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Postgresql源码(99)xlog数据注册

Postgresql源码(99)xlog数据注册

作者头像
mingjie
发布2023-02-17 08:57:06
2900
发布2023-02-17 08:57:06
举报
文章被收录于专栏:Postgresql源码分析

XLOG数据注册

在一个典型的XLOG插入中

代码语言:javascript
复制
		XLogBeginInsert();
		XLogRegisterData((char *) &xlrec, SizeOfHeapInsert);

		xlhdr.t_infomask2 = heaptup->t_data->t_infomask2;
		xlhdr.t_infomask = heaptup->t_data->t_infomask;
		xlhdr.t_hoff = heaptup->t_data->t_hoff;

		XLogRegisterBuffer(0, buffer, REGBUF_STANDARD | bufflags);
		XLogRegisterBufData(0, (char *) &xlhdr, SizeOfHeapHeader);
		XLogRegisterBufData(0,
							(char *) heaptup->t_data + SizeofHeapTupleHeader,
							heaptup->t_len - SizeofHeapTupleHeader);

		XLogSetRecordFlags(XLOG_INCLUDE_ORIGIN);

		recptr = XLogInsert(RM_HEAP_ID, info);

		PageSetLSN(page, recptr);

下图只解释XLogSetRecordFlags前面的数据注册部分。

  1. 所有数据都会在rdatas[]数组(申请连续的一大块空间)中找一个XLogRecData放在里面。区别是会有不同的链表来区分这些数据。
  2. XLogRegisterData会在rdatas数组申请一个单元,用mainrdata_last指针指向链表尾部负责append rdata。mainrdata_head负责记录链表头部。
  3. XLogRegisterBuffer会配合XLogRegisterBufData使用,也是在rdatas申请一个单元,用regrestered_buffer中的rdata_head、rdata_tail链表记录头尾。
  4. XLogRegisterBuffer负责获取一个regrestered_buffer。
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • XLOG数据注册
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档