如何在CockroachCloud中无需先删除即可修改Stored Computed Column定义
结论
不可以,绝大多数主流关系型数据库(包括MySQL、SQL Server、PostgreSQL等)均不支持直接修改已存在的STORED存储计算列的计算逻辑,必须先删除原有列后再重新创建对应计算列。
原因说明
STORED类型的计算列会将计算结果预先持久化存储在磁盘中,修改计算逻辑需要全表重算所有行的该列值、更新底层物理存储结构,这类操作没有被纳入标准ALTER TABLE修改列的语法支持范围。
补充:你给出的建列语法并不符合标准SQL规范,不同数据库的存储计算列创建语法略有差异,以MySQL为例,正确的初始创建语句为:
ALTER TABLE 你的实际表名 ADD COLUMN computed_column INT GENERATED ALWAYS AS (col1 + col2) STORED;
正确操作步骤
- 第一步:删除原有存储计算列
ALTER TABLE 你的实际表名 DROP COLUMN computed_column;
- 第二步:使用新的计算逻辑重建存储计算列
ALTER TABLE 你的实际表名 ADD COLUMN computed_column INT GENERATED ALWAYS AS (col1 + col3) STORED;
注意事项
如果你的表数据量较大,删除重建存储计算列的操作会触发锁表、占用大量IO资源,建议在业务低峰期执行。
内容的提问来源于stack exchange,提问作者Saqib Ali
相关产品推荐
相关产品推荐

