[Pgsql-ayuda] [alvherre@dcc.uchile.cl: Re: Preguntas de la Universidad del Bio Bio otra vez.]

Alvaro Herrera alvherre@dcc.uchile.cl
Wed, 3 Sep 2003 15:06:45 -0400


Señores, señoras, señoritas y shell scripts,

Aquí hay una descripción del almacenamiento que se usa en PostgreSQL.

Una nota importante: en alguna parte dice que las tablas se guardan en
varios archivos que se llaman usando el OID de la tabla.  Esto no es
correcto, porque en realidad se usa el campo relfilenode de pg_class,
que como dije en un mensaje anterior es igual al OID excepto después de
hacer CLUSTER a una tabla o REINDEX a un índice.

Otro error: dice que "no hay redo-logs".  Esto no es cierto; los
registros de WAL son redo-logs.

Ojalá sirva.

----- Forwarded message from Alvaro Herrera <alvherre@dcc.uchile.cl> -----

Date: Mon, 4 Aug 2003 20:58:45 -0400
From: Alvaro Herrera <alvherre@dcc.uchile.cl>
To: NATALIA ANDRE VOITMANN ROCHA <nvoitman@alumnos.ubiobio.cl>
Subject: Re: Preguntas de la Universidad del Bio Bio otra vez.

On Mon, Aug 04, 2003 at 04:10:53PM -0400, NATALIA ANDRE VOITMANN ROCHA wrote:

Natalia, Juan Pablo,

> ¿cómo es la Estructura de almacenamiento de PostgreSQL?

Todos los datos en el directorio que llamaré PGDATA.  Ahí dentro hay un
directorio por base de datos, que se llama con el OID de la base de
datos (select oid, datname from pg_database).

Dentro de cada directorio hay una colección de archivos para cada tabla
e índice, también llamados con el OID del objeto correspondiente (select
oid, relname from pg_class).  Para cada tabla/índice, al pasar de 1GB,
se crea un nuevo archivo, por ej. el archivo "OID" contiene el primer
GB, OID.1 contiene el segundo GB, OID.2 el tercero, y así sucesivamente.

Además, dentro de PGDATA hay un directorio pg_xlog que contiene los
registros de WAL que permiten asegurar consistencia aún en caso de
cortes bruscos de energía.  También hay un directorio pg_clog que
contiene el "commit log", es decir, el registro sobre el estado de cada
transacción ("en curso", "abortada", "committed").

En Postgres no hay redo-logs, porque Postgres usa un gestor de escritura
que no sobreescribe tuplas.  En cierto modo, cada tabla tiene dentro de
sí misma un "undo-log" que cumple el mismo objetivo.  Para limpiar esto
se usa el comando VACUUM.


> ¿qué archivos forman a una BAse de DAtos?

Todos los que están dentro del directorio del OID de la base de datos,
más el commit log.  El registro de WAL también puede ser relevante
(generalmente lo es).


Documentación relevante:
http://developer.postgresql.org/docs/postgres/diskusage.html
http://developer.postgresql.org/docs/postgres/page.html
http://developer.postgresql.org/docs/postgres/wal-internals.html
http://developer.postgresql.org/pdf/internalpics.pdf

Ojalá les sirva.

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"Y eso te lo doy firmado con mis lagrimas" (Fiebre del loco)

----- End forwarded message -----

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
Criptografía: Poderosa técnica algorítmica de codificación que es
empleada en la creación de manuales de computadores.