Auf dieser Seite wird beschrieben, wie Sie SQL-Anweisungen für Datenbanken in Cloud SQL-Instanzen mit der Data API ausführen. Mit der Data API verwenden Sie die Cloud SQL Admin API und die gcloud CLI, um SQL-Anweisungen für jede Instanz auszuführen, für die Sie den Data API-Zugriff aktiviert haben.
Sie können die Data API mit Instanzen verwenden, die öffentliche IP-Adressen, den Zugriff auf private Dienste oder Private Service Connect verwenden. Die Data API unterstützt alle Arten von SQL-Anweisungen, einschließlich DML (Datenbearbeitungssprache), DDL (Datendefinitionssprache) und DQL (Data Query Language). Die Data API eignet sich gut für kleine und schnelle administrative Anweisungen, z. B. zum Erstellen von Datenbankrollen oder ‑nutzern und für kleine Schemaaktualisierungen. Sie können die Data API auch verwenden, um PostgreSQL-Erweiterungen zu aktivieren.
Hinweis
Bevor Sie SQL-Anweisungen für eine Instanz ausführen können, müssen Sie Folgendes tun:
- Konfigurieren Sie die Instanz für die IAM-Datenbankauthentifizierung.
- Fügen Sie der Instanz einen IAM-Nutzer oder ein Dienstkonto hinzu und gewähren Sie dem Konto die erforderlichen Rollen oder Berechtigungen zum Ausführen von SQL-Anweisungen.
Erforderliche Rollen oder Berechtigungen
Standardmäßig haben Nutzer oder Dienstkonten mit einer der folgenden Rollen die Berechtigung zum Ausführen von SQL-Anweisungen für eine Cloud SQL-Instanz (cloudsql.instances.executesql):
Cloud SQL Admin(roles/cloudsql.admin)Cloud SQL Instance User(roles/cloudsql.instanceUser)Cloud SQL Studio User(roles/cloudsql.studioUser)
Sie können auch eine benutzerdefinierte IAM-Rolle für das Nutzer- oder Dienstkonto definieren, die die Berechtigung cloudsql.instances.executesql enthält. Diese Berechtigung wird in benutzerdefinierten IAM-Rollen unterstützt.
Data API aktivieren oder deaktivieren
Wenn Sie die Data API verwenden möchten, müssen Sie sie für jede Instanz aktivieren. Sie können die Data API jederzeit deaktivieren.
Console
-
Wechseln Sie in der Cloud de Confiance Console zur Seite Cloud SQL-Instanzen.
- Klicken Sie auf den Instanznamen, um die Seite Übersicht einer Instanz zu öffnen.
- Wählen Sie im SQL-Navigationsmenü die Option Verbindungen aus.
- Klicken Sie auf den Tab Netzwerk.
- Klicken Sie das Kästchen Data API zulassen an.
- Klicken Sie auf Speichern.
gcloud
Verwenden Sie den Befehl gcloud sql instances patch mit dem Flag --data-api-access=ALLOW_DATA_API, um den Data API-Zugriff für eine Instanz zu aktivieren:
gcloud sql instances patch INSTANCE_NAME --data-api-access=ALLOW_DATA_API
Verwenden Sie das Flag --data-api-access=DISALLOW_DATA_API, um den Data API-Zugriff zu deaktivieren:
gcloud sql instances patch INSTANCE_NAME --data-api-access=DISALLOW_DATA_API
Ersetzen Sie INSTANCE_NAME durch den Namen der Instanz, für die Sie die Data API aktivieren oder deaktivieren möchten.
SQL-Anweisung ausführen
Sie können SQL-Anweisungen für Datenbanken in Ihrer Cloud SQL-Instanz entweder mit der gcloud CLI oder der REST API ausführen.
gcloud
Wenn Sie mit der gcloud CLI eine SQL-Anweisung für eine Datenbank in einer Instanz ausführen möchten, verwenden Sie den Befehl gcloud sql instances execute-sql:
gcloud sql instances execute-sql INSTANCE_NAME \ --database=DATABASE_NAME \ --sql=SQL_STATEMENT \ --partial_result_mode=PARTIAL_RESULT_MODE
Ersetzen Sie die folgenden Werte:
- INSTANCE_NAME: der Name der Instanz.
- DATABASE_NAME: Der Name der Datenbank in der Instanz.
- SQL_STATEMENT: Die auszuführende SQL-Anweisung. Wenn die Anweisung Leerzeichen oder Shell-Sonderzeichen enthält, muss sie in Anführungszeichen gesetzt werden.
- PARTIAL_RESULT_MODE: optional. Steuert, wie reagiert werden soll, wenn das Ergebnis unvollständig ist. Kann
ALLOW_PARTIAL_RESULT,FAIL_PARTIAL_RESULToderPARTIAL_RESULT_MODE_UNSPECIFIEDsein. Weitere Informationen finden Sie unter Kürzung anpassen.
Bei Bedarf können Sie auch das Flag --project=PROJECT_ID einfügen.
Terraform
Mit der Data API in Terraform können Sie In-Database-Ressourcen wie Datenbanken, Tabellen, Erweiterungen, Nutzer und Berechtigungen bereitstellen, ohne manuell eine Verbindung zur Instanz herzustellen. Verwenden Sie zum Ausführen eines SQL-Scripts in Terraform die Terraform-Ressource
google_sql_provision_script.
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 ".s3ns-system.iam.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] }
Änderungen anwenden
Führen Sie die Schritte in den folgenden Abschnitten aus, um Ihre Terraform-Konfiguration auf ein Cloud de Confiance -Projekt anzuwenden.
Cloud Shell vorbereiten
- Rufen Sie Cloud Shell auf.
-
Legen Sie das Standardprojekt Cloud de Confiance fest, auf das Sie Ihre Terraform-Konfigurationen anwenden möchten.
Sie müssen diesen Befehl nur einmal pro Projekt und in jedem beliebigen Verzeichnis ausführen.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Umgebungsvariablen werden überschrieben, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.
Verzeichnis vorbereiten
Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet).
-
Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis. Der Dateiname muss die Erweiterung
.tfhaben, z. B.main.tf. In dieser Anleitung wird die Datei alsmain.tfbezeichnet.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Wenn Sie einer Anleitung folgen, können Sie den Beispielcode in jedem Abschnitt oder Schritt kopieren.
Kopieren Sie den Beispielcode in das neu erstellte
main.tf.Kopieren Sie optional den Code aus GitHub. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.
- Prüfen und ändern Sie die Beispielparameter, die auf Ihre Umgebung angewendet werden sollen.
- Speichern Sie die Änderungen.
-
Initialisieren Sie Terraform. Dies ist nur einmal für jedes Verzeichnis erforderlich.
terraform init
Fügen Sie optional die Option
-upgradeein, um die neueste Google-Anbieterversion zu verwenden:terraform init -upgrade
Änderungen anwenden
-
Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:
terraform plan
Korrigieren Sie die Konfiguration nach Bedarf.
-
Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie
yesan der Eingabeaufforderung ein:terraform apply
Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.
- Öffnen Sie Ihr Cloud de Confiance -Projekt, um die Ergebnisse aufzurufen. Rufen Sie in der Cloud de Confiance Console Ihre Ressourcen in der Benutzeroberfläche auf, um sicherzustellen, dass Terraform sie erstellt oder aktualisiert hat.
Änderungen löschen
Wenn Sie eine google_sql_provision_script-Ressource löschen, werden die zugehörigen In-Database-Ressourcen nicht gelöscht. Wenn Sie sie löschen möchten, können Sie dem Skript explizit Anweisungen wie drop ... if exists hinzufügen und die Änderungen dann übernehmen.
REST
Wenn Sie eine SQL-Anweisung für eine Datenbank in einer Instanz mithilfe der REST API ausführen möchten, senden Sie eine POST-Anfrage an den executeSql-Endpunkt:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/executeSql
Der Anfragetext sollte den Datenbanknamen und die SQL-Anweisung enthalten:
{ "database": "DATABASE_NAME", "sqlStatement": "SQL_STATEMENT", "partialResultMode": "PARTIAL_RESULT_MODE" "autoIamAuthn": true }
Ersetzen Sie die folgenden Werte:
- PROJECT_ID: Ihre Projekt-ID.
- INSTANCE_NAME: der Name der Instanz.
- DATABASE_NAME: Der Name der Datenbank in der Instanz.
- SQL_STATEMENT: Die auszuführende SQL-Anweisung.
- PARTIAL_RESULT_MODE: optional. Steuert, wie die API reagiert, wenn das Ergebnis 10 MB überschreitet. Kann
FAIL_PARTIAL_RESULToderALLOW_PARTIAL_RESULTsein. Weitere Informationen finden Sie unter Kürzung anpassen.
Abschneideverhalten ändern
Sie können festlegen, wie große Ergebnisse bei der Ausführung von SQL behandelt werden.
- Fügen Sie das Feld
"partialResultMode"in die Anfrage ein. Dieses Feld akzeptiert die folgenden Werte:FAIL_PARTIAL_RESULT: Es wird ein Fehler ausgegeben, wenn das Ergebnis 10 MB überschreitet oder nur ein Teilergebnis abgerufen werden kann. Das Ergebnis nicht zurückgeben.ALLOW_PARTIAL_RESULT: Gibt ein gekürztes Ergebnis zurück und setztpartial_resultauf „true“, wenn das Ergebnis 10 MB überschreitet oder aufgrund eines Fehlers nur ein Teilergebnis abgerufen werden kann. Keinen Fehler ausgeben.
Beschränkungen
- Die Größenbeschränkung für eine Antwort beträgt 10 MB. Ergebnisse, die diese Größe überschreiten, werden gekürzt, wenn
partialResultModeaufALLOW_PARTIAL_RESULTgesetzt ist. Andernfalls wird ein Fehler ausgegeben. - Anfragen sind auf 0,5 MB beschränkt.
- Sie können SQL-Anweisungen nur für Cloud SQL for PostgreSQL-Instanzen ausführen, die ausgeführt werden.
- Cloud SQL unterstützt die Verwendung der Data API nicht für Instanzen, die für die Replikation auf externen Servern eingerichtet sind.
- Anfragen, die länger als 30 Sekunden dauern, werden abgebrochen. Das Festlegen eines höheren Anweisungstimeouts mit
SET STATEMENT_TIMEOUTwird nicht unterstützt. - In Cloud SQL ist die Anzahl der gleichzeitigen
executeSql-Anfragen auf 10 pro Instanz und Nutzer begrenzt. Wenn dieses Limit erreicht ist, schlagen nachfolgende Anfragen mit der Fehlermeldung „Auf dieser Instanz können maximal 10 gleichzeitige Abfragen ausgeführt werden. Versuchen Sie es später noch einmal.“ oder „Die maximale Anzahl gleichzeitiger Lesevorgänge (10) wurde erreicht.“ - Jede Antwort kann maximal 10 Datenbankmeldungen oder ‑warnungen enthalten.
- Bei einem Syntax- oder Ausführungsfehler wird kein Ergebnis zurückgegeben.
- Anweisungen, die viel Arbeitsspeicher belegen, können zu Fehlern aufgrund von unzureichendem Arbeitsspeicher führen. Weitere Informationen zum Vermeiden dieser Fehler finden Sie unter Best Practices für die Verwaltung der Arbeitsspeichernutzung. Eine Datenbankinstanz, die mit hoher Arbeitsspeichernutzung ausgeführt wird, führt häufig zu Leistungsproblemen, Ausführungsunterbrechungen oder sogar Datenbankausfällen.
- Die Data API kann vorübergehend blockiert werden, wenn bestimmte Wartungsvorgänge für die Instanz ausgeführt werden, um die Datenintegrität zu gewährleisten. Versuchen Sie es später noch einmal, falls das Problem auftritt.
- Die Data API garantiert noch keine Datenspeicherung. Anfragen schlagen mit dem Fehler „not supported for instances in certain Assured Workloads control packages folders“ (nicht unterstützt für Instanzen in bestimmten Assured Workloads-Kontrollpaketordnern) für bestimmte Assured Workloads-Projekte und für Projekte mit manuell erzwungenen
constraints/sql.restrictNoncompliantResourceCreationfehl.