Importa y exporta mediante pg_dump, pg_dumpall y pg_restore

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

Antes de comenzar

Las exportaciones usan recursos de bases de datos, pero no interfieren en las operaciones normales de las bases de datos, a menos que la instancia no cuente con el aprovisionamiento suficiente.

A fin de obtener prácticas recomendadas, consulta Recomendaciones para la importación y exportación de datos.

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

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

Exporta datos de Cloud SQL para PostgreSQL

Puedes usar Cloud SQL para realizar una exportación desde la consola de Google Cloud, la CLI de gcloud o la API.

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

Cuando uses cualquiera de las dos utilidades, asegúrate de usar también las opciones necesarias a fin de asegurarte de que el archivo de exportación resultante sea válido para volver a importarse a Cloud SQL.

Exporta datos de un servidor PostgreSQL local mediante pg_dump

Si deseas exportar una base de datos que no administra Cloud SQL para luego importarla a Cloud SQL, usa la utilidad pg_dump con las siguientes marcas:

  • --no-owner

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

  • --format

    Se permiten los formatos custom y directory si el archivo de volcado está diseñado para usarse con pg_restore.

    En el caso del formato plain-text, exporta a un SQL dump file en su lugar. Este formato no es compatible con pg_restore y debe importarse con el comando de importación de la consola de Google Cloud o el cliente psql.

  • --no-acl

    Esta marca es obligatoria si tu volcado contiene instrucciones para otorgar o revocar la membresía de una función SUPERUSER.

  • --clean

    Esta marca opcional te permite incluir la instrucción de SQL DROP <object> que se requiere para descartar (limpiar) los objetos de la base de datos antes de importarlos.

  • --if-exists

    Esta marca opcional te permite incluir la instrucción de SQL IF EXISTS con cada declaración DROP que produce la marca clean.

Además, debes quitar todos estos elementos:

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

Confirma que la codificación predeterminada, según lo que determine la configuración de la base de datos, sea la correcta para tus datos. Si es necesario, puedes anular el valor predeterminado con la marca --encoding.

Exporta datos con el formato custom de Cloud SQL para PostgreSQL

Para usar el formato personalizado, desde una línea de comandos, ejecuta pg_dump:

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

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

Solo puedes usar el formato de salida directory para exportar datos de varios archivos en paralelo.

Para exportar en paralelo, usa la marca -j NUM_CORES. NUM_CORES es la cantidad de núcleos en la instancia de origen.

Exporta todas las bases de datos

pg_dumpall es una utilidad que te permite extraer todas las bases de datos de PostgreSQL de un clúster en un solo archivo de secuencia de comandos. Este archivo tiene comandos de SQL que puedes usar para restablecer las bases de datos.

Para exportar todas las bases de datos de PostgreSQL en una instancia de Cloud SQL, usa la utilidad pg_dumpall con las siguientes marcas obligatorias:

  • 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 de PostgreSQL, ejecuta 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 rol cuando vuelcas roles con pg_dumpall, configura la marca cloudsql.pg_authid_select_role como un nombre de rol de PostgreSQL. Si el rol existe, tiene acceso de solo lectura (SELECT) a la tabla pg_authid. Esta tabla contiene contraseñas de roles.

Importar

Usa la herramienta pg_restore para importar un archivo a una base de datos de Cloud SQL. pg_restore solo funciona con los archivos que crea pg_dump en los formatos custom o directory. Obtén más información sobre pg_restore.

Importa 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, ejecuta el siguiente comando:

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

El procesamiento posterior desde sed marca como comentarios todas las sentencias de extensión en el archivo de volcado de SQL.

Cuando realices la importación mediante pg_restore, especifica la tabla de contenido procesada con el argumento de línea de comandos "--use-list=DATABASE_NAME.toc".

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

Puedes importar datos de varios archivos en paralelo solo para los archivos creados con los formatos de salida directory y custom.

Para importar en paralelo, usa la marca -j NUM_CORES. NUM_CORES es la cantidad de núcleos en la instancia de destino.

Importa el rendimiento en Cloud SQL para PostgreSQL

¿Qué sigue?