达梦数据库如果在一个表上新增大字段(CLOB),会报“不能同时包含聚集KEY和大字段”的错误。
因为默认情况下,达梦数据库的主键为聚集索引;主键为聚集索引时,不能创建大字段(CLOB)。如果在创建表时就包含大字段,可以成功创建,这是因为建表时包含大字段,主键就自动为非聚集索引。
对于已经存在的表,且主键为聚集索引怎么办呢?如果尝试删除主键,会提示“没有删除表[xx]上索引的权限”,不允许删除主键。
解决办法是,在这个表上创建另外一个聚集索引,那么主键就会自动变成非聚集索引,再删除新建的聚集索引,这样就可以增加大字段了。
# 先新建一个字段
ALTER TABLE ujcms_site ADD COLUMN cs_ int;
# 在这个字段上创建聚集索引,这时主键自动变成了非聚集索引
CREATE CLUSTER INDEX idx_site_cs ON ujcms_site(cs_);
# 删除这个聚集索引
DROP INDEX idx_site_cs;
# 删除这个字段
ALTER TABLE ujcms_site DROP COLUMN cs_;
# 新增大字段
ALTER TABLE ujcms_site ADD COLUMN customs_json_ clob;