En esta página, se describe cómo ejecutar instrucciones SQL en bases de datos en instancias de Cloud SQL con la API de datos. Con la API de datos, usas la API de Cloud SQL Admin y la CLI de gcloud para ejecutar instrucciones SQL en cualquier instancia en la que hayas habilitado el acceso a la API de datos.
Puedes usar la API de datos con instancias que usan direcciones IP públicas, acceso privado a servicios o Private Service Connect. La API de datos admite todos los tipos de instrucciones SQL, incluidos el lenguaje de manipulación de datos (DML), el lenguaje de definición de datos (DDL) y el lenguaje de consulta de datos (DQL). La API de datos es adecuada para ejecutar instrucciones administrativas pequeñas y rápidas, como crear roles o usuarios de bases de datos y realizar pequeñas actualizaciones de esquemas. También puedes usar la API de datos para habilitar extensiones de PostgreSQL.
Antes de comenzar
Antes de que puedas ejecutar instrucciones SQL en una instancia, haz lo siguiente:
- Configura la instancia para la autenticación de bases de datos de IAM.
- Agrega un usuario o una cuenta de servicio de IAM a la instancia y otorga a la cuenta los roles o permisos necesarios para ejecutar instrucciones SQL.
Roles o permisos requeridos
De forma predeterminada, las cuentas de servicio o usuario con uno de los siguientes roles tienen permiso para ejecutar instrucciones SQL en una instancia de Cloud SQL (cloudsql.instances.executesql):
Cloud SQL Admin(roles/cloudsql.admin)Cloud SQL Instance User(roles/cloudsql.instanceUser)Cloud SQL Studio User(roles/cloudsql.studioUser)
También puedes definir un rol personalizado de IAM
para la cuenta de servicio o usuario que incluya el cloudsql.instances.executesql
permiso. Este permiso es
compatible con los
roles personalizados de IAM.
Habilita o inhabilita la API de datos
Para usar la API de datos, debes habilitarla para cada instancia. Puedes inhabilitar la API de datos en cualquier momento.
Console
-
En la Google Cloud consola de, ve a la página Instancias de Cloud SQL.
- Para abrir la página de Descripción general de una instancia, haz clic en su nombre.
- En el menú de navegación de SQL, selecciona Conexiones.
- Haz clic en la pestaña Herramientas de redes.
- Selecciona la casilla de verificación Permitir la API de datos.
- Haz clic en Guardar.
gcloud
Para habilitar el acceso a la API de datos en una instancia, usa el gcloud sql instances patch comando con la --data-api-access=ALLOW_DATA_API marca:
gcloud sql instances patch INSTANCE_NAME --data-api-access=ALLOW_DATA_API
Para inhabilitar el acceso a la API de datos, usa la marca --data-api-access=DISALLOW_DATA_API:
gcloud sql instances patch INSTANCE_NAME --data-api-access=DISALLOW_DATA_API
Reemplaza INSTANCE_NAME por el nombre de la instancia en la que se habilitará o inhabilitará la API de datos.
Ejecuta una instrucción de SQL
Puedes ejecutar instrucciones SQL en bases de datos en tu instancia de Cloud SQL con gcloud CLI o la API de REST.
gcloud
Para ejecutar una instrucción de SQL en una base de datos en una instancia con la CLI de gcloud, usa el comando gcloud sql instances execute-sql:
gcloud sql instances execute-sql INSTANCE_NAME \ --database=DATABASE_NAME \ --sql=SQL_STATEMENT \ --partial_result_mode=PARTIAL_RESULT_MODE
Realiza los siguientes reemplazos:
- INSTANCE_NAME: El nombre de la instancia.
- DATABASE_NAME: El nombre de la base de datos dentro de la instancia.
- SQL_STATEMENT: La instrucción de SQL que se ejecutará. Si la instrucción contiene espacios o caracteres especiales del shell, debe estar entre comillas.
- PARTIAL_RESULT_MODE: Es opcional. Controla cómo responder cuando el resultado está incompleto. Puede ser
ALLOW_PARTIAL_RESULT,FAIL_PARTIAL_RESULToPARTIAL_RESULT_MODE_UNSPECIFIED. Consulta Modifica el comportamiento de truncamiento.
También puedes incluir la marca --project=PROJECT_ID si es necesario.
Terraform
Puedes usar la API de datos en Terraform para aprovisionar recursos en la base de datos, como bases de datos, tablas, extensiones, usuarios y otorgamientos de privilegios, sin conectarte de forma manual a la instancia. Para ejecutar una secuencia de comandos SQL en Terraform, usa el
google_sql_provision_script recurso de Terraform.
resource "google_sql_database_instance" "instance" { name = "my-instance" database_version = "POSTGRES_17" settings { tier = "db-perf-optimized-N-2" data_api_access = "ALLOW_DATA_API" # This allows the use of Data API. database_flags { name = "cloudsql.iam_authentication" value = "on" } } } /* * Create a database user for your account and grant roles so it has privilege to * access the database. Set the type toCLOUD_IAM_USERfor huamn account or *CLOUD_IAM_SERVICE_ACCOUNTfor service account. If a service account is used * and the instance is Postgres, trim the ".gserviceaccount.com" * suffix to avoid exceeding the username length limit. */ resource "google_sql_user" "iam_user" { name = "account-used-to-apply-this-config@example.com" instance = google_sql_database_instance.instance.name type = "CLOUD_IAM_USER" # Roles granted to the user. Smaller roles are preferred, if exist. database_roles = ["cloudsqlsuperuser"] } resource "google_sql_database" "database" { name = "my-database" instance = google_sql_database_instance.instance.name } resource "google_sql_provision_script" "script" { # You can inline the script or import from a file likescript = file("${path.module}/script.sql")# When modified, the whole script will be executed again. It's recommended to # make the script idempotent with patterns likecreate if not exists ...or #if not exists (select ...) then ... end if. script = "CREATE TABLE IF NOT EXISTS table1 ( col VARCHAR(16) NOT NULL );" instance = google_sql_database_instance.instance.name database = google_sql_database.database.name description = "sql script to create tables" # The identity account used to apply your Terraform config must exist as an # IAM user or IAM service account in the instance. Terraform connects to the # instance via IAM database authentication to execute the script. depends_on = [google_sql_user.iam_user] }
Aplica los cambios
Para aplicar tu configuración de Terraform en un Google Cloud proyecto, completa los pasos de las siguientes secciones.
Prepara Cloud Shell
- Inicia Cloud Shell.
-
Establece eldefault Google Cloud project donde deseas aplicar tus configuraciones de Terraform.
Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.
Prepara el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
-
En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión
.tf, por ejemplo,main.tf. En este instructivo, el archivo se denominamain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.
Copia el código de muestra en el
main.tfrecién creado.De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.
- Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo debes hacerlo una vez por directorio.
terraform init
De manera opcional, incluye la opción
-upgradepara usar la última versión del proveedor de Google:terraform init -upgrade
Aplica los cambios
-
Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
terraform plan
Corrige la configuración según sea necesario.
-
Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe
yescuando se te solicite:terraform apply
Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola de, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.
Borra los cambios
Borrar un recurso google_sql_provision_script no borrará los recursos en la base de datos que creó. Para borrarlos, puedes agregar instrucciones de forma explícita en la secuencia de comandos, como drop ... if exists y, luego, aplicar los cambios.
REST
Para ejecutar una instrucción de SQL en una base de datos en una instancia con la API de REST, envía una solicitud POST al extremo executeSql:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/executeSql
El cuerpo de la solicitud debe contener el nombre de la base de datos y la instrucción de SQL:
{ "database": "DATABASE_NAME", "sqlStatement": "SQL_STATEMENT", "partialResultMode": "PARTIAL_RESULT_MODE" "autoIamAuthn": true }
Realiza los siguientes reemplazos:
- PROJECT_ID: el ID de tu proyecto
- INSTANCE_NAME: El nombre de la instancia.
- DATABASE_NAME: El nombre de la base de datos dentro de la instancia.
- SQL_STATEMENT: La instrucción de SQL que se ejecutará.
- PARTIAL_RESULT_MODE: Es opcional. Controla cómo responde la API cuando el resultado supera los 10 MB. Puede ser
FAIL_PARTIAL_RESULToALLOW_PARTIAL_RESULT. Consulta Modifica el comportamiento de truncamiento.
Modifica el comportamiento de truncamiento
Puedes controlar cómo se manejan los resultados grandes cuando se ejecuta SQL.
- Incluye el campo
"partialResultMode"en la solicitud. Este campo acepta los siguientes valores:FAIL_PARTIAL_RESULT: Muestra un error si el resultado supera los 10 MB o si solo se puede recuperar un resultado parcial. No muestra el resultado.ALLOW_PARTIAL_RESULT: Muestra un resultado truncado y establecepartial_resultcomo verdadero si el resultado supera los 10 MB o si solo se puede recuperar un resultado parcial debido a un error. No muestra un error.
Limitaciones
- El límite de tamaño para una respuesta es de 10 MB. Los resultados que superen este tamaño se truncarán si
partialResultModese establece enALLOW_PARTIAL_RESULT. De lo contrario, se mostrará un error. - Las solicitudes tienen un límite de 0.5 MB.
- Solo puedes ejecutar instrucciones SQL para las instancias de Cloud SQL para PostgreSQL que se estén ejecutando.
- Cloud SQL no admite el uso de la API de datos con instancias configuradas para la replicación de servidores externos.
- Las solicitudes que tarden más de 30 segundos se cancelan. No se admite establecer un tiempo de espera de instrucción más alto con
SET STATEMENT_TIMEOUT. - Cloud SQL limita la cantidad de solicitudes
executeSqlsimultáneas a 10 por instancia para cada usuario. Si se alcanza este límite, las solicitudes posteriores fallarán con "Se pueden ejecutar como máximo 10 consultas simultáneas en esta instancia. Vuelve a intentarlo más tarde" o "Se alcanzó el máximo de lecturas simultáneas: 10". - Cada respuesta puede contener un máximo de 10 mensajes o advertencias de la base de datos.
- Si hay un error de sintaxis o de ejecución de la instrucción, no se muestra ningún resultado.
- Las instrucciones que consumen una gran cantidad de memoria pueden causar errores de falta de memoria. Para obtener más información sobre cómo evitar estos errores, consulta Prácticas recomendadas para administrar el uso de memoria. Una instancia de base de datos que se ejecuta con una utilización de memoria alta suele causar problemas de rendimiento, atascos o, incluso, tiempo de inactividad de la base de datos.
- La API de datos se puede bloquear de forma temporal por motivos de integridad de los datos cuando se realizan ciertas operaciones de mantenimiento en la instancia. Vuelve a intentarlo más tarde si sucede.
- La API de datos aún no garantiza la residencia de datos. Las solicitudes fallarán con el error "no compatible con instancias en ciertas carpetas de paquetes de control de Assured Workloads" para ciertos proyectos de Assured Workloads y para proyectos con
constraints/sql.restrictNoncompliantResourceCreationaplicados de forma manual.