Migración de una base de datos de PostgreSQL mediante volcado y restauración

SE APLICA A: Azure Database for PostgreSQL: servidor único Azure Database for PostgreSQL: servidor flexible

Puede usar pg_dump para extraer una base de datos de PostgreSQL en un archivo de volcado. Después, use pg_restore para restaurar la base de datos de PostgreSQL a partir de un archivo de almacenamiento creado por pg_dump.

Requisitos previos

Para seguir esta guía, necesitará:

Creación de un archivo de volcado con los datos que se van a cargar

Para hacer una copia de seguridad de una base de datos de PostgreSQL existente en el entorno local o en una máquina virtual, ejecute el comando siguiente:

pg_dump -Fc -v --host=<host> --username=<name> --dbname=<database name> -f <database>.dump

Por ejemplo, si tiene un servidor local y una base de datos llamada testdb en él, ejecute lo siguiente:

pg_dump -Fc -v --host=localhost --username=masterlogin --dbname=testdb -f testdb.dump

Restauración de los datos en la base de datos de destino

Después de crear la base de datos de destino, puede usar el comando pg_restore y el parámetro --dbname para restaurar los datos en la base de datos de destino desde el archivo de volcado.

pg_restore -v --no-owner --host=<server name> --port=<port> --username=<user-name> --dbname=<target database name> <database>.dump

Al incluir el parámetro --no-owner, todos los objetos creados durante la restauración pasan a ser propiedad del usuario especificado con --username. Para más información, consulte la documentación de PostgreSQL.

Nota

En los servidores de Azure Database for PostgreSQL, las conexiones TLS/SSL están activadas de manera predeterminada. Si el servidor de PostgreSQL requiere conexiones TLS/SSL, pero no las tiene, establezca una variable de entorno PGSSLMODE=require para que la herramienta pg_restore se conecte con TLS. Sin TLS, el error podría ser: "FATAL: se requiere una conexión SSL. Especifique las opciones de SSL y vuelva a intentarlo". En la Windows de comandos, ejecute el comando SET PGSSLMODE=require antes de ejecutar el pg_restore comando. En Linux o Bash, ejecute el comando export PGSSLMODE=require antes de ejecutar el comando pg_restore.

En este ejemplo, restaure los datos del archivo de volcado testdb.dump en la base de datos mypgsqldb del servidor de destino mydemoserver.postgres.database.azure.com.

Este es un ejemplo de cómo usar este comando pg_restore para un servidor único:

pg_restore -v --no-owner --host=mydemoserver.postgres.database.azure.com --port=5432 --username=mylogin@mydemoserver --dbname=mypgsqldb testdb.dump

Este es un ejemplo de cómo usar este comando pg_restore para un servidor flexible:

pg_restore -v --no-owner --host=mydemoserver.postgres.database.azure.com --port=5432 --username=mylogin --dbname=mypgsqldb testdb.dump

Optimización del proceso de migración

Una manera de migrar la base de datos de PostgreSQL existente a Azure Database for PostgreSQL consiste en realizar una copia de seguridad de la base de datos en el origen y restaurarla en Azure. Para minimizar el tiempo necesario para completar la migración, considere el uso de los parámetros siguientes con los comandos de copia de seguridad y restauración.

Nota

Para obtener información de sintaxis detallada, consulte pg_dump y pg_restore.

Para la copia de seguridad

Realice la copia de seguridad con el modificador -Fc para poder realizar la restauración en paralelo a fin de agilizarla. Por ejemplo:

pg_dump -h my-source-server-name -U source-server-username -Fc -d source-databasename -f Z:\Data\Backups\my-database-backup.dump

Para la restauración

  • Mueva el archivo de copia de seguridad a una máquina virtual de Azure en la misma región que el servidor de Azure Database for PostgreSQL al que migrará. Ejecute el comando pg_restore desde esa máquina virtual para reducir la latencia de red. Cree la VM con las redes aceleradas habilitadas.

  • Abra el archivo de volcado de memoria para comprobar que las instrucciones CREATE INDEX se encuentran después de la inserción de datos. Si no es así, mueva las instrucciones de creación de índice una vez insertados los datos. Esto debería hacerse de manera predeterminada, pero se recomienda confirmarlo.

  • Restaure con el modificador -j N (donde N representa el número) para paralelizar la restauración. El número que especifique es el número de núcleos en el servidor de destino. También puede establecer el doble de los núcleos del servidor de destino para ver el impacto.

    Este es un ejemplo de cómo usar este comando pg_restore para un servidor único:

     pg_restore -h my-target-server.postgres.database.azure.com -U azure-postgres-username@my-target-server -j 4 -d my-target-databasename Z:\Data\Backups\my-database-backup.dump
    

    Este es un ejemplo de cómo usar este comando pg_restore para un servidor flexible:

     pg_restore -h my-target-server.postgres.database.azure.com -U azure-postgres-username -j 4 -d my-target-databasename Z:\Data\Backups\my-database-backup.dump
    
  • También puede editar el archivo de volcado si agrega el comando set synchronous_commit = off; al principio y el comando set synchronous_commit = on; al final. Si no lo activa al final, antes de que las aplicaciones cambien los datos, podría provocar la consiguiente pérdida de datos.

  • En el servidor Azure Database for PostgreSQL de destino, considere la posibilidad de hacer lo siguiente antes de la restauración:

    • Desactive el seguimiento del rendimiento de las consultas. Estas estadísticas no son necesarias durante la migración. Para ello, puede establecer pg_stat_statements.track, pg_qs.query_capture_mode y pgms_wait_sampling.query_capture_mode en NONE.

    • Use una SKU de memoria alta y proceso elevado, como la de 32 núcleos virtuales con optimización para memoria, para acelerar la migración. Puede escalar fácilmente de vuelta a su SKU preferida una vez completada la restauración. Cuanto mayor sea la SKU, mayor paralelismo puede lograr al aumentar el parámetro -j correspondiente en el comando pg_restore.

    • Si se aumenta la cantidad de IOPS en el servidor de destino, podría mejorar el rendimiento de la restauración. Puede aprovisionar más IOPS si aumenta el tamaño de almacenamiento del servidor. Esta configuración no se puede revertir, pero plantéese si una IOPS mayor beneficiaría la carga de trabajo real en el futuro.

No olvide probar y validar estos comandos en un entorno de prueba antes de usarlos en producción.

Pasos siguientes