이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 65.6. 무지개 토토 토토 베이 레이아웃버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

55.6. 무지개 토토 페이지 레이아웃

이 섹션은 사용 된 페이지 형식의 개요를 제공합니다. 이내에postgresql테이블 및 인덱스.[1]시퀀스 및토스트테이블이 형식화되었습니다 일반 테이블처럼.

다음 설명에서 abyte8 비트를 포함한다고 가정합니다. 또한 용어항목개별 데이터 값을 나타냅니다 페이지에 저장됩니다. 테이블에서 항목은 행입니다. 색인에서 항목은 색인 항목입니다.

모든 테이블과 색인은 배열로 저장됩니다페이지고정 크기 (보통 8kb, a 서버를 컴파일 할 때 다른 페이지 크기를 선택할 수 있습니다). 테이블에서 모든 페이지는 논리적으로 동일하므로 특정 항목 (행)은 모든 페이지에 저장할 수 있습니다. 인덱스에서 첫 번째 페이지는 일반적으로 A로 예약됩니다.전달제어 정보 유지 및 거기 인덱스 내에서 다른 유형의 페이지가 될 수 있습니다. 인덱스 액세스 방법.

표 55-2페이지의 전체 레이아웃이 표시됩니다. 각각에는 5 개의 부분이 있습니다 페이지.

표 55-2. 전체 페이지 레이아웃

item 설명
PageHeaderData 24 바이트 길이. 에 대한 일반 정보가 포함되어 있습니다 여유 공간 포인터를 포함한 페이지.
itemiddata 실제 (오프셋, 길이) 쌍 쌍을 실제를 가리키는 배열 항목. 항목 당 4 바이트.
여유 공간 할당되지 않은 공간. 새로운 아이템 포인터입니다 이 영역의 시작 부분에서 할당, 새 항목은 끝.
항목 실제 항목 자체.
특별 공간 색인 액세스 방법 특정 무지개 토토. 다른 방법 다른 무지개 토토를 저장하십시오. 평범한 테이블에서 비어 있습니다.

각 페이지의 첫 24 바이트는 페이지 헤더로 구성됩니다. (PageHeaderData). 형식은에 자세히 설명되어 있습니다.표 55-3. 처음 두 필드는 가장 최근의 WAL 항목을 추적합니다. 이 페이지. 다음은 플래그 비트를 포함하는 2 바이트 필드입니다. 이것은 3 개의 2 바이트 정수 필드 (이 뒤 따릅니다.PD_LOWER, pd_upperPD_SPECIAL). 여기에는 바이트 오프셋이 포함되어 있습니다 페이지는 할당되지 않은 공간의 시작부터 시작하여 끝까지 시작합니다. 할당되지 않은 공간과 특별한 공간의 시작. 그만큼 페이지 헤더의 다음 2 바이트,pd_pagesize_version, 페이지 크기를 모두 저장하십시오 및 버전 표시기. 부터 시작PostgreSQL8.3 버전 번호는 4;PostgreSQL8.1 및 8.2 사용 버전 번호 3;PostgreSQL8.0 중고 버전 번호 2;PostgreSQL7.3 및 7.4 중고 버전 번호 1; 사전 릴리스 중고 버전 번호 0 (기본 페이지 레이아웃 그리고이 버전의 대부분에서 헤더 형식이 변경되지 않았지만 힙 행 헤더의 레이아웃은 있습니다.) 페이지 크기는 기본적으로 교차 점검으로만 존재합니다. 가질에 대한 지원은 없습니다 설치시 둘 이상의 페이지 크기. 마지막 필드는 a 페이지를 잘라 내는지 여부를 보여주는 힌트 수익성 : 페이지에서 가장 오래된 Xmax를 추적합니다.

표 55-3. PageHeaderData 레이아웃

필드 타입 길이 설명
PD_LSN xlogrecptr 8 바이트 LSN : XLOG 레코드의 마지막 바이트 후 다음 바이트 이 페이지의 마지막 변경
PD_TLI UINT16 2 바이트 마지막 변경의 타임 라인 (최저 16 비트)
pd_flags UINT16 2 바이트 플래그 비트
PD_LOWER LocationIndex 2 바이트 여유 공간의 시작으로 오프셋
pd_upper LocationIndex 2 바이트 여유 공간 끝으로 오프셋
PD_SPECIAL LocationIndex 2 바이트 특별 공간의 시작으로 오프셋
pd_pagesize_version UINT16 2 바이트 페이지 크기 및 레이아웃 버전 번호 정보
PD_PRUNE_XID TransactionId 4 바이트 페이지에 가장 오래된 예측되지 않은 xmax 또는 0이면 0

모든 세부 사항은에서 찾을 수 있습니다src/include/storage/bufpage.h.

페이지 헤더 다음은 항목 식별자입니다 (itemiddata), 각각 4 바이트가 필요합니다. 항목 식별자는 항목의 시작에 바이트 오프셋을 포함합니다. 바이트의 길이 및 그 영향에 영향을 미치는 몇 가지 속성 비트 해석. 새로운 항목 식별자는 필요에 따라 할당됩니다 할당되지 않은 공간의 시작. 항목 수 존재하는 식별자는 보면 결정할 수 있습니다PD_LOWER, 새로운 것을 할당하기 위해 증가합니다 식별자. 항목 식별자가 그 때까지 이동하지 않기 때문에 Freed, 그 지수는 장기적으로 사용하여 참조 할 수 있습니다. 항목 자체가 페이지에서 이동하는 경우에도 소형 여유 공간. 사실, 항목에 대한 모든 포인터 (ItemPointer, 또한CTID) 생성PostgreSQL페이지 번호와 항목 식별자의 색인.

