jueves, 18 de marzo de 2010

Recuperar PostgreSQL desde el directorio de datos

En donde trabajo tenían una máquina con Windows XP con una base de datos PostgreSQL y se echó a perder el sistema operativo. Los datos (como sucede más a menudo de lo que creía) no estaban respaldados y me preguntaron si había algún modo de recuperar la información dado que aún tenían el directorio con los datos. Yo, que poco sé, pero que tengo a mano la lista de postgresql en español, busqué con prontitud el archivo en busca de respuesta.

Rápidamente encontré solución a las plegarias de mi compañero de trabajo (el encargado de hacer los inexistentes respaldos).

Así, procedi de la siguiente manera:

1. Copie la carpeta data que encontré en C:\Archivos de programa\PostgreSQL\8.3\ y la monté en mi máquina con ubuntu.

2. Bajé mi servidor de PostgreSQL (que por supuesto estaba en la misma versión mayor).

bash$ /path/to/postgresql/bin/pg_ctl stop

3. Modifiqué los permisos al directorio de datos copiado de la máquina arruinada, pues este debe ser propiedad del usuario postgres y solo debe tener permisos de escritura ese usuario.

bash$ chown -R postgres:postgres /path/to/new/data/directory
bash$ chmod -R 700 /path/to/new/data/directory

4. Borré el archivo postmaster.pid, pues este no debería estar presente si PostgreSQL hubiera sido apagado correctamente.

5. Modifiqué postgresql.conf en varias ocasiones de acuerdo a los mensajes que iban apareciendo en el log.

6. Levanté PostgreSQL apuntando al nuevo directorio de datos

bash$ /path/to/postgresql/bin/pg_ctl -D path/to/new/data/directory


Hasta donde había leído, eso era lo único necesario para arrancar PostgreSQL con el directorio data. Sin embargo, obtuve una serie de errores que me decían que había sido imposible levantar PostgreSQL:


2010-03-24 15:33:36 COT FATAL: database files are incompatible with server
2010-03-24 15:33:36 COT DETAIL: The database cluster was initialized with MAXALIGN 8, but the server was compiled with MAXALIGN 4.
2010-03-24 15:33:36 COT HINT: It looks like you need to initdb.


Después de esto, recordé que en la lista leí una recomendación respecto a que en estos casos es mejor hacer esta misma tarea que describi pero en el mismo entorno en el cual corría la versión echada a perder, así que busqué prestado un computador con Windows XP para realizarla, y entonces me encontré con el problema de cómo asignar permisos sobre los directorios, pues no aparecía la pestaña Seguridad en ningún caso.

Así, busqué y me encontré con una opción en el explorador de windows bajo el menú herramientas -> Opciones de carpeta que se llama habilitar el uso compartido simple de archivos. Lo deshabilité y apareció la ventana mencionada que es en la cual podía modificar los permisos sobre un directorio.

Tras modificar los permisos, bajé el servicio, modifiqué el comando para que tome el nuevo directorio de datos y no hubo ningún problema para que PostgreSQL arrancara. Lo siguiente que se hizo fue sacar un respaldo.

No hay comentarios:

Publicar un comentario