GridDB压缩容器添加列报错60086,如何解决?
GridDB错误60086:压缩容器无法添加列的解决方法
你在为GridDB的globalfluctuationsfuelprices集合容器添加avg_monthly_change列时遇到错误60086,提示Operation invalid for compressed container,这是因为GridDB对数据量较大的容器会自动启用压缩,而压缩状态下的容器不支持直接执行ALTER TABLE修改表结构。以下是两种可行的解决方法:
方法一:临时解除压缩后修改结构(推荐)
无需重新导入数据,操作步骤更简便:
- 确认容器压缩状态:
SELECT container_name, compression FROM INFORMATION_SCHEMA.CONTAINERS WHERE container_name = 'globalfluctuationsfuelprices';- 解除容器压缩:
ALTER TABLE globalfluctuationsfuelprices SET COMPRESSION NONE;- 执行添加列操作(注意使用容器名而非代码变量
conInfo):
ALTER TABLE globalfluctuationsfuelprices ADD COLUMN avg_monthly_change DOUBLE;- 执行添加列操作(注意使用容器名而非代码变量
- 重新启用压缩(按需选择压缩算法,支持LZ4/GZIP):
ALTER TABLE globalfluctuationsfuelprices SET COMPRESSION LZ4;
方法二:导出数据后重建容器(适合需保留压缩状态且不中断服务的场景)
如果不想临时解除压缩,可以通过导出-重建-导入的方式修改结构:
- 导出容器数据到CSV文件(可使用GridDB的
gs_sh工具或SQL命令):
EXPORT TABLE globalfluctuationsfuelprices TO '/your/export/path/fuel_prices_data.csv' WITH HEADER;- 导出容器数据到CSV文件(可使用GridDB的
- 删除原容器:
DROP TABLE globalfluctuationsfuelprices;- 创建包含新列的容器,修改后的Schema如下:
const conInfo = new griddb.ContainerInfo({ 'name': "globalfluctuationsfuelprices", 'columnInfoList': [ ["country", griddb.Type.STRING], ["daily oil consumption (barrels)", griddb.Type.INTEGER], ["world share", griddb.Type.STRING], ["yearly gallons per capita", griddb.Type.DOUBLE], ["price per gallon (USD)", griddb.Type.DOUBLE], ["price per liter (USD)", griddb.Type.DOUBLE], ["price per liter (PKR)", griddb.Type.DOUBLE], ["avg_monthly_change", griddb.Type.DOUBLE] // 新增月度价格平均变化列 ], 'type': griddb.ContainerType.COLLECTION, 'rowKey': true });- 导入数据到新容器:
IMPORT TABLE globalfluctuationsfuelprices FROM '/your/export/path/fuel_prices_data.csv' WITH HEADER;- 按需启用容器压缩:
ALTER TABLE globalfluctuationsfuelprices SET COMPRESSION LZ4;
内容的提问来源于stack exchange,提问作者Ismail Vohra
相关产品推荐
相关产品推荐

