Docker部署GridDB:Go客户端调用PutContainer报Error140029求助
GridDB Go客户端PutContainer错误码140029解决方法
错误码140029对应GridDB的**容器已存在(GS_CONTAINER_ALREADY_EXISTS)**错误,当调用PutContainer创建容器时,若目标名称的容器已在集群中存在,就会抛出该异常。
解决方案
可以通过以下两种方式处理:
创建前检查容器是否存在
在调用PutContainer前,先调用ContainerExists方法判断容器状态,仅在容器不存在时执行创建操作:for containerName := range fullDataset { fmt.Println("containerName: ", containerName) // 检查容器是否已存在 exists, err := gridstore.ContainerExists(containerName) if err != nil { fmt.Println("ERROR Check Container Exists: ", err) continue } if exists { fmt.Println("Container already exists, skip creation: ", containerName) continue } conInfo, err := griddb_go.CreateContainerInfo(map[string]interface{}{ "name": containerName, "column_info_list": [][]interface{}{ {"timestamp", griddb_go.TYPE_TIMESTAMP}, {"id", griddb_go.TYPE_SHORT}, {"data", griddb_go.TYPE_FLOAT}, {"temperature", griddb_go.TYPE_FLOAT}}, "type": griddb_go.CONTAINER_TIME_SERIES, "row_key": true}) if err != nil { fmt.Println("ERROR CreateContainerInfo: ", err) continue } defer griddb_go.DeleteContainerInfo(conInfo) _, err = gridstore.PutContainer(conInfo) if err != nil { fmt.Println("ERROR PutContainer: ", err) } }覆盖已存在的容器
如果需要强制覆盖已存在的容器,可以在PutContainer方法中传入第二个参数true(表示允许覆盖):_, err = gridstore.PutContainer(conInfo, true)
额外注意点
- 时间序列容器的行键设置:你当前的配置是正确的,
timestamp作为第一列且设置row_key: true,符合GridDB时间序列容器的要求(行键必须包含时间戳列)。 - 循环逻辑检查:确认
fullDataset中是否存在重复的容器名称,避免重复触发创建操作。
内容的提问来源于stack exchange,提问作者Usama Altaf
相关产品推荐
相关产品推荐

