Tool: execute_sql
Führen Sie beliebige gültige SQL-Anweisung für eine Cloud SQL-Instanz aus, einschließlich Anweisungen der Datendefinitionssprache (DDL), der Datenkontrollsprache (DCL), der Datenabfragesprache (DQL) oder der Datenbearbeitungssprache (DML).
Damit das execute_sql-Tool unterstützt wird, muss eine Cloud SQL-Instanz die folgenden Anforderungen erfüllen:
- Der Wert von
data_api_accessmuss aufALLOW_DATA_APIfestgelegt werden. - Bei einer MySQL-Instanz muss das Datenbank-Flag
cloudsql_iam_authenticationaufongesetzt sein. Für eine PostgreSQL-Instanz muss das Datenbank-Flagcloudsql.iam_authenticationaufongesetzt sein. - Für den Aufruf des
execute_sql-Tools ist ein IAM-Nutzerkonto oder ein IAM-Dienstkonto (CLOUD_IAM_USERoderCLOUD_IAM_SERVICE_ACCOUNT) erforderlich. Das Tool führt die SQL-Anweisungen mit den Berechtigungen des Datenbanknutzers aus, der mit der IAM-Datenbankauthentifizierung angemeldet ist.
Nachdem Sie mit dem Tool create_instance eine Instanz erstellt haben, können Sie mit dem Tool create_user ein IAM-Nutzerkonto für den Nutzer erstellen, der derzeit im Projekt angemeldet ist.
Für das execute_sql-Tool gelten die folgenden Einschränkungen:
- Wenn eine SQL-Anweisung eine Antwort zurückgibt, die größer als 10 MB ist, wird die Antwort abgeschnitten.
- Das Tool
execute_sqlhat ein Standardzeitlimit von 30 Sekunden. Wenn eine Abfrage länger als 30 Sekunden dauert, gibt das Tool einenDEADLINE_EXCEEDED-Fehler zurück. - Das Tool
execute_sqlwird für SQL Server nicht unterstützt.
Wenn Sie Fehler wie „IAM-Authentifizierung ist für die Instanz nicht aktiviert“ erhalten, können Sie mit dem Tool get_instance den Wert des Flags für die IAM-Datenbankauthentifizierung für die Instanz prüfen.
Wenn Sie Fehler wie „Die Instanz erlaubt keinen Zugriff auf diese Instanz über executeSql“ erhalten, können Sie mit dem Tool get_instance die Einstellung data_api_access prüfen.
Wenn Sie Authentifizierungsfehler erhalten:
- Prüfen Sie mit dem Tool
list_users, ob das aktuell angemeldete Nutzerkonto als IAM-Nutzer in der Instanz vorhanden ist. - Wenn das IAM-Nutzerkonto nicht vorhanden ist, erstellen Sie es mit dem
create_user-Tool für den angemeldeten Nutzer. - Wenn der aktuell angemeldete Nutzer nicht die richtigen Datenbanknutzerrollen hat, können Sie ihm mit dem Tool
update_userDatenbankrollen zuweisen. Mit der Rollecloudsqlsuperuserkann einem IAM-Nutzer beispielsweise eine Vielzahl der erforderlichen Berechtigungen gewährt werden. Prüfen Sie, ob dem aktuell angemeldeten Nutzer die richtigen IAM-Berechtigungen für das Projekt zugewiesen sind. Mit dem Befehl
gcloud projects get-iam-policy [PROJECT_ID]können Sie prüfen, ob dem Nutzer die richtigen IAM-Rollen oder -Berechtigungen für das Projekt zugewiesen sind.- Der Nutzer muss die Berechtigung
cloudsql.instance.loginhaben, um die automatische IAM-Datenbankauthentifizierung durchzuführen. - Der Nutzer muss die Berechtigung
cloudsql.instances.executeSqlhaben, um SQL-Anweisungen mit dem Toolexecute_sqloder der APIexecuteSqlauszuführen. - Häufig verwendete IAM-Rollen, die die erforderlichen Berechtigungen enthalten: Cloud SQL-Instanznutzer (
roles/cloudsql.instanceUser) oder Cloud SQL-Administrator (roles/cloudsql.admin)
- Der Nutzer muss die Berechtigung
Wenn Sie eine ExecuteSqlResponse erhalten, prüfen Sie immer die Felder message und status im Antworttext. Ein erfolgreicher HTTP-Statuscode bedeutet nicht, dass alle SQL-Anweisungen vollständig ausgeführt wurden. Die Felder message und status geben an, ob während der Ausführung der SQL-Anweisung teilweise Fehler oder Warnungen aufgetreten sind.
Im folgenden Beispiel wird gezeigt, wie Sie mit curl das MCP-Tool execute_sql aufrufen.
| Curl-Anfrage |
|---|
curl --location 'https://sqladmin.googleapis.com/mcp' \ --header 'content-type: application/json' \ --header 'accept: application/json, text/event-stream' \ --data '{ "method": "tools/call", "params": { "name": "execute_sql", "arguments": { // provide these details according to the tool's MCP specification } }, "jsonrpc": "2.0", "id": 1 }' |
Eingabeschema
Instanz führt SQL-Anfrage für MCP aus.
SqlInstancesExecuteSqlMcpRequest
| JSON-Darstellung |
|---|
{ "instance": string, "project": string, "sqlStatement": string, "database": string } |
| Felder | |
|---|---|
instance |
Erforderlich. ID der Datenbankinstanz. Die Projekt-ID ist darin nicht enthalten. |
project |
Erforderlich. Projekt-ID des Projekts mit der Instanz. |
sqlStatement |
Erforderlich. SQL-Anweisungen, die für die Datenbank ausgeführt werden sollen. Es kann sich um eine einzelne Anweisung oder eine durch Semikolons getrennte Folge von Anweisungen handeln. |
database |
Optional. Name der Datenbank, für die die Anweisung ausgeführt wird. Für Postgres ist es erforderlich, für MySQL optional. Wenn Ihre Anfrage für Postgres nicht auf eine vorhandene Datenbank beschränkt ist, z. B. zum Auflisten von Datenbanken, Erstellen einer neuen Datenbank oder Zuweisen von Rollen, können Sie den Standardwert „postgres“ übergeben. |
Ausgabeschema
Antwort auf die Ausführung von SQL-Anweisungen.
SqlInstancesExecuteSqlResponse
| JSON-Darstellung |
|---|
{ "messages": [ { object ( |
| Felder | |
|---|---|
messages[] |
Eine Liste der Hinweise und Warnungen, die während der Ausführung der Abfrage generiert wurden. Für PostgreSQL umfasst dies alle Hinweise und Warnungen. Für MySQL umfasst dies Warnungen, die von der zuletzt ausgeführten Anweisung generiert wurden. Wenn Sie alle Warnungen für eine Abfrage mit mehreren Anweisungen abrufen möchten, muss |
metadata |
Die zusätzlichen Metadaten zur Ausführung der SQL-Anweisungen. |
results[] |
Die Liste der Ergebnisse nach Ausführung aller SQL-Anweisungen. |
status |
Enthält den Fehler aus der Datenbank, wenn die SQL-Ausführung fehlgeschlagen ist. |
Nachricht
| JSON-Darstellung |
|---|
{ // Union field |
| Felder | |
|---|---|
Union-Feld Für |
|
message |
Der vollständige Nachrichtenstring. Für PostgreSQL ist dies ein formatierter String, der Schweregrad, Code und die Hinweis-/Warnmeldung enthalten kann. Für MySQL enthält dies die Warnmeldung. |
Union-Feld Für |
|
severity |
Der Schweregrad der Nachricht (z.B. „NOTICE“ für PostgreSQL, „WARNING“ für MySQL). |
Metadaten
| JSON-Darstellung |
|---|
{ "sqlStatementExecutionTime": string } |
| Felder | |
|---|---|
sqlStatementExecutionTime |
Die Zeit, die für die Ausführung der SQL-Anweisungen benötigt wurde. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit „ |
Dauer
| JSON-Darstellung |
|---|
{ "seconds": string, "nanos": integer } |
| Felder | |
|---|---|
seconds |
Signierte Sekunden des Zeitraums. Muss zwischen -315.576.000.000 und +315.576.000.000 (einschließlich) liegen. Hinweis: Diese Grenzen werden so berechnet: 60 Sek./Min. × 60 Min./Std. × 24 Std./Tag × 365,25 Tage/Jahr × 10.000 Jahre |
nanos |
Signierte Sekundenbruchteile mit Nanosekunden-Auflösung für den Zeitraum. Dauern von weniger als einer Sekunde werden mit dem Feld „0“ |
QueryResult
| JSON-Darstellung |
|---|
{ "columns": [ { object ( |
| Felder | |
|---|---|
columns[] |
Liste der Spalten, die im Ergebnis enthalten sind. Dazu gehört auch der Datentyp der Spalte. |
rows[] |
Von der SQL-Anweisung zurückgegebene Zeilen. |
message |
Meldung zum SQL-Ausführungsergebnis. |
partialResult |
Wird auf „true“ gesetzt, wenn das Ergebnis der SQL-Ausführung aufgrund von Größenbeschränkungen oder eines Fehlers beim Abrufen von Ergebnissen gekürzt wird. |
status |
Wenn die Ergebnisse aufgrund eines Fehlers gekürzt wurden, werden Details zu diesem Fehler angezeigt. |
Spalte
| JSON-Darstellung |
|---|
{ "name": string, "type": string } |
| Felder | |
|---|---|
name |
Name der Spalte. |
type |
Datentyp der Spalte. |
Zeile
| JSON-Darstellung |
|---|
{
"values": [
{
object ( |
| Felder | |
|---|---|
values[] |
Die Werte für die Zeile. |
Wert
| JSON-Darstellung |
|---|
{ "value": string, "nullValue": boolean } |
| Felder | |
|---|---|
value |
Der Zellenwert im Stringformat. |
nullValue |
Wenn der Zellwert null ist, wird dieses Flag auf „true“ gesetzt. |
Status
| JSON-Darstellung |
|---|
{ "code": integer, "message": string, "details": [ { "@type": string, field1: ..., ... } ] } |
| Felder | |
|---|---|
code |
Der Statuscode, der idealerweise ein ENUM-Wert von |
message |
Eine an Entwickler gerichtete Fehlermeldung, die englischsprachig sein sollte. Jede für Nutzer sichtbare Fehlermeldung sollte lokalisiert und im Feld |
details[] |
Eine Auflistung aller Meldungen, die die Fehlerdetails enthalten. Es gibt einen gemeinsamen Satz von Nachrichtentypen, die APIs verwenden können. Ein Objekt, das Felder eines beliebigen Typs enthält. Ein zusätzliches Feld |
Beliebig
| JSON-Darstellung |
|---|
{ "typeUrl": string, "value": string } |
| Felder | |
|---|---|
typeUrl |
Eine URL/ein Ressourcenname, die den Typ der serialisierten Protokollzwischenspeicher-Nachricht eindeutig identifiziert. Dieser String muss mindestens ein „/“-Zeichen enthalten. Das letzte Segment des URL-Pfads muss den voll qualifizierten Namen des Typs enthalten (wie in In der Praxis kompilieren Teams in der Regel alle Typen, die sie im Kontext von „Any“ verwenden möchten, vorab in das Binärprogramm. Für URLs, die das Schema
Hinweis: Diese Funktion ist derzeit nicht in der offiziellen Protobuf-Version verfügbar und wird nicht für Typ-URLs verwendet, die mit „type.googleapis.com“ beginnen. Seit Mai 2023 gibt es keine weit verbreiteten Typ-Server-Implementierungen und es ist auch nicht geplant, eine zu implementieren. Andere Schemas als |
value |
Muss ein gültiger serialisierter Protokollpuffer des oben angegebenen Typs sein. Ein base64-codierter String. |
Tool-Annotationen
Destruktiver Hinweis: ✅ | Idempotenter Hinweis: ❌ | Nur-Lese-Hinweis: ❌ | Open-World-Hinweis: ❌