항목 자체는 뒤로 할당 된 공간에 저장됩니다 할당되지 않은 공간의 끝에서. 정확한 구조는 다릅니다 테이블이 포함되어야하는 것에 따라. 테이블 및 시퀀스 둘 다 이름이 지정된 구조를 사용합니다HeappupleHeaderData, 아래 설명.

마지막 섹션은입니다."스페셜 부분"액세스 방법을 포함 할 수 있습니다 저장하고 싶습니다. 예를 들어, B-Tree Indexes 저장 링크 Page의 왼쪽 및 오른쪽 형제 및 기타 무지개 토토 인덱스 구조와 관련이 있습니다. 일반 테이블은 사용하지 않습니다 전혀 특수 섹션 (설정으로 표시PD_SPECIAL페이지 크기와 동일).

모든 테이블 행은 같은 방식으로 구성됩니다. A가 있습니다 고정 크기 헤더 (대부분의 기계에서 23 바이트를 차지함) 선택적 NULL 비트 맵, 선택적 객체 ID 필드 및 사용자 데이터. 헤더는에 자세히 설명되어 있습니다.테이블 55-4. 실제 사용자 무지개 토토 (행의 열)는 로 표시된 오프셋t_hoff항상 Maxalign 거리의 배수 여야합니다. 플랫폼. NULL 비트 맵은 만있는 경우에만 존재합니다.Heap_hasnull비트가 설정되었습니다T_INFOMASK. 그것이 존재한다면 그것은 단지 시작됩니다 고정 헤더 후에 한 비트를 가질 수있는 충분한 바이트를 차지한 후 무지개 토토 열 당 (즉,t_natts비트 모두). 이 비트 목록에서 1 비트가 나타납니다 널이 아니라 0 비트는 널입니다. 비트 맵이 없을 때 모두 열은 널이 아닌 것으로 가정합니다. 객체 ID는 경우에만 존재합니다 그만큼heap_hasoid비트가 설정되었습니다T_INFOMASK. 존재한다면, 직전에 나타납니다 그만큼t_hoff경계. 모든 패딩 만들어야t_hoffMaxalign 널 비트 맵과 객체 ID 사이에 여러 가지가 나타납니다. (이것은 객체 ID가 적절하게 정렬.)

표 55-4. HeptupleHeaderData 레이아웃

필드 타입 길이 설명
t_xmin TransactionId 4 바이트 XID 스탬프 삽입
t_xmax TransactionId 4 바이트 XID 스탬프 삭제
T_CID CommandId 4 바이트 CID 스탬프 삽입 및/또는 삭제 (오버레이 t_xvac)
T_XVAC TransactionId 4 바이트 xid 진공 조작 행 버전 이동
T_CTID ItemPointerData 6 바이트 현재 또는 새로운 행 버전의 현재 시간
T_INFOMASK2 int16 2 바이트 속성 수, 다양한 플래그 비트
T_INFOMASK UINT16 2 바이트 다양한 플래그 비트
T_HOFF uint8 1 바이트 사용자 무지개 토토 오프셋

모든 세부 사항은에서 찾을 수 있습니다src/include/access/htup.h.

실제 무지개 토토 해석은 정보로만 수행 할 수 있습니다. 다른 테이블에서 획득, 대부분pg_attribute. 식별하는 데 필요한 주요 값 필드 위치는attlenandattalign. 방법이 없습니다 만있는 경우를 제외하고는 특정 속성을 직접 얻습니다. 고정 너비 필드 및 널 값이 없습니다. 이 모든 속임수입니다 함수로 마무리heap_getattr, FastgetAttrandheap_getsysattr.

데이터를 읽으려면 각 속성을 차례로 검사해야합니다. 먼저 널에 따라 필드가 무효인지 확인하십시오. 비트 맵. 그렇다면 다음으로 이동하십시오. 그런 다음 당신이 가지고 있는지 확인하십시오 올바른 정렬. 필드가 고정 너비 필드 인 경우 바이트는 간단하게 배치됩니다. 가변 길이 필드 인 경우 (attlen = -1) 그럼 조금 더 복잡합니다. 모두 가변 길이의 데이터 유형은 공통 헤더 구조를 공유합니다Struct Varlena, 여기에는 총계가 포함됩니다 저장된 값의 길이와 일부 플래그 비트. 에 따라 플래그, 데이터는 인라인 또는 a 일 수 있습니다.토스트테이블; 압축 될 수 있습니다 (참조섹션 55.2).

노트

[1]

실제로 인덱스 액세스 방법은이 페이지를 사용할 필요가 없습니다 체재. 모든 기존 색인 메소드는이 기본을 사용합니다 형식이지만 인덱스 메타지에 보관 된 데이터는 일반적으로 항목 레이아웃 규칙을 따르십시오.