Confidare Weblog

PostgreSQL

Sincronizando Bases de Datos en PostgreSQL

por jcataldo el May.31, 2005, bajo PostgreSQL

Sincronizar los contenidos de bases de datos es una tarea común durante el desarrollo de cualquier software que deba terminar operando sobre los mismos datos que usaba la versión que reemplaza, aun cuando ellos deban atravesar un proceso de conversión.

Durante el desarrollo se trabajará generalmente en forma simultánea en dos o más bases de datos, una de las cuales estará asignada al proceso de migración de datos; esta tarea puede llegar a ser un proyecto en sí mismo. Eventualmente una base de datos será destinada a soportar la copia del sistema que el cliente accederá para realizar pruebas o marcha blanca.

En algún punto entre estos acontecimientos los datos migrados desde la versión antigua del software estarán listos y deberán ser movidos desde la base de datos de migración a aquella con la cual interactúa el cliente, o a alguna de desarrollo para efectuar pruebas de rendimiento. Las restricciones para dicho movimiento serán:

  1. Tanto schema (metadata) como datos deberán ser movidos.
  2. Si la BD contiene blobs (objetos binarios grandes), ellos deberán ser incluidos.
  3. Como cada base de datos tendrá un propietario particular y un conjunto de reglas de acceso, esta información no deberá ser modificada.

Las herramientas precisas para realizar la tarea son pg_dump y pg_restore, utilidades de propósito general para respaldar y restablecer bases de datos. La primera se utiliza para crear un archivo dump a partir de los contenidos de una base de datos, mientras que la segunda realiza el proceso inverso.

El formato del archivo puede ser texto SQL, binario “tar” o custom. Las restricciones 1 y 2 mencionadas arriba obligan a la utilización del formato custom. El comando para crear el archivo desde la base de datos origen, considerando el escenario y asumiendo que se está trabajando como usuario postgres, es simplemente:

    $ pg_dump --blobs --verbose --format c BD_ORIGEN > ARCHIVO_DUMP

La contraparte de esto, es decir, el comando mediante el cual se introducen los contenidos del archivo en la base de datos destino, es a su vez:

    $ pg_restore --clean --format c --verbose --dbname=DB_DESTINO ARCHIVO_DUMP

La opción –clean se utiliza para vaciar completamente los contenidos de la base de datos destino antes de poblarla.

1 comentario más...

Recreando template1 en PostgreSQL

por jcataldo el Nov.24, 2004, bajo PostgreSQL

¿Así que por cosas del destino template1 se llenó de basura? No hay que desesperar, gracias a que siempre template0 estará allí para ayudarnos.

¿Y cómo hacerlo? Simplemente eliminando template1 y recreándola a partir de los contenidos de template0.

1. Se debe quitar la marca de template a la BD template1 para que PostgreSQL nos permita eliminarla:

        xxx=# UPDATE pg_database SET datistemplate = FALSE
            WHERE datname = 'template1';
        UPDATE 1
        xxx=# DROP DATABASE template1;
        DROP DATABASE

2. Luego hay que crear nuevamente template1, usando como plantilla a template0:

        xxx=# CREATE DATABASE template1 WITH TEMPLATE = template0;
        CREATE DATABASE
        xxx=# UPDATE pg_database SET datistemplate = TRUE
            WHERE datname = 'template1';
        UPDATE 1

Todo lo anterior se debe hacer estando conectados a otra base de datos (en el ejemplo se llama xxx). Y cuidado, que en este proceso se perderá cualquier personalización que hayamos realizado sobre template1.

Espero que sea ésta la última vez que deba usar esta palta… :-(

(Agradecimientos especiales para Alberto Cabello por haberme enviado una corrección para esta entrada)

Escribe un comentario más...