Exportar e importar usando pg_dump, pg_dumpall y pg_restore

Esta página describe cómo exportar e importar datos a instancias de Cloud SQL mediante pg_dump, pg_dumpall y pg_restore.

Antes de empezar

Las exportaciones utilizan recursos de la base de datos, pero no interfieren con las operaciones normales de la base de datos a menos que la instancia tenga un suministro insuficiente.

Para conocer las mejores prácticas, consulte Mejores prácticas para importar y exportar datos .

Después de completar una operación de importación, verifique los resultados.

Obtenga más información sobre las utilidades pg_dump , pg_dumpall y pg_restore .

Exportar datos de Cloud SQL para PostgreSQL

Puede utilizar Cloud SQL para realizar una exportación desde el Google Cloud consola, la CLI de gcloud o la API.

  • Para exportar una sola base de datos PostgreSQL, utilice la utilidad pg_dump .
  • Para exportar todas las bases de datos PostgreSQL de un clúster, utilice la utilidad pg_dumpall .

Al utilizar cualquiera de las utilidades, asegúrese de utilizar también las opciones necesarias para garantizar que el archivo de exportación resultante sea válido para volver a importarlo a Cloud SQL.

Exportar datos desde un servidor PostgreSQL local mediante pg_dump

Para exportar una base de datos que no está administrada por Cloud SQL, para importarla posteriormente a Cloud SQL, utilice la utilidad pg_dump con los siguientes indicadores:

  • --no-owner

    Los comandos de cambio de propiedad no deben incluirse en el archivo de volcado.

  • --format

    Se permiten los formatos custom y directory si el archivo de volcado está destinado a usarse con pg_restore .

    Para el formato plain-text , exporte a un SQL dump file . Este formato no es compatible con pg_restore y debe importarse mediante Google Cloud Comando de importación de consola o cliente psql .

  • --no-acl

    Esta bandera es necesaria si su volcado contendría de otra manera declaraciones para otorgar o revocar la membresía en un rol de SUPERUSER .

  • --clean

    Esta bandera opcional le permite incluir la declaración SQL DROP <object> que se requiere para eliminar (limpiar) objetos de base de datos antes de importarlos.

  • --if-exists

    Esta bandera opcional le permite incluir la declaración SQL IF EXISTS con cada declaración DROP producida por la bandera clean .

Además, debes eliminar todo lo siguiente:

  • Declaraciones relacionadas con extensiones, si Cloud SQL no las admite. Consulte Extensiones de PostgreSQL para ver la lista de extensiones compatibles.
  • Sentencias CREATE EXTENSION o DROP EXTENSION que hacen referencia a plpgsql. Esta extensión viene preinstalada en las instancias de Cloud SQL Postgres.
  • COMMENT ON EXTENSION .

Confirme que la codificación predeterminada, determinada por la configuración de la base de datos, sea correcta para sus datos. Si es necesario, puede anularla con el indicador --encoding .

Exportar datos utilizando el formato custom de Cloud SQL para PostgreSQL

Para utilizar el formato personalizado, desde una línea de comando, ejecute pg_dump :

pg_dump \
-U USERNAME \
--format=custom \
--no-owner \
--no-acl \
DATABASE_NAME > DATABASE_NAME.dmp

Exportar datos de varios archivos en paralelo desde Cloud SQL para PostgreSQL

Solo puede utilizar el formato de salida directory para exportar datos desde varios archivos en paralelo .

Para exportar en paralelo, utilice el indicador -j NUM_CORES . NUM_CORES es la cantidad de núcleos en la instancia de origen.

Exportar todas las bases de datos

pg_dumpall es una utilidad que permite extraer todas las bases de datos PostgreSQL de un clúster en un único archivo de script. Este archivo contiene comandos SQL que permiten restaurar las bases de datos.

Para exportar todas las bases de datos PostgreSQL en una instancia de Cloud SQL, utilice la utilidad pg_dumpall con los siguientes indicadores obligatorios:

  • exclude-database=cloudsqladmin
  • exclude-database=template*

La utilidad pg_dumpall no tiene acceso a las bases de datos cloudsqladmin o template .

Para exportar todas las bases de datos PostgreSQL, ejecute el siguiente comando:

pg_dumpall \
-h HOST_NAME -l DATABASE_NAME –exclude-database=cloudsqladmin \
–exclude-database=template* > pg_dumpall.sql

Para ver las contraseñas de los roles al volcarlos con pg_dumpall , configure el indicador cloudsql.pg_authid_select_role con el nombre de un rol de PostgreSQL. Si el rol existe, tiene acceso de solo lectura ( SELECT ) a la tabla pg_authid . Esta tabla contiene las contraseñas de los roles.

Importar

Utilice la utilidad pg_restore para importar un archivo a una base de datos de Cloud SQL. pg_restore solo funciona con archivos creados por pg_dump , ya sea en formato custom o directory . Obtenga más información sobre pg_restore .

Importar desde un archivo de volcado creado con el formato custom a Cloud SQL para PostgreSQL

Si el archivo de volcado se creó con un formato personalizado, ejecute el siguiente comando:

pg_restore \
--list DATABASE_NAME.dmp | sed -E 's/(.* EXTENSION )/; \1/g' >  DATABASE_NAME.toc

El posprocesamiento de los comentarios sed elimina todas las declaraciones de extensión en el archivo de volcado de SQL.

Al importar utilizando pg_restore , especifique la tabla de contenido procesada con el argumento de la línea de comando "--use-list= DATABASE_NAME .toc".

Importar datos de varios archivos en paralelo a Cloud SQL para PostgreSQL

Puede importar datos de varios archivos en paralelo solo para archivos creados utilizando el directory y formatos de salida custom .

Para importar en paralelo, utilice el indicador -j NUM_CORES . NUM_CORES es la cantidad de núcleos en la instancia de destino.

Rendimiento de importación en Cloud SQL para PostgreSQL

¿Qué sigue?