无法使用 'gcloud spanner databases ddl update' 命令执行 Spanner DDL 脚本

Cannot execute a Spanner DDL script using 'gcloud spanner databases ddl update' command

A Google Spanner DDL 脚本在 Spanner 控制台中提交时成功运行,但是当使用“--ddl-file”参数通过“glcoud spanner databases ddl update”命令执行时,它始终失败并显示错误:

(gcloud.spanner.databases.ddl.update) INVALID_ARGUMENT: 解析 Spanner DDL 时出错 语句:\n:第 1 行第 1 列的语法错误:解析时遇到 'EOF': ddl_statement

命令示例:

gcloud spanner databases ddl update test-db
--instance=test-instance
--ddl-file=table.ddl

cat table.ddl

创建 TABLE 个地区 ( region_id 字符串 (2) 不为空, 名称字符串(13)不为空, ) 主键 (region_id);

互联网上只有一处提到了这种相同的情况。有没有人得到成功工作的“ddl-file”参数?

问题(很可能)是由您的 DDL 脚本中的最后一个分号引起的。似乎 --ddl-file 选项接受具有多个 DDL 语句的脚本,这些语句可以用分号分隔 (;),但最后一个语句不应该以分号结束。这样做会导致 gcloud 在最后一个 DDL 语句之后尝试解析另一个 DDL 语句,结果只确定有 none,从而抛出 Unexpected end of file 错误。

所以 TLDR:删除脚本中的最后一个分号,它应该可以工作。