Aporte: reparar servicio de PostgreSQL que no inicia automáticamente en Windows

marjuanm Seguir

Eta
Programador
Verificación en dos pasos activada
Desde
16 Ago 2012
Mensajes
1.489
Que tal:

Uso PostgreSQL para una aplicación que estoy desarrollando y la verdad me ha parecido una buena base de datos, no he tenido problemas con ella salvo de unos días para acá que no iniciaba automáticamente el servicio que arranca el servidor al iniciar Windows.

En algunas ocasiones esto ya me ha pasado y pudiera ser que en ese momento no hay suficiente memoria, el sistema operativo está muy congestionado, etc y el servicio no arranca. No hay problema, tengo una rutina que detecta si el servicio está corriendo o no y si no, pues abre un cmd en modo administrador y arranca el servicio y el sistema sigue adelante.

Pero ahora he notado que esto tampoco sirve, aunque el sistema si es capaz de comunicarse con PostgreSQL no veo que el servicio aparezca como en ejecución en la lista de servicios de Windows, de modo que cada vez que corro mi aplicación, esta detecta que el servicio de PostgreSQL no está funcionando y salta el aviso de que si estoy seguro de querer correr la rutina para levantarlo usando permisos administrativos.

Después de mucho rato de investigar di con el problema: revisando el archivo log de PostgreSQL encuentro las siguientes líneas.

Insertar CODE, HTML o PHP:
2023-02-28 11:02:28.232 CST [9792] LOG:  el sistema de bases de datos fue interrumpido; última vez en funcionamiento en 2023-02-23 07:31:24 CST
2023-02-28 11:03:34.690 CST [9792] LOG:  el sistema de bases de datos no fue apagado apropiadamente; se está efectuando la recuperación automática
2023-02-28 11:03:34.733 CST [9792] LOG:  redo comienza en 0/1DD0078
2023-02-28 11:03:34.733 CST [9792] LOG:  largo de registro no válido en 0/1DD00B0: se esperaba 24, se obtuvo 0
2023-02-28 11:03:34.733 CST [9792] LOG:  redo listo en 0/1DD0078
2023-02-28 11:03:35.105 CST [7708] LOG:  el sistema de bases de datos está listo para aceptar conexiones

Nuevamente investigando encuentro que la estructura donde PostgreSQL guarda toda su información (incluida las bases de datos) está dañada, por si acaso le saco una copia a mis bases de datos (creando los archivos .sql correspondientes) y una copia a la carpeta data ubicada en C:\Program Files\PostgreSQL\10 (que es donde tengo PostgreSQL) e introduzco los siguientes comandos en un cmd con permisos de administrador:

Insertar CODE, HTML o PHP:
net stop  "postgresql-x64-10"
mkdir "C:\Program Files\PostgreSQL\10\data-2023-02-28-12-26-00"
xcopy "C:\Program Files\PostgreSQL\10\data" "C:\Program Files\PostgreSQL\10\data-2023-02-28-12-26-00" /e /c /r /y
del "C:\Program Files\PostgreSQL\10\data\postmaster.pid" /f /q
"C:\Program Files\PostgreSQL\10\bin\pg_resetwal.exe" -f -n -D "C:\Program Files\PostgreSQL\10\data"
net start "postgresql-x64-10"

La primer línea detendrá el servicio de PostgreSQL.
La segunda línea creará una carpeta con los datos actuales de hora y fecha y nos servirá por si metemos la pata, tenemos un respaldo de emergencia.
La tercer línea copia el contenido de nuestra carpeta data a esa carpeta de respaldo.
La cuarta línea borra el archivo postmaster.pid, es necesario de lo contrario no podremos reparar la estructura de PostgreSQL.
La quinta línea ejecuta la aplicación pg_resetwal.exe con la ruta de la carpeta data, esto repara dicha estructura.
Y la sexta línea reinicia el servidor de PostgreSQL.

Si miramos nuestra lista de servicios en Windows PostgreSQL ya está corriendo como un servicio, listo, reparamos nuestro PostgreSQL. Yo se que esto se puede optimizar pero lo dejo como una idea, también se puede crear un archivo BAT que automatice los nombres de la carpeta de respaldo, no se, cargar en una variable donde está la carpeta de instalación de PostgreSQL, etc.

Espero les sea de utilidad si en algún momento pasan por esta situación, el único detalle es que sigue sin arrancar pgAdmin 4 que es el administrador gráfico de nuestro PostgreSQL, pero yo uso SQL Manager Lite for Postgrade SQL (es gratis) para administrar mis bds en PostgreSQL y de momento no necesito pgAdmin 4. Saludos.
 

CarlosRR

Delta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
31 Ago 2013
Mensajes
609
Excelente bro, muy buen aporte me he topado anteriormente con problemas para iniciar el servicio en windows.

Aunque ultimamente lo que hago es dockerizar este tipo de ambientes con postgres o mysql
1678300427239.png
 
Arriba