כלי: execute_sql
להריץ כל הצהרת SQL תקינה, כולל הצהרות של שפת הגדרת נתונים (DDL), שפת בקרת נתונים (DCL), שפת שאילתות נתונים (DQL) או שפת טיפול בנתונים (DML), במופע Cloud SQL.
כדי לתמוך בכלי execute_sql, מכונה ב-Cloud SQL צריכה לעמוד בדרישות הבאות:
- הערך של
data_api_accessחייב להיותALLOW_DATA_API. - במופע MySQL, צריך להגדיר את הדגל של מסד הנתונים
cloudsql_iam_authenticationלערךon. במכונת PostgreSQL, צריך להגדיר את האפשרותcloudsql.iam_authenticationבמסד הנתונים לערךon. - כדי להפעיל את הכלי
execute_sql, צריך חשבון משתמש ב-IAM או חשבון שירות ב-IAM (CLOUD_IAM_USERאוCLOUD_IAM_SERVICE_ACCOUNT). הכלי מריץ את הצהרות ה-SQL באמצעות ההרשאות של משתמש מסד הנתונים שנכנס באמצעות אימות מסד נתונים של IAM.
אחרי שמשתמשים בכלי create_instance כדי ליצור מופע, אפשר להשתמש בכלי create_user כדי ליצור חשבון משתמש IAM למשתמש שמחובר כרגע לפרויקט.
אלו המגבלות של הכלי execute_sql:
- אם הצהרת SQL מחזירה תשובה גדולה מ-10 MB, התשובה תיחתך.
- בכלי
execute_sql, ברירת המחדל של הזמן הקצוב לתפוגה היא 30 שניות. אם שאילתה פועלת יותר מ-30 שניות, הכלי מחזיר שגיאהDEADLINE_EXCEEDED. - הכלי
execute_sqlלא נתמך ב-SQL Server.
אם מופיעות שגיאות כמו "אימות IAM לא מופעל עבור המופע", אפשר להשתמש בכלי get_instance כדי לבדוק את הערך של דגל אימות מסד הנתונים של IAM עבור המופע.
אם מופיעות שגיאות כמו "המופע לא מאפשר שימוש ב-executeSql כדי לגשת למופע הזה", אפשר להשתמש בכלי get_instance כדי לבדוק את ההגדרה data_api_access.
אם מתקבלות שגיאות אימות:
- בודקים אם חשבון המשתמש שמחובר כרגע קיים כמשתמש IAM במופע באמצעות הכלי
list_users. - אם חשבון המשתמש ב-IAM לא קיים, צריך להשתמש בכלי
create_userכדי ליצור את חשבון המשתמש ב-IAM עבור המשתמש המחובר. - אם למשתמש שמחובר כרגע אין את תפקידי המשתמש המתאימים במסד הנתונים, אפשר להשתמש בכלי
update_userכדי להעניק למשתמש תפקידים במסד הנתונים. לדוגמה, תפקידcloudsqlsuperuserיכול לספק למשתמש IAM הרבה הרשאות נדרשות. בודקים אם למשתמש שמחובר כרגע יש את הרשאות ה-IAM הנכונות שהוקצו לפרויקט. אפשר להשתמש בפקודה
gcloud projects get-iam-policy [PROJECT_ID]כדי לבדוק אם למשתמש הוקצו התפקידים או ההרשאות המתאימים ב-IAM לפרויקט.- למשתמש צריכה להיות הרשאה
cloudsql.instance.loginלבצע אימות אוטומטי של מסד נתונים ב-IAM. - למשתמש צריכה להיות הרשאה
cloudsql.instances.executeSqlלהפעיל הצהרות SQL באמצעות הכליexecute_sqlאוexecuteSqlAPI. - תפקידי IAM נפוצים שמכילים את ההרשאות הנדרשות: Cloud SQL Instance User (
roles/cloudsql.instanceUser) או Cloud SQL Admin (roles/cloudsql.admin)
- למשתמש צריכה להיות הרשאה
כשמקבלים ExecuteSqlResponse, צריך תמיד לבדוק את השדות message ו-status בגוף התגובה. קוד סטטוס של HTTP שמציין הצלחה לא מבטיח שכל הצהרות ה-SQL יצליחו. בשדות message ו-status יצוין אם היו שגיאות או אזהרות חלקיות במהלך הביצוע של הצהרת ה-SQL.
בדוגמה הבאה אפשר לראות איך משתמשים ב-curl כדי להפעיל את כלי ה-MCP execute_sql.
| בקשת Curl |
|---|
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 }' |
סכימת הקלט
בקשת SQL להרצה של מכונה עבור MCP.
SqlInstancesExecuteSqlMcpRequest
| ייצוג ב-JSON |
|---|
{ "instance": string, "project": string, "sqlStatement": string, "database": string } |
| שדות | |
|---|---|
instance |
חובה. מזהה מופע של מסד נתונים. הפרטים האלה לא כוללים את מזהה הפרויקט. |
project |
חובה. מזהה הפרויקט שמכיל את המופע. |
sqlStatement |
חובה. הצהרות SQL להרצה במסד הנתונים. יכול להיות שזה יהיה משפט אחד או רצף של משפטים שמופרדים באמצעות נקודה-פסיק. |
database |
זה שינוי אופציונלי. שם מסד הנתונים שבו יופעל המשפט. ב-Postgres זה נדרש, ב-MySQL זה אופציונלי. ב-Postgres, אם השאילתה לא מוגבלת למסד נתונים קיים, כמו list databases / create new database / grant roles, אפשר להעביר ערך ברירת מחדל בתור postgres. |
סכימת פלט
תגובה להרצת הצהרות SQL.
SqlInstancesExecuteSqlResponse
| ייצוג ב-JSON |
|---|
{ "messages": [ { object ( |
| שדות | |
|---|---|
messages[] |
רשימה של הודעות ואזהרות שנוצרו במהלך הרצת השאילתה. ב-PostgreSQL, זה כולל את כל ההודעות והאזהרות. ב-MySQL, זה כולל אזהרות שנוצרו על ידי ההצהרה האחרונה שהופעלה. כדי לאחזר את כל האזהרות בשאילתה עם כמה הצהרות, צריך להריץ את |
metadata |
מידע נוסף על מטא-נתונים שקשורים להרצת הצהרות SQL. |
results[] |
רשימת התוצאות אחרי הפעלת כל הצהרות ה-SQL. |
status |
מכיל את השגיאה ממסד הנתונים אם ביצוע ה-SQL נכשל. |
הודעה
| ייצוג ב-JSON |
|---|
{ // Union field |
| שדות | |
|---|---|
שדה איחוד הערך |
|
message |
מחרוזת ההודעה המלאה. ב-PostgreSQL, זהו מחרוזת מעוצבת שעשויה לכלול חומרה, קוד והודעת אזהרה. ב-MySQL, השדה הזה מכיל את הודעת האזהרה. |
שדה איחוד הערך |
|
severity |
רמת החומרה של ההודעה (למשל, NOTICE ל-PostgreSQL, WARNING ל-MySQL). |
מטא-נתונים
| ייצוג ב-JSON |
|---|
{ "sqlStatementExecutionTime": string } |
| שדות | |
|---|---|
sqlStatementExecutionTime |
הזמן שנדרש להפעלת הצהרות ה-SQL. משך זמן בשניות עם עד תשע ספרות אחרי הנקודה העשרונית, שמסתיים ב-' |
משך הזמן
| ייצוג ב-JSON |
|---|
{ "seconds": string, "nanos": integer } |
| שדות | |
|---|---|
seconds |
השניות החתומות של טווח הזמן. הערך חייב להיות בין -315,576,000,000 לבין +315,576,000,000, כולל. הערה: הגבולות האלה מחושבים לפי: 60 שניות/דקה * 60 דקות/שעה * 24 שעות/יום * 365.25 ימים/שנה * 10,000 שנים |
nanos |
שברים חתומים של שנייה ברזולוציית ננו-שנייה של טווח הזמן. משכי זמן של פחות משנייה אחת מיוצגים באמצעות שדה |
QueryResult
| ייצוג ב-JSON |
|---|
{ "columns": [ { object ( |
| שדות | |
|---|---|
columns[] |
רשימת העמודות שנכללות בתוצאה. הוא כולל גם את סוג הנתונים של העמודה. |
rows[] |
השורות שמוחזרות על ידי הצהרת ה-SQL. |
message |
הודעה שקשורה לתוצאת ההרצה של SQL. |
partialResult |
הערך מוגדר כ-true אם התוצאה של ביצוע ה-SQL נחתכת בגלל מגבלות גודל או שגיאה באחזור התוצאות. |
status |
אם התוצאות נחתכו בגלל שגיאה, פרטי השגיאה. |
עמודה
| ייצוג ב-JSON |
|---|
{ "name": string, "type": string } |
| שדות | |
|---|---|
name |
שם העמודה. |
type |
סוג הנתונים בעמודה. |
Row
| ייצוג ב-JSON |
|---|
{
"values": [
{
object ( |
| שדות | |
|---|---|
values[] |
הערכים של השורה. |
ערך
| ייצוג ב-JSON |
|---|
{ "value": string, "nullValue": boolean } |
| שדות | |
|---|---|
value |
ערך התא בפורמט מחרוזת. |
nullValue |
אם ערך התא הוא null, הדגל הזה יוגדר כ-true. |
סטטוס
| ייצוג ב-JSON |
|---|
{ "code": integer, "message": string, "details": [ { "@type": string, field1: ..., ... } ] } |
| שדות | |
|---|---|
code |
קוד הסטטוס, שצריך להיות ערך enum של |
message |
הודעת שגיאה שמוצגת למפתחים, שצריכה להיות באנגלית. כל הודעת שגיאה שמוצגת למשתמש צריכה להיות מותאמת לשפה המקומית ולהישלח בשדה |
details[] |
רשימה של הודעות שכוללות את פרטי השגיאה. יש קבוצה משותפת של סוגי הודעות לשימוש בממשקי API. אובייקט שמכיל שדות מכל סוג שהוא. שדה נוסף |
הכול
| ייצוג ב-JSON |
|---|
{ "typeUrl": string, "value": string } |
| שדות | |
|---|---|
typeUrl |
כתובת URL או שם משאב שמזהים באופן ייחודי את הסוג של הודעת מאגר אחסון לפרוטוקולים שעברה סריאליזציה. המחרוזת הזו חייבת להכיל לפחות תו אחד של '/'. הפלח האחרון בנתיב של כתובת ה-URL חייב לייצג את השם המוגדר במלואו של הסוג (כמו ב- בפועל, צוותים בדרך כלל מבצעים קומפילציה מראש לבינארי של כל הסוגים שהם מצפים שהבינארי ישתמש בהם בהקשר של Any. עם זאת, עבור כתובות URL שמשתמשות בסכימה
הערה: הפונקציונליות הזו לא זמינה כרגע בגרסה הרשמית של protobuf, והיא לא משמשת לכתובות URL של סוגים שמתחילות ב-type.googleapis.com. נכון למאי 2023, אין יישומי שרת מסוגים בשימוש נרחב, ואין תוכניות ליישם אחד כזה. אפשר להשתמש בסכימות אחרות מלבד |
value |
חייב להיות מאגר אחסון לפרוטוקולים סדרתי תקין מהסוג שצוין למעלה. מחרוזת בקידוד Base64. |
הערות על כלי
רמז הרסני: ✅ | רמז אידמפוטנטי: ❌ | רמז לקריאה בלבד: ❌ | רמז לעולם פתוח: ❌