Si deseas conocer las prácticas recomendadas para la importación de datos, consulta Prácticas recomendadas para importar y exportar datos.
Importa datos de un archivo de volcado de SQL a Cloud SQL
Antes de comenzar
- En este procedimiento, se requiere que importes un archivo de Cloud Storage. Para importar datos de Cloud Storage, la cuenta de servicio de la instancia de Cloud SQL o el usuario deben tener la función Cliente de Cloud SQL y, al menos, la función
roles/storage.legacyBucketReader
de IAM. Si la cuenta o el usuario también realizan operaciones de exportación, otorga el conjunto de funcionesStorage Object Admin
de IAM (storage.objectAdmin
). Si deseas obtener ayuda con las funciones de IAM, consulta Cloud Identity and Access Management para Cloud Storage.Puedes encontrar el nombre de la cuenta de servicio de la instancia en Google Cloud Console en la página Descripción general de la instancia. Puedes verificar las funciones de tu depósito de Cloud Storage mediante la herramienta de gsutil:
gsutil iam get gs://[BUCKET_NAME]
Obtén más información sobre cómo usar IAM con depósitos.
-
Crea un archivo de volcado de SQL. Utiliza las instrucciones de la viñeta que se aplica a tu situación. En estas instrucciones, se establecen ciertas marcas que hacen que el archivo de volcado sea compatible con Cloud SQL.
- Si deseas importar datos desde tu servidor PostgreSQL local:
- Crea un archivo de volcado de SQL con las instrucciones que aparecen en la sección sobre cómo exportar datos con pg_dump.
- Crea un depósito en Cloud Storage con las instrucciones de la sección sobre cómo crear depósitos de almacenamiento.
- Sube el archivo de volcado de SQL al depósito de Cloud Storage mediante el procedimiento que aparece en la sección sobre cómo subir objetos.
- Si exportas desde una instancia de Cloud SQL, consulta las instrucciones que aparecen en la sección sobre cómo exportar datos mediante Cloud SQL.
- Si deseas importar datos desde tu servidor PostgreSQL local:
- Antes de importar un archivo de volcado de SQL, asegúrese de que todos los usuarios que son propietarios de objetos o que se les otorgaron permisos en objetos de la base de datos volcados existan en la base de datos nueva.
Si este no es el caso, la importación no podrá recrear los objetos con la relación de propiedad o los permisos originales. (A veces, esto es lo que quieres, pero, por lo general, no lo es).
Si quieres obtener ayuda para crear usuarios, consulta la sección sobre cómo crear usuarios.
Importa datos de un archivo de volcado de SQL en Cloud Storage
Para importar datos de un archivo de volcado de SQL a una instancia de Cloud SQL, haz lo siguiente:
Console
- Ve a la página Instancias de Cloud SQL en Google Cloud Console.
- Selecciona la instancia para abrir su página de Descripción general.
- En la barra de botones, haz clic en Importar.
- En Elige el archivo del cual deseas importar datos, ingresa la ruta de acceso al depósito y el archivo de volcado de SQL que se usará para la importación. O bien, navega al archivo mediante estos pasos:
- Haz clic en Explorar.
- En Ubicación, haz doble clic en el nombre del depósito en la lista.
- Selecciona el archivo de la lista.
- Haz clic en Seleccionar.
Puedes importar un archivo comprimido (
.gz
) o uno sin comprimir (.sql
). - En Formato, selecciona SQL.
Selecciona la base de datos hacia la cual deseas importar los datos.
Esto hace que Cloud SQL ejecute la instrucción
USE DATABASE
antes de la importación.Si deseas especificar un usuario de PostgreSQL para que realice la importación, selecciona el usuario.
Si tu archivo de importación contiene declaraciones que un usuario de PostgreSQL específico debe llevar a cabo, usa este campo para especificar ese usuario.
- Haz clic en Importar para comenzar la importación.
gcloud
-
Si aún no lo hiciste, crea un bucket de Cloud Storage.
Para obtener ayuda sobre cómo crear un depósito, consulta Crea depósitos de almacenamiento.
Sube el archivo a tu depósito.
Para obtener ayuda con la carga de archivos en depósitos, consulta Sube objetos.
- Describe la instancia hacia la cual deseas importar:
gcloud sql instances describe [INSTANCE_NAME]
- Copia el campo
serviceAccountEmailAddress
. - Usa
gsutil iam
para otorgar la función de IAMstorage.objectAdmin
a la cuenta de servicio del depósito.gsutil iam ch serviceAccount:[SERVICE-ACCOUNT]:objectAdmin \ gs://[BUCKET-NAME]
Para obtener ayuda con la configuración de permisos de IAM, consulta la sección sobre cómo usar permisos de IAM. - Importa la base de datos:
gcloud sql import sql [INSTANCE_NAME] gs://[BUCKET_NAME]/[IMPORT_FILE_NAME] \ --database=[DATABASE_NAME]
Para obtener información sobre el uso del comando
import sql
, consulta la página de referencia del comandosql import sql
.Si el comando muestra un error como “ERROR_RDBMS”, revisa los permisos; por lo general, este error se genera por problemas con los permisos.
- Si no necesitas conservar los permisos de IAM que configuraste antes, quítalos mediante
gsutil iam
.
REST v1beta4
- Si deseas importar datos desde tu servidor PostgreSQL local:
- Crea un archivo de volcado de SQL con las instrucciones que aparecen en la sección sobre cómo exportar datos con pg_dump.
- Crea un depósito en Cloud Storage con las instrucciones de la sección sobre cómo crear depósitos de almacenamiento.
- Sube el archivo de volcado de SQL al depósito de Cloud Storage mediante el procedimiento que aparece en la sección sobre cómo subir objetos.
- Si exportas desde una instancia de Cloud SQL, consulta las instrucciones que aparecen en la sección sobre cómo exportar datos mediante Cloud SQL.
-
Si aún no lo hiciste, crea un bucket de Cloud Storage.
Para obtener ayuda sobre cómo crear un depósito, consulta Crea depósitos de almacenamiento.
Sube el archivo a tu depósito.
Para obtener ayuda con la carga de archivos en depósitos, consulta Sube objetos.
- Otorga a la instancia la función de IAM
storage.objectAdmin
para el depósito. Para obtener ayuda con la configuración de permisos de IAM, consulta la sección sobre cómo usar permisos de IAM. - Importa el archivo de volcado:
Antes de usar cualquiera de los siguientes datos de la solicitud, realiza estos reemplazos:
- project-id: El ID del proyecto
- instance-id: El ID de la instancia
- bucket_name: El nombre del depósito de Cloud Storage
- path_to_sql_file: La ruta de acceso al archivo SQL
- database_name: El nombre de una base de datos dentro de la instancia de Cloud SQL
Método HTTP y URL:
POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
Cuerpo JSON de la solicitud:
{ "importContext": { "fileType": "SQL", "uri": "gs://bucket_name/path_to_sql_file", "database": "database_name" } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
Si quieres usar un usuario diferente para la importación, especifica la propiedad
Si quieres obtener una lista completa de parámetros para esta solicitud, consulta la página instances:import.importContext.importUser
. - Si no necesitas conservar los permisos de IAM que configuraste, quítalos ahora.
Crea un archivo de volcado de SQL. Utiliza las instrucciones de la viñeta que se aplica a tu situación. En estas instrucciones, se establecen ciertas marcas que hacen que el archivo de volcado sea compatible con Cloud SQL.
Importa datos de archivos CSV a Cloud SQL
Antes de comenzar
- En este procedimiento, se requiere que importes un archivo de Cloud Storage. Para importar datos de Cloud Storage, la cuenta de servicio de la instancia de Cloud SQL o el usuario deben tener la función Cliente de Cloud SQL y, al menos, la función
roles/storage.legacyBucketReader
de IAM. Si la cuenta o el usuario también realizan operaciones de exportación, otorga el conjunto de funcionesStorage Object Admin
de IAM (storage.objectAdmin
). Si deseas obtener ayuda con las funciones de IAM, consulta Cloud Identity and Access Management para Cloud Storage.Puedes encontrar el nombre de la cuenta de servicio de la instancia en Google Cloud Console en la página Descripción general de la instancia. Puedes verificar las funciones de tu depósito de Cloud Storage mediante la herramienta de gsutil:
gsutil iam get gs://[BUCKET_NAME]
Obtén más información sobre cómo usar IAM con depósitos.
- La base de datos y la tabla hacia las que importas deben existir en tu instancia de Cloud SQL. Para obtener ayuda sobre cómo crear una base de datos, consulta la sección sobre cómo crear una base de datos.
Para crear una tabla en la base de datos, usa la instrucción de SQL
CREATE TABLE
en el clientepsql
. - El archivo CSV debe atenerse a los requisitos de formato de archivos CSV que se detallan a continuación.
Requisitos de formato de archivo CSV
Los archivos CSV deben tener una línea por cada fila de datos y usar campos separados por comas.
Si quieres ver instrucciones para exportar a un archivo CSV con formato para Cloud SQL, consulta la sección sobre cómo exportar datos desde Cloud SQL.
Importa datos de un archivo CSV a Cloud Storage
Para importar datos a una instancia de Cloud SQL con un archivo CSV, sigue estos pasos:
Console
- Ve a la página Instancias de Cloud SQL en Google Cloud Console.
- Selecciona la instancia para abrir su página de Descripción general.
- En la barra de botones, haz clic en Importar.
- En Elige el archivo del cual deseas importar datos, ingresa la ruta de acceso al depósito y el archivo CSV que se usará para la importación. O bien, navega al archivo mediante estos pasos:
- Haz clic en Explorar.
- En Ubicación, haz doble clic en el nombre del depósito en la lista.
- Selecciona el archivo de la lista.
- Haz clic en Seleccionar.
Puedes importar un archivo comprimido (
.gz
) o uno sin comprimir (.csv
). - En Formato, selecciona CSV.
- Especifica las opciones de Base de datos y Tabla en la instancia de Cloud SQL en la que deseas importar el archivo CSV.
- De manera opcional, puedes especificar un usuario para la importación.
- Haz clic en Importar para comenzar la importación.
gcloud
-
Si aún no lo hiciste, crea un bucket de Cloud Storage.
Para obtener ayuda sobre cómo crear un depósito, consulta Crea depósitos de almacenamiento.
Sube el archivo a tu depósito.
Para obtener ayuda con la carga de archivos en depósitos, consulta Sube objetos.
- Sube datos del archivo CSV al depósito.
- Describe la instancia desde la que exportas:
gcloud sql instances describe [INSTANCE_NAME]
- Copia el campo
serviceAccountEmailAddress
. - Usa
gsutil iam
para otorgar la función de IAMstorage.objectAdmin
a la cuenta de servicio del depósito. Para obtener ayuda con la configuración de permisos de IAM, consulta la sección sobre cómo usar permisos de IAM. - Importa el archivo:
gcloud sql import csv [INSTANCE_NAME] gs://[BUCKET_NAME]/[FILE_NAME] \ --database=[DATABASE_NAME] --table=[TABLE_NAME]
Para obtener información sobre el uso del comando
import csv
, consulta la página de referencia del comandosql import csv
. - Si no necesitas conservar los permisos de IAM que configuraste antes, quítalos mediante
gsutil iam
.
REST v1beta4
-
Si aún no lo hiciste, crea un bucket de Cloud Storage.
Para obtener ayuda sobre cómo crear un depósito, consulta Crea depósitos de almacenamiento.
Sube el archivo a tu depósito.
Para obtener ayuda con la carga de archivos en depósitos, consulta Sube objetos.
- Otórgale a tu instancia la función de IAM
storage.objectAdmin
para el depósito. Para obtener ayuda con la configuración de permisos de IAM, consulta la sección sobre cómo usar permisos de IAM. - Importa datos del archivo:
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto
- instance-id: El ID de la instancia
- bucket_name: El nombre del depósito de Cloud Storage
- path_to_csv_file: La ruta de acceso al archivo CSV
- database_name: El nombre de una base de datos dentro de la instancia de Cloud SQL
- table_name: El nombre de la tabla de la base de datos
Método HTTP y URL:
POST https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/import
Cuerpo JSON de la solicitud:
{ "importContext": { "fileType": "CSV", "uri": "gs://bucket_name/path_to_csv_file", "database": "database_name", "csvImportOptions": { "table": "table_name" } } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
A fin de usar un usuario diferente para la importación, especifica la propiedad
Si quieres obtener una lista completa de parámetros para esta solicitud, consulta la página instances:import.importContext.importUser
. - Si no necesitas conservar los permisos de IAM que configuraste antes, quítalos.
Si obtienes un error como ERROR_RDBMS
, asegúrate de que la tabla exista. Si la tabla existe, confirma que tienes los permisos correctos en el depósito. Si quieres obtener ayuda para configurar el control de acceso en Cloud Storage, consulta Crea y administra listas de control de acceso (LCA).
Importa datos a Cloud SQL con pg_restore
Puedes usar la herramienta pg_restore
para importar una base de datos a Cloud SQL. pg_restore
solo funciona con los archivos de almacenamiento que crea pg_dump
.
Obtén más información sobre pg_restore
.
pg_restore -h [CLOUD_SQL_INSTANCE_IP] -U [USERNAME] --format=plain --no-owner --no-acl -d [DATABASE_NAME] [SQL_FILE].sql
Para importar en paralelo, usa la marca -j NUM_CORES
.
NUM_CORES es la cantidad de núcleos en la instancia de origen. Usa la misma marca con pg_dump
para exportar en paralelo.
Soluciona problemas
Haz clic en los vínculos de la tabla para obtener más información:
Situación | Posible problema | Solución |
---|---|---|
No se puede ver el estado de la operación. | La interfaz de usuario solo muestra los estados que indican una finalización correcta o un error. | Usa estos comandos de la base de datos para obtener más información. |
408 Error (Timeout) durante la exportación. |
La exportación de SQL puede llevar mucho tiempo según el tamaño de la base de datos y el contenido de que se exporta. | Usa varias exportaciones de archivos CSV para reducir el tamaño de cada operación. |
La exportación de archivos CSV se completó, pero la exportación de SQL falló. | Es más probable que la exportación de SQL tenga problemas de compatibilidad con Cloud SQL. | Usa las exportaciones de archivos CSV para exportar solo lo que necesites. |
La exportación está tomando demasiado tiempo. | Cloud SQL no admite operaciones síncronas simultáneas. | Usa la descarga de exportación. Más información. |
La importación está tomando demasiado tiempo. | Hay demasiadas conexiones activas que pueden interferir en las operaciones de importación. | Cierra las conexiones sin usar o reinicia la instancia de Cloud SQL antes de comenzar una operación de importación. |
Se produjo un error cuando se creó la extensión. | En el archivo de volcado, se hace referencia a una extensión que no es compatible. | Edita el archivo de volcado para quitar las referencias. |
Se produjo un error cuando se usó pg_dumpall . |
La herramienta requiere una función de superusuario. | La función de superusuario no es compatible. |
Se agota el tiempo de espera de la operación de exportación antes de exportar algo. | La consulta debe generar datos dentro de los primeros siete minutos. | Prueba una exportación manual con la herramienta pg_dump . |
La importación falla. | El archivo exportado puede contener usuarios de la base de datos que aún no existen. | Crea los usuarios de la base de datos antes de realizar la importación. |
Se interrumpió la conexión durante la operación de exportación. | La consulta debe generar datos dentro de los primeros siete minutos. | Prueba la consulta de forma manual. Más información. |
Se produjo un error desconocido durante la exportación. | Es posible que haya un problema con el ancho de banda. | Asegúrate de que la instancia y el depósito de Cloud Storage estén en la misma región. |
Deseas automatizar las exportaciones. | Cloud SQL no proporciona una forma de automatizar las exportaciones. | Compila tu propia canalización para llevar a cabo esta función. Más información. |
ERROR_RDBMS: system error occurred . |
Permisos de Cloud Storage o tabla inexistente. | Verifica los permisos o asegúrate de que la tabla exista. |
No se puede ver el estado de la operación
No puedes ver el estado de una operación en curso.
Posible problema
Google Cloud Console solo informa si la operación se completó de forma correcta o si falló una vez que esta finaliza. Esta herramienta no está diseñada para mostrar advertencias.
Solución
Conéctate a la base de datos y ejecuta SHOW WARNINGS
.
Error 408 (Tiempo de espera agotado) durante la exportación
Verás el mensaje de error 408 Error (Timeout)
mientras realizas un trabajo de exportación en Cloud SQL.
Posible problema
Los formatos CSV y SQL se exportan de manera diferente. El formato SQL exporta la base de datos completa, y es probable que esta operación tome más tiempo para completarse. El formato CSV te permite definir qué elementos de la base de datos incluir en la exportación.
Solución
Usa el formato CSV y ejecuta varios trabajos de exportación más pequeños a fin de reducir el tamaño y la duración de cada operación.
La exportación de archivos CSV se completó, pero la exportación de SQL falló
La exportación de archivos CSV se completó, pero la exportación de SQL falló.
Posible problema
Los formatos CSV y SQL se exportan de manera diferente. El formato SQL exporta la base de datos completa, y es probable que esta operación tome más tiempo para completarse. El formato CSV te permite definir qué elementos de la base de datos incluir en la exportación.
Solución
Usa las exportaciones de archivos CSV para exportar solo lo que necesites.
La exportación está tomando demasiado tiempo
La exportación está tardando demasiado y está bloqueando otras operaciones.
Posible problema
Cloud SQL no admite operaciones síncronas simultáneas.
Solución
Intenta exportar conjuntos de datos más pequeños por vez.
La importación está tomando demasiado tiempo
La importación está tardando demasiado y está bloqueando otras operaciones.
Posible problema
Hay demasiadas conexiones activas que pueden interferir en las operaciones de importación. Las conexiones consumen CPU y memoria, lo que limita los recursos disponibles.
Solución
Cierra las operaciones sin usar. Verifica el uso de la memoria y la CPU para asegurarte de que haya una gran cantidad de recursos disponibles. La mejor manera de garantizar la cantidad máxima de recursos para la operación de importación es reiniciar la instancia antes de comenzar la operación. Cuando se realiza un reinicio, sucede lo siguiente:
- Se cierran todas las conexiones.
- Finaliza cualquier tarea que pueda consumir recursos.
Se produjo un error cuando se creó la extensión
Verás el mensaje de error SET SET SET SET SET SET CREATE EXTENSION ERROR:
must be owner of extension plpgsql
.
Posible problema
Cuando importas un archivo de volcado de PostgreSQL y ves un mensaje de error similar, el archivo de volcado contiene referencias a plpgsql
.
Solución
Edita el archivo de volcado e inhabilita todas las líneas relacionadas con plpgsql
.
Se produjo un error cuando se usó pg_dumpall
Se mostrará un error cuando intentes usar la herramienta de línea de comandos pg_dumpall
externa.
Posible problema
Se requiere la función de superusuario para esta herramienta.
Solución
Cloud SQL es un servicio administrado y no otorga a los usuarios las funciones o permisos de superusuario.
Un par restableció la conexión
Se agota el tiempo de espera de la operación de exportación antes de exportar algo. Verás el mensaje de error Could not receive data from client: Connection reset by peer.
.
Posible problema
Si Cloud Storage no recibe ningún dato en un período determinado, la conexión se restablece.
Solución
Realiza una exportación manual con la herramienta pg_dump
.
La importación falla
La importación falla cuando uno o más usuarios a los que se hace referencia en el archivo de volcado de SQL exportado no existen.
Posible problema
Antes de importar un archivo de volcado de SQL, deben existir todos los usuarios de la base de datos que poseen objetos o que recibieron permisos sobre los objetos en la base de datos de volcado. Si este no es el caso, el restablecimiento no puede volver a crear los objetos con la relación de propiedad o los permisos originales.
Solución
Crea los usuarios de la base de datos antes de importar el archivo de volcado de SQL.
Se interrumpió la conexión durante la operación de exportación
Se interrumpió la conexión durante la operación de exportación.
Posible problema
Es posible que el tiempo de espera de la conexión a Cloud Storage se esté agotando porque la consulta que se ejecutó en la exportación no produjo ningún dato en los primeros siete minutos desde que se inició la exportación.
Solución
Para probar la consulta de forma manual, conéctate desde cualquier cliente y envía el resultado de tu consulta a STDOUT con el siguiente comando:
COPY (INSERT_YOUR_QUERY_HERE) TO STDOUT WITH ( FORMAT csv, DELIMITER ',', ENCODING 'UTF8', QUOTE '"', ESCAPE '"' )
.
Este es el comportamiento previsto, ya que, cuando se inicia la exportación, se espera que el cliente comience a enviar datos de inmediato. Si se mantiene la conexión sin datos enviados, esta termina interrumpiéndose y, finalmente, la exportación falla, lo que deja a la operación en un estado incierto. Esto es lo que el siguiente mensaje de error de gcloud intenta comunicar:
operation is taking longer than expected
.
Error desconocido durante la exportación
Verás el mensaje de error Unknown error
mientras intentas exportar una base de datos a un depósito de Cloud Storage.
Posible problema
Es posible que la transferencia esté fallando debido a un problema de ancho de banda.
Solución
Es posible que la instancia de Cloud SQL esté ubicada en una región diferente a la del depósito de Cloud Storage. Leer y escribir datos de un continente a otro implica mucho uso de la red y puede causar problemas intermitentes como este. Verifica las regiones de la instancia y el depósito.
Deseas automatizar las exportaciones
Deseas automatizar las exportaciones.
Posible problema
Cloud SQL no proporciona una forma de automatizar las exportaciones.
Solución
Podrías compilar tu propio sistema de exportación automatizado mediante el uso de productos de Google Cloud, como Cloud Scheduler, Pub/Sub y Cloud Functions.
Se produjo el error del sistema ERROR_RDBMS
Verás el mensaje de error [ERROR_RDBMS] system error occurred
.
Posible problema
- Es posible que el usuario no tenga todos los permisos de Cloud Storage que necesita.
- Es posible que la tabla de la base de datos no exista.
Solución
- Verifica que tengas al menos los permisos
WRITER
en el depósito y los permisosREADER
en el archivo de exportación. Para obtener más información sobre cómo configurar el control de acceso en Cloud Storage, consulta Crea y administra Listas de control de acceso. - Asegúrate de que la tabla exista. Si la tabla existe, confirma que tienes los permisos adecuados en el depósito.
¿Qué sigue?
- Aprende a comprobar el estado de las operaciones de importación y exportación.
- Obtén más información sobre cómo importar y exportar datos.
- Obtén más información sobre Cloud Storage.