Red Hat Training

A Red Hat training course is available for RHEL 8

8.3.5. Migración a la versión RHEL 8 de PostgreSQL

Red Hat Enterprise Linux 7 contiene PostgreSQL 9.2 como versión por defecto del servidor PostgreSQL. Además, se proporcionan varias versiones de PostgreSQL como Software Collections para RHEL 7 y RHEL 6.

Red Hat Enterprise Linux 8 proporciona PostgreSQL 10 (el flujo por defecto postgresql ), PostgreSQL 9.6, y PostgreSQL 12.

Los usuarios de PostgreSQL en Red Hat Enterprise Linux pueden utilizar dos rutas de migración para los archivos de la base de datos:

Utilice preferentemente el método de actualización rápida, que es más rápido que el proceso de volcado y restauración.

Sin embargo, en ciertos casos, la actualización rápida no funciona, y sólo se puede utilizar el proceso de volcado y restauración. Estos casos incluyen:

  • Actualizaciones entre arquitecturas
  • Sistemas que utilizan las extensiones plpython o plpython2. Tenga en cuenta que el repositorio de RHEL 8 AppStream sólo incluye el paquete postgresql-plpython3, no el paquete postgresql-plpython2.
  • La actualización rápida no es compatible con la migración desde las versiones de Red Hat Software Collections de PostgreSQL.

Como requisito previo a la migración a una versión posterior de PostgreSQL, haga una copia de seguridad de todas sus bases de datos de PostgreSQL.

El volcado de las bases de datos y la realización de copias de seguridad de los archivos SQL es una parte necesaria del proceso de volcado y restauración. Sin embargo, se recomienda hacerlo también si se realiza la actualización rápida.

Antes de migrar a una versión posterior de PostgreSQL, consulte las notas de compatibilidad de la versión de PostgreSQL a la que desea migrar, así como de todas las versiones de PostgreSQL omitidas entre la que está migrando y la versión de destino.

8.3.5.1. Actualización rápida con la herramienta pg_upgrade

Durante una actualización rápida, es necesario copiar los archivos de datos binarios en el directorio /var/lib/pgsql/data/ y utilizar la herramienta pg_upgrade.

Puede utilizar este método para migrar datos:

  • De la versión del sistema RHEL 7 de PostgreSQL 9.2 a la versión RHEL 8 de PostgreSQL 10
  • De la versión RHEL 8 de PostgreSQL 10 a la versión RHEL 8 de PostgreSQL 12

Si desea actualizar desde un flujo anterior de postgresql dentro de RHEL 8, siga el procedimiento descrito en Cambio a un flujo posterior y luego migre sus datos de PostgreSQL.

Para migrar entre otras combinaciones de versiones de PostgreSQL dentro de RHEL, y para la migración desde las versiones de Red Hat Software Collections de PostgreSQL a RHEL, utilice Dump and restore upgrade.

Importante

Antes de realizar la actualización, haga una copia de seguridad de todos sus datos almacenados en las bases de datos de PostgreSQL.

Por defecto, todos los datos se almacenan en el directorio /var/lib/pgsql/data/ en los sistemas RHEL 7 y RHEL 8.

El siguiente procedimiento describe la migración de la versión del sistema RHEL 7 de Postgreql 9.2 a una versión RHEL 8 de PostgreSQL.

Para realizar una actualización rápida:

  1. En el sistema RHEL 8, active el flujo (versión) al que desea migrar:

    # yum module enable postgresql:stream

    Sustituya stream por la versión seleccionada del servidor PostgreSQL.

    Puede omitir este paso si desea utilizar el flujo por defecto, que proporciona PostgreSQL 10.

  2. En el sistema RHEL 8, instale los paquetes postgresql-server y postgresql-upgrade:

    # yum install postgresql-server postgresql-upgrade

    Opcionalmente, si ha utilizado algún módulo de servidor PostgreSQL en RHEL 7, instálelo también en el sistema RHEL 8 en dos versiones, compiladas tanto contra PostgreSQL 9.2 (instalado como paquete postgresql-upgrade ) como contra la versión de destino de PostgreSQL (instalado como paquete postgresql-server ). Si necesita compilar un módulo de servidor PostgreSQL de terceros, constrúyalo tanto contra los paquetes postgresql-devel como postgresql-upgrade-devel.

  3. Compruebe los siguientes elementos:

    • Configuración básica: En el sistema RHEL 8, compruebe si su servidor utiliza el directorio por defecto /var/lib/pgsql/data y si la base de datos está correctamente inicializada y habilitada. Además, los archivos de datos deben almacenarse en la misma ruta mencionada en el archivo /usr/lib/systemd/system/postgresql.service.
    • servidoresPostgreSQL: Su sistema puede ejecutar varios servidores PostgreSQL. Asegúrese de que los directorios de datos de todos estos servidores se manejan de forma independiente.
    • módulos del servidorPostgreSQL: Asegúrese de que los módulos del servidor PostgreSQL que utilizó en RHEL 7 están instalados también en su sistema RHEL 8. Tenga en cuenta que los complementos se instalan en el directorio /usr/lib64/pgsql/ (o en el directorio /usr/lib/pgsql/ en los sistemas de 32 bits).
  4. Asegúrese de que el servicio postgresql no se está ejecutando en ninguno de los sistemas de origen y destino en el momento de copiar los datos.

    # systemctl stop postgresql.service
  5. Copie los archivos de la base de datos desde la ubicación de origen al directorio /var/lib/pgsql/data/ en el sistema RHEL 8.
  6. Realice el proceso de actualización ejecutando el siguiente comando como usuario de PostgreSQL:

    $ /bin/postgresql-setup --upgrade

    Esto lanza el proceso pg_upgrade en segundo plano.

    En caso de fallo, postgresql-setup proporciona un mensaje de error informativo.

  7. Copie la configuración anterior de /var/lib/pgsql/data-old al nuevo clúster.

    Tenga en cuenta que la actualización rápida no reutiliza la configuración anterior en la pila de datos más nueva y la configuración se genera desde cero. Si quieres combinar la configuración antigua y la nueva manualmente, utiliza los archivos *.conf en los directorios de datos.

  8. Inicie el nuevo servidor PostgreSQL:

    # systemctl start postgresql.service
  9. Ejecute el script analyze_new_cluster.sh que se encuentra en el directorio principal PostgreSQL:

    su postgres -c '~/analyze_new_cluster.sh'
  10. Si quieres que el nuevo servidor PostgreSQL se inicie automáticamente al arrancar, ejecuta:

    # systemctl enable postgresql.service