18.6.1. Actualización de datos a través de pg_dumpall
18.6.2. Actualización de datos a través de pg_upgrade
18.6.3. Actualización de datos mediante replicación

Esta sección explica cómo actualizar los datos de su base de datos de una versión de PostgreSQL a una más nueva.

Los números de versión actuales de PostgreSQL consisten en un número de versión principal y uno secundario. Por ejemplo, en la versión número 10.1, el 10 es el número de versión principal y el 1 es el número de versión secundaria, lo que significa que esta sería la primera versión secundaria de la versión principal 10. Para las versiones anteriores a la versión 10.0 de PostgreSQL, los números de versión consisten en tres números, por ejemplo, 9.5.3. En esos casos, la versión principal consta de los primeros grupos de dos dígitos del número de versión, por ejemplo, 9.5, y la versión secundaria es el tercer número, por ejemplo, 3, lo que significa que esta sería la tercera versión secundaria de la versión principal 9.5.

Las versiones menores nunca cambian el formato de almacenamiento interno y siempre son compatibles con las versiones menores anteriores y posteriores del mismo número de versión principal. Por ejemplo, la versión 10.1 es compatible con la versión 10.0 y la versión 10.6. De manera similar, por ejemplo, 9.5.3 es compatible con 9.5.0, 9.5.1 y 9.5.6. Para actualizar entre versiones compatibles, simplemente reemplace los ejecutables mientras el servidor está inactivo y reinicie el servidor. El directorio de datos permanece sin cambios: las actualizaciones menores son así de simples.

Para importante versiones de PostgreSQL, el formato de almacenamiento de datos interno está sujeto a cambios, lo que complica las actualizaciones. El método tradicional para mover datos a una nueva versión principal es volcar y recargar la base de datos, aunque esto puede ser lento. Un método más rápido es pg_upgrade. Los métodos de replicación también están disponibles, como se explica a continuación. (Si está utilizando una versión preempaquetada de PostgreSQL, es posible que proporcione scripts para ayudar con las principales actualizaciones de la versión. Consulte la documentación a nivel de paquete para obtener más detalles).

Las nuevas versiones principales también suelen introducir algunas incompatibilidades visibles para el usuario, por lo que es posible que se requieran cambios en la programación de la aplicación. Todos los cambios visibles para el usuario se enumeran en las notas de la versión (Apéndice E); preste especial atención a la sección denominada “Migración”. Si está actualizando en varias versiones principales, asegúrese de leer las notas de la versión de cada versión intermedia.

Los usuarios cautelosos querrán probar sus aplicaciones cliente en la nueva versión antes de cambiar completamente; por lo tanto, a menudo es una buena idea configurar instalaciones simultáneas de versiones nuevas y antiguas. Al probar una actualización importante de PostgreSQL, considere las siguientes categorías de posibles cambios:

Administración

Las capacidades disponibles para que los administradores supervisen y controlen el servidor a menudo cambian y mejoran en cada versión importante.

SQL

Por lo general, esto incluye nuevas capacidades de comando SQL y no cambios en el comportamiento, a menos que se mencione específicamente en las notas de la versión.

API de biblioteca

Por lo general, las bibliotecas como libpq solo agregan nuevas funciones, nuevamente a menos que se mencionen en las notas de la versión.

Catálogos del sistema

Los cambios en el catálogo del sistema generalmente solo afectan a las herramientas de administración de la base de datos.

API de lenguaje C del servidor

Esto implica cambios en la API de la función backend, que está escrita en el lenguaje de programación C. Dichos cambios afectan el código que hace referencia a funciones de backend en el interior del servidor.

18.6.1. Actualización de datos a través de pg_dumpall

Un método de actualización es volcar datos de una versión principal de PostgreSQL y volver a cargarlos en otra; para hacer esto, debe usar un lógico herramienta de respaldo como pg_dumpall; Los métodos de copia de seguridad a nivel del sistema de archivos no funcionarán. (Existen comprobaciones que le impiden usar un directorio de datos con una versión incompatible de PostgreSQL, por lo que no se puede hacer un gran daño al intentar iniciar la versión de servidor incorrecta en un directorio de datos).

Se recomienda que utilice los programas pg_dump y pg_dumpall de la más nuevo versión de PostgreSQL, para aprovechar las mejoras que podrían haberse realizado en estos programas. Las versiones actuales de los programas de volcado pueden leer datos de cualquier versión del servidor hasta la 7.0.

