新建表在DBeaver导航树不显示,根本原因是元数据缓存未更新:DBeaver默认启用多级缓存(表、约束、索引等),建表成功仅影响服务端,客户端不会自动感知;必须右键对应schema节点刷新(如public),而非仅刷新连接或database节点,PostgreSQL和Oracle的schema级缓存尤为顽固。

刚建的表在 DBeaver 导航树里不显示,不是建表失败,而是元数据缓存没更新 —— 直接刷新就能解决,但得刷对地方、用对方式。
为什么新建表后导航树不出现
DBeaver 默认启用多级缓存(表结构、约束、索引等),建表语句执行成功只影响数据库服务端,DBeaver 客户端不会自动感知变更。尤其 PostgreSQL 和 Oracle 的 schema 级缓存更顽固,MySQL 相对敏感但仍有延迟。
- 常见错误现象:
SELECT * FROM test_table能查到数据,但左侧面板里“表”节点下找不到test_table - 根本原因:缓存未失效,
PostgreTableBase.refreshObject()或DBPDataSource.refreshMetadata()没被触发 - 容易踩的坑:只刷新了连接节点,却没刷新所属的
schema或database节点 —— 表藏在 schema 下,不点开 schema 是刷不到的
右键刷新 schema 节点(最常用且有效)
建表操作实际发生在某个 schema(如 public、myschema)下,必须对该 schema 节点右键刷新,而非顶层连接或 database 节点。
- 操作路径:左侧导航树 → 展开你的数据库 → 展开
Schemas→ 找到对应 schema(如public)→ 右键 →Refresh - 快捷键无效:F5 在 schema 节点上不生效,必须用右键菜单
- PostgreSQL 用户注意:如果建表时用了
CREATE TABLE myschema.test_table,但你刷新的是publicschema,自然看不到 - Oracle 用户注意:确保已连接到正确的 PDB,且 schema 名与建表用户一致(如
SCOTT表不会出现在SYSschema 下)
强制全局刷新(缓存严重滞后时)
当右键刷新 schema 仍无效,说明缓存状态异常,需清空整个数据源的元数据缓存。
- 操作路径:左侧导航树 → 右键你的数据源(即连接名,如
my_postgres)→Refresh All(或按Ctrl+Shift+R) - 底层调用:
DBPDataSource.refreshMetadata(),会清除所有 cache 实例(包括tableCache、constraintCache、indexCache) - 性能影响:首次刷新稍慢(尤其库大表多),但比断连重连更轻量
- 别误操作:不要选
Refresh Connection,它只重连不刷元数据;也不要选Disconnect/Reconnect,除非你确认会话级权限或事务隔离导致问题
SQL 编辑器中建表后必须手动刷新
用 SQL 编辑器执行 CREATE TABLE 后,DBeaver 不会自动触发刷新 —— 这是设计行为,不是 bug。
- 典型场景:你写了
CREATE TABLE test_table (id SERIAL)→ 点击执行按钮(绿色 ▶️)→ 控制台显示 “0 rows affected” → 以为失败,其实成功了 - 正确动作:执行完 DDL 后,立刻右键对应 schema →
Refresh;或者直接按Ctrl+Shift+R刷新整个数据源 - 验证方法:刷新后,双击新表 → 点击
Data标签页,若显示空表格即成功;若报错relation "test_table" does not exist,说明建表本身失败(比如权限不足、语法错误) - 容易忽略的点:MySQL 用户建表时若未指定 database(如连接时没填默认库),
CREATE TABLE会建在information_schema或当前 session 默认库,未必是你期望的位置
缓存机制本身没有错,错在人误以为“执行成功 = 立刻可见”。真正要盯住的,永远是 schema 节点是否被刷新,而不是连接名或数据库名 —— 表不在连接里,它在 schema 里。


















