49.3. ���ݿ��ҳ�ļ�

�����ṩһ�� PostgreSQL �ı��������ʹ�õ�ҳ���ʽ�ĸ����� [1] ���к�TOAST�ĸ�ʽ����ͨ��һ����

����������У��ٶ�һ���ֽ����� 8 ��λ�� ���⣬�item��ָ���Ǵ洢��һ��ҳ����Ķ�������ֵ�� ��һ�����һ������һ���У���һ�������һ������һ��������¼��

ÿ�������������һ���̶��ߴ磨ͨ���� 8K����Ȼ���ǿ����ڱ����ʱ��ѡ�������ijߴ磩�� pages ����洢�� �ڱ������ҳ���߼��϶���ͬ������һ���ض�����У����Դ洢���κ�ҳ��� ���������һ��ҳ��ͨ������ΪԪҳ���������ſ�����Ϣ�� �������������ʷ����IJ�ͬ��������������в�ͬ���͵�ҳ�档

Table 49-2��ʾһ��ҳ������岼�֡�ÿ��ҳ����������֡�

Table 49-2. ����ҳ�沼��

������
PageHeaderData20 �ֽڳ�����������ҳ���һ����Ϣ���������ɿռ�ָ�롣
ItemPointerDataһ����¼��ƫ���������ȣ���ԶԵ����飬ָ��ʵ���ÿ���� 4 �ֽڡ�
Free space�����ɿռ䣩δ����Ŀռ䡣����ָ����������Ŀ�ͷ��ʼ���䣬����ӽ�β��ʼ���䡣
Items���ʵ�ʵ����
Special Space������ռ䣩��������ģʽ��ص����ݡ���ͬ���������ʷ�ʽ��Ų�ͬ�����ݡ�����ͨ����Ϊ�ա�

ÿ��ҳ���ͷ20���ֽ����ҳͷ��PageHeaderData�������ĸ�ʽ�� Table 49-3 ����ϸ���ܡ� ͷ�����ֽڸ������ҳ����ص������ WAL � Ȼ��������� 2 �ֽڵ������ֶ� ��pd_lower��pd_upper�� �� pd_special���� ��Щ�ֶηֱ����ҳ�濪ʼλ����δ����ռ俪ͷ���ֽ�ƫ�ƣ���δ����ռ��β���ֽ�ƫ�ƣ� �Լ�������ռ俪ͷ���ֽ�ƫ�ơ� ҳ��ͷ����� 2 �ֽڣ�pd_pagesize_version�� �洢ҳ��ߴ�Ͱ汾ָʾ������ PostgreSQL 8.0 ��ʼ�� �汾���� 2��PostgreSQL 7.3 �� 7.4 ʹ�ð汾�� 1�� ��ǰ�İ汾ʹ�ð汾�� 0�� ������ҳ�沼�ֺ�ͷ��ʽ����Щ�汾�ﶼû�иı䣬���Ƕѵ���ͷ�����������仯���� ҳ���С��Ҫ���ڽ����飻Ŀǰ��һ�ΰ�װ���û��֧�ֶ���һ��ҳ���С�Ķ�����

Table 49-3. PageHeaderData ����

�ֶ�������������
pd_lsnXLogRecPtr8 �ֽ�LSN: ����޸����ҳ��� xlog ��¼���һ���ֽں����һ���ֽ�
pd_tliTimeLineID4 �ֽ�����޸ĵ� TLI
pd_lowerLocationIndex2 �ֽ������ɿռ俪ͷ��ƫ����
pd_upperLocationIndex2 �ֽ������ɿռ��β��ƫ����
pd_specialLocationIndex2 �ֽ�������ռ俪ͷ��ƫ����
pd_pagesize_versionuint162 �ֽ�ҳ���С�Ͳ��ְ汾����Ϣ

����ϸ�ڶ������� src/include/storage/bufpage.h ���ҵ���

��ҳͷ���������ʶ����ItemIdData����ÿ����Ҫ�ĸ��ֽڡ� һ�����ʶ������һ�����ͷ���ֽ�ƫ���������Լ����ֽڼƵij��ȣ� �Լ�һ������λ����Щ����λӰ�����Ľ��͡� �µ����ʶ��������Ҫ��δ����ռ�Ŀ�ͷ���䡣 ���ʶ������Ŀ����ͨ���鿴 pd_lower ���жϣ��ڷ����±�ʶ����ʱ�������� ��Ϊһ�����ʶ�������ͷ�ǰ���Բ����ƶ����������������������ڳ�ʱ�������һ��� ��ʹ�������Ϊѹ�����ɿռ���ҳ���ڲ��������ƶ�Ҳ��ˡ�ʵ���ϣ�PostgreSQL ������ÿ��ָ�����ָ�루ItemPointer��Ҳ���� CTID������һ��ҳ�ź�һ�����ʶ����������ɡ�

