刷新对象列表本质是清空并重载元数据缓存,需配合Refresh All(Ctrl+Shift+R)、REFRESH METADATA及表级刷新,而非仅右键普通Refresh;PostgreSQL需确认事务已提交、驱动建议升级至42.7.3+。

刷新对象列表本质是清空并重载元数据缓存,不是“重新连一下”就能解决的。 DBeaver 的表、视图、列等对象列表不更新,90% 以上是缓存没同步,而不是连接断了或权限问题。
为什么右键“刷新”有时没反应
DBeaver 的右键“Refresh”默认只刷新当前节点(比如只刷某个 schema 下的表),不会触发表约束、索引、列定义等附属元数据。尤其在 PostgreSQL 中,PostgreTableBase.refreshObject 方法会先清 constraintCache 和 indexCache,再调用 tableCache.refreshObject ——但如果连接会话未重置,某些驱动(如 pgjdbc)可能复用旧的元数据结果集,导致“看起来刷新了,其实还是老的”。
- 常见错误现象:
REFRESH METADATA命令执行成功但 SQL 补全仍不识别新表 - 根本原因:SQL 编辑器使用的
SQLCompletionContext有独立缓存,和导航树缓存不完全共享 - 必须操作:先执行
REFRESH METADATA,再右键连接节点 →Refresh All(快捷键Ctrl+Shift+R) - 注意:如果刚建完表就刷新,PostgreSQL 可能因事务未提交而查不到,需确认
COMMIT已执行
MySQL 连接只显示 sys 库怎么办
这几乎一定是连接配置里绑定了库名,或启用了服务端过滤,跟缓存刷新无关。
- 检查连接配置:右键连接 →
Edit Connection→ “Connection settings” 标签页 → 清空Database输入框(留空才能看到所有库) - 关闭服务端过滤:同上进入 “Metadata” 标签页 → 取消勾选
Server side object filters - 强制重载库列表:右键连接 →
Refresh Metadata(不是普通 Refresh),等待左侧Databases节点展开 - 若仍缺失,手动添加:右键
Databases→Add Database→ 输入库名(如tdh)→ 确认
PostgreSQL 表结构改了但字段补全不更新
字段补全依赖列元数据缓存,而 DBeaver 默认不会监听 ALTER TABLE 事件自动刷新,必须人工干预。
- 最简路径:在 SQL 编辑器中执行
REFRESH METADATA→ 按Ctrl+Space触发补全重载 - 深度清理:右键对应表 →
Refresh→ 再右键该表 →Properties→ 切到 “Columns” 标签页 → 点右上角刷新按钮(小循环图标) - 避坑提示:不要只刷新 schema 节点,PostgreSQL 的列信息缓存在表级,刷新 schema 不等于刷新每个表的列
- 驱动影响:使用较老的
postgresql-42.6.x驱动时,getColumns()可能返回过期结果,建议升级到42.7.3+
缓存刷新不是一锤子买卖——它分层级、分作用域、还受驱动行为影响。真正要稳,就得把 Refresh All、REFRESH METADATA、和具体对象节点上的 Refresh 配合着用,而不是只点一次右键。

















