必须用官方JDBC驱动,禁用DBeaver内置PostgreSQL驱动;正确配置URL为jdbc:kingbase8://{host}:{port}/{database},设置characterEncoding=UTF-8、serverTimezone=Asia/Shanghai,并在kingbase.conf中设listen_addresses='0.0.0.0'、pg_hba.conf添加host all all 0.0.0.0/0 md5。

必须用官方JDBC驱动,别碰PostgreSQL驱动
直接选DBeaver内置的PostgreSQL驱动连KingbaseES,表面能通,但很快会掉坑里:表结构加载失败、jsonb字段显示为bytea、函数列表为空、执行EXPLAIN报错。根本原因是KingbaseES V8虽兼容PG协议,但自定义类型(如geometry、cidr扩展)、系统视图路径、权限模型都和PG不完全一致。
正确做法是强制使用人大金仓官方JDBC驱动:
- 从官网下载对应版本的
kingbase8-8.x.x.jar(比如V8R6就下kingbase8-8.6.0.jar,V8R3就下kingbase8-8.3.0.jar) - 别从Maven仓库随便拉——
com.kingbase:kingbase8在中央仓库的版本常滞后,且部分构建缺失Driver类注册逻辑 - 若用Docker部署,驱动包可从容器内提取:
/opt/Kingbase/ES/V8R*/Server/jdbc/路径下找
驱动配置时com.kingbase8.Driver找不到?先保存再编辑
DBeaver的“驱动管理器”有个隐藏逻辑:找到类按钮依赖已加载的JAR包,但新添加的JAR在未保存驱动前不会被扫描。所以点击找到类返回空是正常现象,不是驱动包坏了。
操作顺序必须是:
- 新建驱动 → 填驱动名(建议带版本,如
KingbaseES V8R6)→ 切到库页签 →添加文件导入JAR → 点确定保存驱动 - 回到驱动列表,右键刚建的驱动 →
编辑→ 此时再点找到类,就能看到com.kingbase8.Driver了 - URL模板务必填:
jdbc:kingbase8://{host}:{port}/{database}(注意是{port}不加方括号,不是[:{port}])
连接测试失败?重点查listen_addresses和pg_hba.conf
DBeaver报Connection refused或timeout,90%不是驱动问题,而是数据库没对外开权限。尤其Docker部署时,默认只监听localhost。
需要确认两处配置(以V8R6为例):
-
kingbase.conf中listen_addresses = '0.0.0.0'(不是'127.0.0.1'),并重启数据库 -
pg_hba.conf末尾追加一行:host all all 0.0.0.0/0 md5,然后执行sys_ctl reload - 宿主机防火墙要放行
54321端口(KingbaseES默认端口,不是PostgreSQL的5432)
如果用Docker,还要检查-p 54321:54321是否写对——常见错误是映射成-p 54321:5432,导致端口错位。
连上了但中文乱码或日期格式异常?改JDBC连接参数
默认连接参数下,characterEncoding和serverTimezone未显式指定,容易导致中文存成???、TIMESTAMP字段时区偏移错乱。
在DBeaver新建连接的编辑驱动设置 → 连接属性页签,手动加这两项:
-
characterEncoding=UTF-8 -
serverTimezone=Asia/Shanghai
别信“自动检测”,KingbaseES的JDBC驱动不会从系统读取这些值,必须硬编码传参。另外,socketTimeout建议设为30000(30秒),避免网络抖动时连接卡死无响应。
information_schema查表,但KingbaseES某些版本优先走sys系统表,这时候就得在驱动设置里关掉useInformationSchema,否则表列表永远为空。这类细节没有文档明说,只能靠报错日志反推。


















