PostgreSQL兼容版Spanner无法通过DDL设置列非空约束
为Spanner PostgreSQL兼容版列设置非空约束的正确方法
正确的DDL语法是重新指定列的原有类型并添加NOT NULL约束,针对你的场景,语句应为:
ALTER TABLE projects ALTER COLUMN quota bigint NOT NULL;
报错原因分析
第一个语句报
syntax error at or near "bigint":- 需确认
quota列的实际数据类型,确保语句中的bigint和列原有类型完全匹配,若类型不符需替换为正确类型; - 部分客户端工具可能存在语法解析兼容问题,建议直接通过Spanner控制台或
gcloud spanner databases ddl update命令执行该语句。
- 需确认
使用
SET NOT NULL的语句报错:- 原生PostgreSQL的
ALTER COLUMN ... SET NOT NULL语法在Spanner PostgreSQL兼容版中不被支持,必须遵循Spanner的DDL规则,通过指定完整的列类型+约束来完成修改。
- 原生PostgreSQL的
重要前提
执行该DDL前,必须确保projects表中quota列的所有现有行都不为NULL,否则会因数据违反非空约束导致执行失败。
内容的提问来源于stack exchange,提问作者Aviral Srivastava
相关产品推荐
相关产品推荐

