Utilizo EndeavorOS como sistema operativo, y al ser del tipo rolling rellease1, tengo la costumbre de realizar actualizaciones frecuentes.
En la última actualización, postgresql dió el salto de la versión 13 a la versión 14, y con ello el motor de base de datos dejó de iniciar y mostraba el error:
An old version of the database format was found.
See https://wiki.archlinux.org/index.php/PostgreSQL#Upgrading_PostgreSQL
Failed to start PostgreSQL database server.
La causa del problema fue que existían bases de datos con la versión 13 que requerían migrarse a la versión 14.
Paso Previo
Para realizar la migración, es necesario instalar un paquete que contiene la versión anterior de postgres. En el caso de EndeavorOS, lo incluye en el paquete: "postgresql-old-upgrade"
Durante el proceso que describiré tuve otro problema, me apareció el mensaje:
"El clúster de origen no fue apagado limpiamente."
el cual tiene su equivalente en inglés:
"The source cluster was not shut down cleanly. Failure, exiting"
y la solución fue iniciar el motor de base de datos antiguo (los binarios de postgresql-old-upgrade).
export PGDATA=/var/lib/postgres/data;
/opt/pgsql-13/bin/postgres
Una vez iniciado, esperamos a que los procesos pendientes acaben y lo detenemos. Con ello, podemos realizar la migración propiamente.
Solución
Movemos la base de datos a un nuevo directorio e inicializamos la base de datos con la nueva versión:
sudo mv /var/lib/postgres/data /var/lib/postgres/olddata
sudo mkdir /var/lib/postgres/data /var/lib/postgres/tmp
sudo chown postgres:postgres /var/lib/postgres/data /var/lib/postgres/tmp
cd /var/lib/postgres/tmp
sudo -u postgres initdb -D /var/lib/postgres/data
Migramos la información de la anterior versión de postgresql a la nueva versión mediante la herramienta "pg_upgrade". Nótese que se debe reemplazar la variable PG_VERSION con la versión anterior:
sudo -u postgres pg_upgrade -b /opt/pgsql-PG_VERSION/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data
por ejemplo, en mi caso el comando fue:
sudo -u postgres pg_upgrade -b /opt/pgsql-13/bin -B /usr/bin -d /var/lib/postgres/olddata -D /var/lib/postgres/data
con ello ya podemos iniciar la nueva base de datos:
sudo systemctl start postgresql
Referencias
-
Se refiere al concepto de entregar actualizaciones frecuentes en las aplicaciones. Por ejemplo Arch Linux es un sistema operativo del tipo rolling release, mientras Ubuntu con su sistema de actualización cada 6 meses, no lo sería. ↩
Comentarios !
comments powered by Disqus