You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridDB Python客户端修改容器Schema后出现陈旧元数据问题咨询

GridDB Python客户端Schema修改后元数据缓存问题

问题背景

使用GridDB Cloud及Python客户端(griddb_python),在启用修改标志调用put_container()修改现有容器定义后,遇到Schema不一致导致的行格式错误问题。

初始Schema

import griddb_python as griddb

conInfo = griddb.ContainerInfo(
    name="devices",
    column_info_list=[
        ("id", griddb.Type.INTEGER),
        ("name", griddb.Type.STRING)
    ],
    type=griddb.ContainerType.COLLECTION,
    row_key=True
)

store.put_container(conInfo, True)

修改Schema

添加新列status后重新调用put_container:

updated = griddb.ContainerInfo(
    name="devices",
    column_info_list=[
        ("id", griddb.Type.INTEGER),
        ("name", griddb.Type.STRING),
        ("status", griddb.Type.STRING)
    ],
    type=griddb.ContainerType.COLLECTION,
    row_key=True
)

store.put_container(updated, True)

观察到的异常行为

Schema更新后立即执行以下代码:

container = store.get_container("devices")

container.put((1, "router", "active"))

有时会抛出错误:

GSException: [140001] Row format error

同时存在以下特征:

  • 重新创建Store连接可解决问题
  • 等待数秒后自动恢复
  • 现有行仍可正常读取
  • 仅重新获取容器对象并不总能解决问题

已验证的情况

  • 在GridDB CE和GridDB Cloud中均可复现该问题
  • 无并发Schema更新操作
  • 仅在修改容器Schema后立即出现该问题
  • 重启客户端会话可一致解决问题

核心问题

GridDB Python客户端是否会在Store会话级别缓存容器Schema元数据,导致调用put_container(..., True)修改现有Schema后需要重新连接或刷新元数据?

环境信息

  • GridDB Cloud
  • Python 3.10
  • griddb_python v5.x
  • COLLECTION容器

解答

是的,GridDB Python客户端确实会在Store会话级别缓存容器的Schema元数据。当你调用put_container(..., True)修改容器Schema时,服务端的Schema会立即更新,但当前Store会话的本地缓存仍然保留着旧的元数据。此时即使调用get_container()获取容器,客户端可能直接返回缓存的容器实例,而非从服务端拉取最新的Schema,导致插入新格式数据时出现行格式不匹配的错误。

可行的解决方案

  1. 重新创建Store连接:这是最可靠的方式,新连接会从服务端拉取最新的容器元数据,彻底避免缓存问题。
  2. 强制刷新元数据:调用get_container时传入第二个参数True,强制客户端从服务端重新获取容器的最新Schema,而非使用缓存:
    container = store.get_container("devices", True)
    
  3. 等待缓存过期:客户端缓存会在一段时间后自动失效,但这个时长不可控,不推荐作为生产环境的解决方案。

内容的提问来源于stack exchange,提问作者Klc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 21:52:28