Ficheros de p�ginas.

Una descripci�n del formato de p�gina de defecto de los ficheros de la base de datos.

Esta secci�n proporciona una visi�n general del formato de p�gina utilizado por las clases de Postgres. Los m�todos de acceso definidos por el usuario no necesitan utilizar este formato de p�gina.

En la siguiente explicaci�n, se asume que un byte contiene 8 bits. Adem�s, el t�rmino campo se refiere a los datos almacenados en una clase de Postgres.

Estructura de la p�gina.

La siguiente tabla muestra como est�n estructuradas las p�ginas tanto en las clases normales de Postgres como en las clases de �ndices de Postgres (es decir, un �ndice B-tree).

Tabla 1. Muestra de Dibujo de P�gina

CampoDescripci�n
Puntero a Datos (ItemPointerData)
Espacio Libre (filler)
Campo de datos....
Espacio desocupado
Campo de Continuaci�n de Datos (ItemContinuationData)
Espacio Especial
``Campo de datos 2''
``Campo de datos 1''
Datos de Identificaci�n de Campo (ItemIdData)
Datos de Cabecera de P�gina (PageHeaderData)

Los primeros 8 bytes de cada p�gina consiten en la cabecera de la p�gina (PpageHeaderData). Dentro de la cabecera, los primeros tres campos enteros de 2 bytes (menor, mayor y especial) representan bytes que reflejan el principio del espacio desocupado, el final del espacio desocupado, y el principio del espacio especial. El espacio especial es una regi�n al final de la p�gina que se ocupa en la inicializaci�n de la p�gina y que contiene informaci�n espec�fica sobre un m�todo de acceso. Los dos �ltimos 2 bytes de la cabecera de p�gina, opaco, codifica el tama�o de la p�gina e informaci�n sobre la fragmentaci�n interna de la misma. El tama�o de la p�gina se almacena en cada una de ellas, porque las estructuras del pool de buffers pueden estar subdivididas en una forma estructura por estructura dentro de una clase. La informaci�n sobre la fragmentaci�n interna se utiliza para ayudar a determinar cuando deber�a realizarse la reorganizaci�n de la p�gina.

Siguiendo a la cabecera de la p�gina est�n los identificadores de campo (ItemIdData). Se situan nuevos identificadores de campo a partir de los primeros cuatro bytes de espacio libre. Debido a que un identificador de campo nonca se mueve hasta que se elimina, este �ndice se puede utilizar para indicar la situaci�n de un campo en l ap�gina. De hecho, cada puntero a un campo (ItemPointer) creado por Postgres consiste en un n�mero de estructura y un �ndice de un identificador de campo. Un identificador de campo contiene un byte de referencia al principio de un campo, su longitud en bytes, y un conjunto de bits de atributos que pueden afectar a su interpretaci�n.

Los campos mismos est�n almacenados en un espacio situado m�s all� del final del espacio libre. Habitualmente, los campos no son interpretados. Sin embargo, cuando el campo es demasiado largo para ser situado en una �nica p�gina o cuando se desea la fragmentaci�n del campo, �ste mismo se divide y cada parte se manipula como campos distintos de la siguiente manera. Cada una de las partes en que se descompone se situa en una estructura de continuaci�n de campo (ItemContinuationData). Esta estructura contiene un puntero (ItemPointerData) hacia la siguiente parte. La �ltima de estas partes se manipula normalmente.