我正在执行此查询:
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;
如何设置列不为空?
修改现有列需要
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