도구: execute_sql
Cloud SQL 인스턴스에서 데이터 정의 언어 (DDL), 데이터 제어 언어 (DCL), 데이터 쿼리 언어 (DQL) 또는 데이터 조작 언어 (DML) 문을 비롯한 유효한 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)이 필요합니다. 이 도구는 IAM 데이터베이스 인증으로 로그인한 데이터베이스 사용자의 권한을 사용하여 SQL 문을 실행합니다.
create_instance 도구를 사용하여 인스턴스를 만든 후 create_user 도구를 사용하여 현재 프로젝트에 로그인한 사용자의 IAM 사용자 계정을 만들 수 있습니다.
execute_sql 도구에는 다음과 같은 제한사항이 있습니다.
- SQL 문이 10MB보다 큰 응답을 반환하면 응답이 잘립니다.
execute_sql도구의 기본 제한 시간은 30초입니다. 쿼리가 30초 이상 실행되면 도구에서DEADLINE_EXCEEDED오류를 반환합니다.- SQL Server에는
execute_sql도구가 지원되지 않습니다.
'인스턴스에 IAM 인증이 사용 설정되지 않음'과 같은 오류가 표시되면 get_instance 도구를 사용하여 인스턴스의 IAM 데이터베이스 인증 플래그 값을 확인할 수 있습니다.
'인스턴스에서 executeSql을 사용하여 이 인스턴스에 액세스할 수 없습니다'와 같은 오류가 표시되면 get_instance 도구를 사용하여 data_api_access 설정을 확인할 수 있습니다.
인증 오류가 표시되는 경우:
list_users도구를 사용하여 현재 로그인한 사용자 계정이 인스턴스에 IAM 사용자로 있는지 확인합니다.- IAM 사용자 계정이 없으면
create_user도구를 사용하여 로그인한 사용자의 IAM 사용자 계정을 만듭니다. - 현재 로그인한 사용자에게 적절한 데이터베이스 사용자 역할이 없는 경우
update_user도구를 사용하여 사용자에게 데이터베이스 역할을 부여할 수 있습니다. 예를 들어cloudsqlsuperuser역할은 IAM 사용자에게 필요한 많은 권한을 제공할 수 있습니다. 현재 로그인한 사용자에게 프로젝트에 올바른 IAM 권한이 할당되어 있는지 확인합니다.
gcloud projects get-iam-policy [PROJECT_ID]명령어를 사용하여 사용자에게 프로젝트에 적합한 IAM 역할 또는 권한이 할당되어 있는지 확인할 수 있습니다.- 자동 IAM 데이터베이스 인증을 수행하려면 사용자에게
cloudsql.instance.login권한이 있어야 합니다. execute_sql도구 또는executeSqlAPI를 사용하여 SQL 문을 실행하려면 사용자에게cloudsql.instances.executeSql권한이 있어야 합니다.- 필요한 권한이 포함된 일반적인 IAM 역할: Cloud SQL 인스턴스 사용자 (
roles/cloudsql.instanceUser) 또는 Cloud SQL 관리자 (roles/cloudsql.admin)
- 자동 IAM 데이터베이스 인증을 수행하려면 사용자에게
ExecuteSqlResponse를 수신할 때는 항상 응답 본문 내의 message 및 status 필드를 확인하세요. HTTP 상태 코드가 성공이라고 해서 모든 SQL 문이 완전히 성공하는 것은 아닙니다. message 및 status 필드는 SQL 문 실행 중에 부분 오류나 경고가 있었는지 여부를 나타냅니다.
다음 샘플은 curl를 사용하여 execute_sql MCP 도구를 호출하는 방법을 보여줍니다.
| 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 }' |
입력 스키마
MCP의 인스턴스 SQL 실행 요청입니다.
SqlInstancesExecuteSqlMcpRequest
| JSON 표현 |
|---|
{ "instance": string, "project": string, "sqlStatement": string, "database": string } |
| 필드 | |
|---|---|
instance |
필수 항목입니다. 데이터베이스 인스턴스 ID입니다. 여기에는 프로젝트 ID가 포함되지 않습니다. |
project |
필수 항목입니다. 인스턴스가 포함된 프로젝트의 프로젝트 ID입니다. |
sqlStatement |
필수 항목입니다. 데이터베이스에서 실행할 SQL 문입니다. 단일 문일 수도 있고 세미콜론으로 구분된 문 시퀀스일 수도 있습니다. |
database |
선택사항입니다. 문이 실행될 데이터베이스의 이름입니다. Postgres의 경우 필수이고 MySQL의 경우 선택사항입니다. Postgres의 경우 쿼리가 데이터베이스 나열 / 새 데이터베이스 만들기 / 역할 부여와 같은 기존 데이터베이스로 범위가 지정되지 않은 경우 기본값을 postgres로 전달할 수 있습니다. |
출력 스키마
SQL 문 실행 응답입니다.
SqlInstancesExecuteSqlResponse
| JSON 표현 |
|---|
{ "messages": [ { object ( |
| 필드 | |
|---|---|
messages[] |
쿼리 실행 중에 생성된 알림 및 경고 목록입니다. PostgreSQL의 경우 모든 알림과 경고가 포함됩니다. MySQL의 경우 마지막으로 실행된 문에서 생성된 경고가 포함됩니다. 멀티 문 쿼리의 모든 경고를 가져오려면 각 문 뒤에 |
metadata |
SQL 문 실행에 관한 추가 메타데이터 정보입니다. |
results[] |
모든 SQL 문을 실행한 후의 결과 목록입니다. |
status |
SQL 실행이 실패한 경우 데이터베이스의 오류를 포함합니다. |
메시지
| JSON 표현 |
|---|
{ // Union field |
| 필드 | |
|---|---|
통합 필드
|
|
message |
전체 메시지 문자열입니다. PostgreSQL의 경우 심각도, 코드, 알림/경고 메시지가 포함될 수 있는 형식화된 문자열입니다. MySQL의 경우 경고 메시지가 포함됩니다. |
통합 필드
|
|
severity |
메시지의 심각도입니다 (예: PostgreSQL의 경우 'NOTICE', MySQL의 경우 'WARNING') |
메타데이터
| JSON 표현 |
|---|
{ "sqlStatementExecutionTime": string } |
| 필드 | |
|---|---|
sqlStatementExecutionTime |
SQL 문을 실행하는 데 걸린 시간입니다. 소수점 아래가 최대 9자리까지이고 ' |
기간
| JSON 표현 |
|---|
{ "seconds": string, "nanos": integer } |
| 필드 | |
|---|---|
seconds |
시간 범위의 부호가 있는 초입니다. -315,576,000,000~+315,576,000,000(포함) 사이여야 합니다. 참고: 이 범위는 60초/분 * 60분/시간 * 24시간/일 * 365.25일/년 * 10,000년에서 계산됩니다. |
nanos |
시간 범위의 나노초 단위로 된 부호가 있는 초수입니다. 1초 미만의 기간은 0 |
QueryResult
| JSON 표현 |
|---|
{ "columns": [ { object ( |
| 필드 | |
|---|---|
columns[] |
결과에 포함된 열 목록입니다. 여기에는 열의 데이터 유형도 포함됩니다. |
rows[] |
SQL 문에 의해 반환된 행입니다. |
message |
SQL 실행 결과와 관련된 메시지입니다. |
partialResult |
크기 제한 또는 결과를 가져오는 중 발생한 오류로 인해 SQL 실행 결과가 잘린 경우 true로 설정됩니다. |
status |
오류로 인해 결과가 잘린 경우 해당 오류의 세부정보입니다. |
열
| JSON 표현 |
|---|
{ "name": string, "type": string } |
| 필드 | |
|---|---|
name |
열 이름입니다. |
type |
열의 데이터 유형입니다. |
행
| JSON 표현 |
|---|
{
"values": [
{
object ( |
| 필드 | |
|---|---|
values[] |
행의 값입니다. |
값
| JSON 표현 |
|---|
{ "value": string, "nullValue": boolean } |
| 필드 | |
|---|---|
value |
문자열 형식의 셀 값입니다. |
nullValue |
셀 값이 null이면 이 플래그가 true로 설정됩니다. |
상태
| JSON 표현 |
|---|
{ "code": integer, "message": string, "details": [ { "@type": string, field1: ..., ... } ] } |
| 필드 | |
|---|---|
code |
상태 코드로, |
message |
개발자에게 정보를 제공하는 오류 메시지로, 영어로 작성되어야 합니다. 사용자에게 표시되는 모든 오류 메시지는 현지화되어 |
details[] |
오류 세부정보를 설명하는 메시지 목록입니다. API에서 사용할 일반적인 메시지 유형 집합이 있습니다. 임의 유형의 필드를 포함하는 객체입니다. 추가 필드 |
모두
| JSON 표현 |
|---|
{ "typeUrl": string, "value": string } |
| 필드 | |
|---|---|
typeUrl |
직렬화된 프로토콜 버퍼 메시지의 유형을 고유하게 식별하는 URL/리소스 이름입니다. 이 문자열에는 '/' 문자가 하나 이상 포함되어야 합니다. URL 경로의 마지막 세그먼트는 유형의 정규화된 이름을 나타내야 합니다 (예: 실제로 팀은 Any 컨텍스트에서 사용할 것으로 예상되는 모든 유형을 바이너리로 사전 컴파일합니다. 하지만
참고: 이 기능은 현재 공식 protobuf 출시에서 사용할 수 없으며 type.googleapis.com으로 시작하는 유형 URL에는 사용되지 않습니다. 2023년 5월 현재 널리 사용되는 유형 서버 구현이 없으며 구현 계획도 없습니다.
|
value |
위에 지정된 유형의 유효한 직렬화된 프로토콜 버퍼여야 합니다. base64 인코딩 문자열입니다. |
도구 주석
파괴적 힌트: ✅ | 동일한 힌트: ❌ | 읽기 전용 힌트: ❌ | 오픈 월드 힌트: ❌