Estas instrucciones asumen que su instalación actual está bajo el /usr/local/pgsql directorio, y que el área de datos está en /usr/local/pgsql/data. Sustituya sus caminos apropiadamente.

  1. Si realiza una copia de seguridad, asegúrese de que su base de datos no se esté actualizando. Esto no afecta la integridad de la copia de seguridad, pero los datos modificados, por supuesto, no se incluirían. Si es necesario, edite los permisos en el archivo. /usr/local/pgsql/data/pg_hba.conf (o equivalente) para no permitir el acceso a todos excepto a usted. Ver Capítulo 20 para obtener información adicional sobre el control de acceso.

    Para hacer una copia de seguridad de la instalación de su base de datos, escriba:

    pg_dumpall > outputfile

    Para hacer la copia de seguridad, puede usar el comando pg_dumpall de la versión que está ejecutando actualmente; consulte la Sección 25.1.2 para obtener más detalles. Sin embargo, para obtener mejores resultados, intente utilizar el comando pg_dumpall de PostgreSQL 13.2, ya que esta versión contiene correcciones de errores y mejoras con respecto a versiones anteriores. Si bien este consejo puede parecer idiosincrásico ya que aún no ha instalado la nueva versión, es recomendable seguirlo si planea instalar la nueva versión en paralelo con la versión anterior. En ese caso, puede completar la instalación normalmente y transferir los datos más tarde. Esto también reducirá el tiempo de inactividad.

  2. Apague el servidor antiguo:

    pg_ctl stop

    En los sistemas que tienen PostgreSQL iniciado en el momento del arranque, probablemente haya un archivo de inicio que logrará lo mismo. Por ejemplo, en un Red Hat Linux sistema uno podría encontrar que esto funciona:

    /etc/rc.d/init.d/postgresql stop

    Ver Capítulo 18 para obtener detalles sobre cómo iniciar y detener el servidor.

  3. Si está restaurando desde una copia de seguridad, cambie el nombre o elimine el directorio de instalación anterior si no es específico de la versión. Es una buena idea cambiar el nombre del directorio, en lugar de eliminarlo, en caso de que tenga problemas y necesite volver a él. Tenga en cuenta que el directorio puede consumir una cantidad significativa de espacio en disco. Para cambiar el nombre del directorio, use un comando como este:

    mv /usr/local/pgsql /usr/local/pgsql.old

    (Asegúrese de mover el directorio como una sola unidad para que las rutas relativas permanezcan sin cambios).

  4. Instale la nueva versión de PostgreSQL como se describe en Sección 16.4.

  5. Cree un nuevo clúster de base de datos si es necesario. Recuerde que debe ejecutar estos comandos mientras está conectado a la cuenta de usuario de la base de datos especial (que ya tiene si está actualizando).

    /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data
  6. Restaura tu anterior pg_hba.conf y cualquier postgresql.conf modificaciones.

  7. Inicie el servidor de la base de datos, nuevamente usando la cuenta de usuario especial de la base de datos:

    /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
  8. Finalmente, restaure sus datos desde la copia de seguridad con:

    /usr/local/pgsql/bin/psql -d postgres -f outputfile

    utilizando el nuevo psql.

Se puede lograr el menor tiempo de inactividad instalando el nuevo servidor en un directorio diferente y ejecutando tanto el servidor antiguo como el nuevo en paralelo, en puertos diferentes. Entonces puedes usar algo como:

pg_dumpall -p 5432| psql -d postgres -p 5433

para transferir sus datos.

18.6.2. Actualización de datos a través de pg_upgrade

El módulo pg_upgrade permite migrar una instalación in situ de una versión principal de PostgreSQL a otra. Las actualizaciones se pueden realizar en minutos, especialmente con --link modo. Requiere pasos similares a pg_dumpall anterior, por ejemplo, iniciar / detener el servidor, ejecutar initdb. La documentación de pg_upgrade describe los pasos necesarios.

18.6.3. Actualización de datos mediante replicación

También es posible utilizar métodos de replicación lógica para crear un servidor en espera con la versión actualizada de PostgreSQL. Esto es posible porque la replicación lógica admite la replicación entre diferentes versiones principales de PostgreSQL. El modo de espera puede estar en la misma computadora o en una computadora diferente. Una vez que se haya sincronizado con el servidor maestro (que ejecuta la versión anterior de PostgreSQL), puede cambiar de maestro y hacer que el servidor de reserva sea el maestro y cerrar la instancia de base de datos anterior. Tal cambio da como resultado solo varios segundos de tiempo de inactividad para una actualización.

Este método de actualización se puede realizar utilizando las funciones de replicación lógica integradas, así como también con sistemas de replicación lógica externos como pglogical, Slony, Londiste y Bucardo.

Anterior Hasta próximo
18,5. Apagando el servidor Hogar 18,7. Prevención de la suplantación de identidad del servidor