Method: projects.instances.databases.updateDdl

Updates the schema of a Cloud Spanner database by creating/altering/dropping tables, columns, indexes, etc. The returned long-running operation will have a name of the format <database_name>/operations/<operationId> and can be used to track execution of the schema change(s). The metadata field type is UpdateDatabaseDdlMetadata. The operation has no response.

HTTP request


The URL uses gRPC Transcoding syntax.

Path parameters



Required. The database to update.

Authorization requires the following IAM permission on the specified resource database:

  • spanner.databases.updateDdl

Request body

The request body contains data with the following structure:

JSON representation
  "statements": [
  "operationId": string,
  "protoDescriptors": string


Required. DDL statements to be applied to the database.



If empty, the new update request is assigned an automatically-generated operation ID. Otherwise, operationId is used to construct the name of the resulting Operation.

Specifying an explicit operation ID simplifies determining whether the statements were executed in the event that the databases.updateDdl call is replayed, or the return value is otherwise lost: the database and operationId fields can be combined to form the name of the resulting longrunning.Operation: <database>/operations/<operationId>.

operationId should be unique within the database, and must be a valid identifier: [a-z][a-z0-9_]*. Note that automatically-generated operation IDs always begin with an underscore. If the named operation already exists, databases.updateDdl returns ALREADY_EXISTS.


string (bytes format)

Optional. Proto descriptors used by CREATE/ALTER PROTO BUNDLE statements. Contains a protobuf-serialized google.protobuf.FileDescriptorSet. To generate it, install and run protoc with --include_imports and --descriptor_set_out. For example, to generate for moon/shot/app.proto, run

$protoc  --proto_path=/app_path --proto_path=/lib_path \
         --include_imports \ \

For more details, see protobuffer self description.

A base64-encoded string.

Response body

If successful, the response body contains an instance of Operation.

Authorization scopes

Requires one of the following OAuth scopes:


For more information, see the Authentication Overview.