1

我正在尝试使用 REST API 在 Cloud Spanner 数据库中远程创建一个表。我试图运行的 SQL 是:

CREATE TABLE test (id INT64 NOT NULL) PRIMARY KEY (id)

我最初的尝试使用了 executeSql 端点,这导致了一条不太有用的错误消息:

Syntax error: Expected \")\" or \",\" but got keyword NOT [at 1:29]\nCREATE TABLE test (id INT64 NOT NULL) PRIMARY KEY (id)\n

过了一会儿,我发现了 updateDdl 端点,但是当我通过在语句列表中提供上述查询来尝试这个时,我只得到一个空的 200 响应,并且没有创建表。

如何使用 SQL 在 Cloud Spanner 上创建表?

更新

事实证明我做的一切都是正确的,除了我的代码中的一个错误意味着我没有发送 PATCH 请求,我发送的是 GET 请求!在这种情况下,Spanner 没有返回 405,而是愉快地返回 200,但什么也不做:(

4

2 回答 2

2

updateDdl是正确的方法调用。请注意,对于 200 响应,它将返回一个长时间运行的操作,因为架构更改不是即时的:

返回的长时间运行的操作将具有 /operations/ 格式的名称,并可用于跟踪架构更改的执行。元数据字段类型是 UpdateDatabaseDdlMetadata。操作没有响应。

看起来 REST API 在末尾排除了分号:

PATCH https://spanner.googleapis.com/v1/projects/YOUR_PROJECT/instances/YOUR_INSTANCE/databases/YOUR_DATABASE/ddl

{
  "statements": [
    "CREATE TABLE Tests (TestId INT64 NOT NULL,) PRIMARY KEY(TestId)"
  ]
}

您还可以通过Cloud Console中的用户界面创建架构。

于 2017-06-14T20:22:57.690 回答
1

尝试运行

CREATE TABLE Tests (
    TestId INT64 NOT NULL,
) PRIMARY KEY(TestId);
于 2017-06-14T13:14:05.900 回答