无法在 Spanner、postgres 风格中使用 DDL 更改列来设置非空约束

问题描述 投票:0回答:1

我正在执行此查询:

ALTER TABLE projects ALTER COLUMN quota bigint NOT NULL;

错误:

Statement failed: [ERROR] syntax error at or near "bigint"; failed to parse the DDL statements.

我也尝试过:

ALTER TABLE projects ALTER COLUMN quota set NOT NULL;

其中,错误是:

Statement failed: <SET/DROP NOT NULL> are allowed only after <ALTER COLUMN> action of <ALTER TABLE> statement.

我按照官方文档进行操作,但仍然看不出查询是如何错误的:

描述更改的文档位于此处。 示例是这里

这是官方文档本身的摘录:

ALTER TABLE Songwriters ALTER COLUMN Nickname STRING(MAX) NOT NULL;

如何设置列不为空?

postgresql google-cloud-spanner
1个回答
0
投票

修改现有列需要

ALTER TABLE
语句包含两个
ALTER COLUMN
子句。第一个
ALTER COLUMN
子句必须指定数据类型,第二个
ALTER COLUMN 
子句必须指定可为空性。

所以在你的情况下,声明必须是:

ALTER TABLE projects
  ALTER COLUMN quota type bigint,
  ALTER COLUMN quota SET NOT NULL;

此要求是 Cloud Spanner PostgreSQL 的特定要求,并且与开源 PostgreSQL 存在偏差(请参阅“Spanner 与开源 PostgreSQL 部分的差异”):https://cloud.google.com/spanner/docs/参考/postgresql/data-definition-language#alter_table

© www.soinside.com 2019 - 2024. All rights reserved.