En este breve tutorial, mostraremos cómo recuperar una base de datos de PostgreSQL cuando se encuentra en un sistema operativo MS Windows que está corrupto y no inicia. En ese estado, obviamente es imposible ejecutar los comandos pg_dump o pg_dumpall, que son los métodos recomendados para hacer una salva de los datos.
Lo primero es realizar una salva del directorio donde se encontraba instalado PostgreSQL (y del directorio de datos, en caso que se utilizara una ubicación personalizada). Normalmente esto se consigue mediante un LiveCD y un medio extraible, o colocando el disco físicamente en otro equipo.
Para minimizar el riesgo de pérdida de datos, lo ideal sería preparar (ya sea físicamente o en una máquina virtual) un equipo con el mismo sistema operativo (misma versión y arquitectura) que aquel en el que funcionaba la base de datos, e instalar la misma versión de PostgreSQL para exactamente la misma arquitectura, esto es muy importante, ya que las estructura de datos de las bases de PostgreSQL son diferentes en dependencia de si la arquitectura es x86 o x86-64, por lo que de accederse a los datos desde una versión de PostgreSQL para una arquitectura diferente, estos podría corromperse y la salva no sería confiable incluso de obtenerse.
A la hora de instalar PostgreSQL, el asistente usualmente permite especificar otra ruta para el directorio de datos, haremos eso mismo, por ejemplo creando el directorio c:\pgdata
Una vez terminada la instalación, detenemos el servicio de PostgreSQL (para lo cual podemos ejecutar services.msc), renombramos el directorio de datos a algo como pgdata.limpio, copiamos el directorio de datos de la salva en la raíz de la partición C y lo renombramos a pgdata.
En dicho directorio, buscaremos el archivo ph_hba.conf que es el relativo a la autenticación. Normalmente el método de autenticación es md5, lo cambiaremos a trust porque puede que no tengamos la contraseña de los diferentes roles de la base de datos, de modo que editaremos dicho archivo para que estas dos entradas luzcan asi:
host all all 127.0.0.0/8 trust host all all ::1/128 trust
Una vez hecho esto, modificaremos el archivo postmaster.opts para que las rutas sean las correctas, y de hecho revisaremos que los archivos de configuración del directorio de datos tienen valores correctos.
Finalmente, iniciaremos el servicio, y si todo se ha configurado corrfectamente, debería quedar en ejecución.
Una vez que el servicio ha iniciado, podemos ejecutar el siguiente comando para realizar una salva de la base de datos:
cd /d Ruta_al_directorio_bin_de_PostgreSQL pg_dumpall -U postgres -l nombre_de_la_base -f c:\salva.sql
Si deseamos podemos modificar el arhivo SQL y comentar al inicio las líneas relativas al rol postgres, porque este rol siempre se va a a crear y no necesariamente tiene por que tener la misma clave (para comentar una línea en sintaxis SQL, solo hay que colocarle al inicio dos quiones y un espacio).
Y eso es todo, una vez obtenido esta salva de la base de datos en formato SQL, debería ser posible restaurarla sin contratiempos en cualquier lugar que se ejecute PostgreSQL, independientemente del sistema operativo o la arquitectura.