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

Posted

技术标签:

【中文标题】无法使用“gcloud spanner databases ddl update”命令执行 Spanner DDL 脚本【英文标题】:Cannot execute a Spanner DDL script using 'gcloud spanner databases ddl update' command 【发布时间】:2021-08-23 17:31:47 【问题描述】:

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

'@type':type.googleapis.com/google.rpc.LocalizedMessage 语言环境:en-US 留言:|- 解析 Spanner DDL 语句时出错: : 第 1 行第 1 列的语法错误:解析时遇到“EOF”:ddl_statement

命令示例:

gcloud spanner 数据库 ddl 更新 test-db --instance=测试实例 --ddl-file=table.ddl

猫表.ddl

创建 TABLE 区域 ( region_id STRING(2) 非空, 名称 STRING(13) 非空, ) 主键 (region_id);

在互联网上只有一个其他提及同样的情况。有没有人让“ddl-file”参数成功工作?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

魔术。你的权利。我从最后一个 ddl 语句中删除了分号,它像宣传的那样工作。 @RPayne 您介意将答案标记为已接受的答案,以便其他可能遇到相同问题的人更容易找到它。

以上是关于无法使用“gcloud spanner databases ddl update”命令执行 Spanner DDL 脚本的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥

Worklight Studio 和本地开发,有时无法使用 Java 类,有时无法使用 HTML 文件

ADB无法使用解决办法

Ubuntu 80端口无法使用-非root用户无法使用1024以下端口

无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别

LINUX下的mail\mailx为啥无法使用外部SMTP发邮件