���洢�ڴ�δ����ռ�ĩβ��ʼ�Ӻ���ǰ����Ŀռ�� ���ǵ�ʵ�ʽṹ�����������ݲ�ͬ����ͬ��������ж�ʹ��һ�ֽ��� HeapTupleHeaderData �Ľṹ��������������

���һ����"�����"�������԰����κη��ʷ������ŵĶ����� ���磬b-tree �����洢ָ��ҳ�������ͬ�ڵ����ӣ��Լ�����һЩ�������ṹ��ص����ݡ� ��ͨ����ʹ������Σ�ͨ������ pd_special ����ҳ���С����ʾ����

���б��ж���ͬ���������졣������һ��������ͷ���ڴ����������ռ�� 27 ���ֽڣ��� �������һ����ѡ�� null λͼ��һ����ѡ�Ķ��� ID �ֶΣ��Լ��û����ݡ� ͷ�� Table 49-4 ����ϸ������ ʵ���û����ݣ��е��ֶΣ��� t_hoff ��ʶ��ƫ������ʼ�� �������Ǹ�ƽ̨�� MAXALIGN ����ı�����null λͼֻ���� t_infomask ����� HEAP_HASNULL λ�����˵�ʱ��ų��֡� ����������ˣ���ô�������ڶ���ͷ���棬 ռ���㹻����ÿ�������ֶζ�Ӧһ��λ���ֽ�����Ҳ����˵���ܹ� t_natts λ���� �����λ�����棬Ϊ 1 ��λ��ʾ�ǿգ���Ϊ 0 ��λ��ʾ�ա� ���û�г������λͼ����ô���������ֶζ�����Ϊ�ǿյġ� ���� ID ֻ���������� t_infomask ����� HEAP_HASOID λ��ʱ��ų��֡� ������֣������ó����� t_hoff ��Χ֮ǰ�� �����Ҫ���� t_hoff��ʹ֮��Ϊ MAXALIGN �ı�������ô��Щ��佫������ null λͼ�Ͷ��� ID ֮�䡣 ������Ҳ��֤�˶��� ID �õ�ǡ���Ķ��롣��

Table 49-4. HeapTupleHeaderData ����

�ֶ�������������
t_xminTransactionId4 �ֽ����� XID ����
t_cminCommandId4 �ֽ����� CID ����
t_xmaxTransactionId4 �ֽ�ɾ�� XID ����
t_cmaxCommandId4 �ֽ�ɾ�� CID ���ǣ��� t_xvac �ص���
t_xvacTransactionId4 �ֽ������ƶ��а汾������ VACUUM �� XID
t_ctidItemPointerData6 �ֽ�����������еĵ�ǰ ID
t_nattsint162 �ֽ��ֶ���Ŀ
t_infomaskuint162 �ֽ����ֱ�־λ
t_hoffuint81 �ֽ����û����ݵ�ƫ����

����ϸ�ڶ������� src/include/access/htup.h ���ҵ���

�Ծ������ݵĽ���ֻ���ڴ��������л�ȡ����Ϣ������½��У� ��Щ��Ϣ������� pg_attribute � ��ʶ�ֶ�λ�õĹؼ���ֵ�� attlen �� attalign�� ����û�а취ֱ�ӻ�ȡij���ֶΣ����������Ƕ�����û�� NULL �ġ� ������Щ���ӵIJ�������װ�ں��� heap_getattr�� fastgetattr �� heap_getsysattr �

Ҫ��ȡ���ݵĻ�������Ҫ�������ÿ���ֶΡ����ȸ��� null λͼ�����ֶ��Ƿ�Ϊ NULL�� ����ǣ���ô������һ���ֶΡ�Ȼ��֤��Ķ�������ȷ�ġ� ����ֶ���һ�������ֶΣ���ô�����ֽڶ��򵥵ط������ �������һ���䳤�ֶΣ�attlen = -1������ô���ͻ���Ӹ���һЩ�� ���б䳤�������Ͷ�ʹ��һ��ͨ�õ�ͷ�ṹ varattrib�� ���������洢�����ݵ�ȫ���Լ�һЩ��־λ�� ���ݱ�־�IJ�ͬ�����ݿ����������Ļ��������������У�TOAST������������ѹ���ģ�����Section 49.2����

Notes

[1]

ʵ���ϣ���������ģʽ������Ҫʹ����Щҳ���ʽ��Ŀǰ�� ��������������ȷ��ʹ�����������ʽ�� ������������Ԫ����ҳ�������ͨ������׼ȷ����ѭ��ֹ��򡣣