GBase 8s
其他
问答

DBeaver 连接 GBase 8s V8.8 打开表属性报错 Routine (read_defaultstr) can not be resolved

发表于2026-07-09 15:50:4954次浏览12个评论

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

【GBase版本】: GBase 8s V8.8

【操作系统】: window 11

【CPU】: i5

【问题描述】*:
使用 DBeaver(26.1.2)通过官方 JDBC 驱动(gbasedbtjdbc 3.3.0 / 3.5.1 / 3.6.3 均验证)连接 GBase 8s V8.8, 表数据可正常查询,但打开表「属性 / 列信息」时报错:

SQL 错误 [IX000]: Routine (read_defaultstr) can not be resolved.
  Routine (read_defaultstr) can not be resolved.
    SQLException

复现步骤

  1. DBeaver 新建 GBase 8s 连接,使用 gbasedbtjdbc 任意版本驱动;
  2. 连接成功,表数据可正常 SELECT;
  3. 右键表 → 打开「属性」→ 切到列信息(Columns);
  4. 即报上述错误,属性面板无法加载。

已做的排查(证据)

  • 确认 read_defaultstr 例程在目标库中不存在

    SELECT procname, owner FROM sysprocedures WHERE LOWER(procname) = 'read_defaultstr';
    -- 返回 0 行
  • GBase 自带客户端工具(dbaccess / GBaseDataStudio 原生路径)打开同一表的属性完全正常, 说明其直接读取 syscolumns.default 系统表,并不依赖 read_defaultstr
  • 更换 3.3.0 / 3.5.1_3X2_1 / 3.6.3 三个版本驱动,报错一致;
  • DBeaver 元数据开关(Generate DLLs with extra info、Do not read tables information 等)均无效;
  • 因数据库安全策略,无法在库中创建该例程,只能从客户端侧解决。

根因判断:DBeaver 的 Informix/GBase 元数据读取逻辑在取列默认值时,硬编码调用了 read_defaultstr() 存储过程。该例程并非所有 GBase 8s V8.8 实例的必装核心例程,缺失时 DBeaver 直接整体失败。

希望厂商协助的点

  1. 明确 read_defaultstr 在 GBase 8s V8.8 中是否应默认存在、属于哪套系统脚本(如 syscdcsv1.sql);
  2. 提供该例程的官方标准定义(参数签名),便于用户在缺失环境补齐;
  3. 优化官方 JDBC 驱动 DatabaseMetaData.getColumns() 的实现,使其直接读取 syscolumns.default, 不依赖 read_defaultstr,与 GBase 自有工具保持一致。

评论

登录后才可以发表评论
GBase用户51829发表于 26天前
第一次连接也遇到这个问题,谢谢分享,已收藏
用户头像
liaosnet发表于 23天前
数据库驱动需与数据库版本一致,这个报错出现的原因是在某个版本开始,元数据使用到了该函数。
ጽᵂᴶʸ发表于 21天前
@liaosnet:不行, 驱动试了好几个呢, 和版本配套的是优先用的
ጽᵂᴶʸ发表于 21天前
@liaosnet:官网上也没有对应版本的驱动下载, 手里的都是厂商提供的
用户头像
liaosnet发表于 20天前
@ጽᵂᴶʸ:数据库版本用啥,驱动就用啥。
用户头像
liaosnet发表于 20天前
@ጽᵂᴶʸ:提供一下数据库版本号吧。
ጽᵂᴶʸ发表于 16天前
@liaosnet:GBase8sV8.8_AEE_3.3.0_2X5_1_9067a9
用户头像
liaosnet发表于 15天前
@ጽᵂᴶʸ:应当使用驱动gbasedbtjdbc_3.3.0_2_36477d。
且需要注意:去除同类的其它版本驱动。
ጽᵂᴶʸ发表于 15天前
@liaosnet:还是不行!!!
ጽᵂᴶʸ发表于 16天前
@liaosnet:驱动: 1. gbasedbtjdbc_3.3.0_2P20220125_6ebfdb
2. gbasedbtjdbc_3.3.0_2_36477d
3. gbasedbtjdbc_3.5.1_3X2_1
用户头像
liaosnet发表于 14天前
@ጽᵂᴶʸ: WHEN 'E' THEN read_defaultstr(c.tabid, c.colno, c.coltype, c.collength, c.extended_id)::VARCHAR(32731)


看起来是dbeaver的plugins中使用了这个函数,该函数的确是在后面的版本中才支持。
用户头像
liaosnet发表于 14天前
@ጽᵂᴶʸ:试一下 dbboys https://dbboys.com