应根据刷新目标选择:“Refresh”仅更新当前节点及子节点元数据,如单张表或schema;“Refresh All”则强制清除整个数据源所有缓存(含索引、函数等),适用于大规模结构变更。

表结构不更新,不是数据库没改,而是DBeaver缓存没刷——直接右键刷新最有效,但必须选对层级和选项。
右键刷新时该点“Refresh”还是“Refresh All”?
两者触发的缓存清理范围完全不同:
-
Refresh(普通刷新):只更新当前节点及其子节点的元数据,比如右键某个schema点它,就只重载该schema下的表、视图;右键一张表点它,则只刷新这张表的列和约束 -
Refresh All(全局刷新):强制清除整个数据源的缓存,包括所有schema、表、索引、函数等,会触发DBPDataSource.refreshMetadata()方法,耗时明显更长,适合结构大规模变更后使用 - 常见误操作:在导航树顶部右键连接名却只点
Refresh,结果只刷新了连接状态(如是否在线),根本没动元数据——此时必须选Refresh All或进到具体schema里再刷新
SQL编辑器里执行ALTER TABLE后,为什么字段没立刻出现?
因为DBeaver不会监听DDL执行结果自动同步元数据。即使你刚用SQL编辑器加了一列,ER图、表结构面板、自动补全都不会更新,除非手动干预:
- 在SQL编辑器中执行完
ALTER TABLE后,立即右键左侧导航树中对应表 →Refresh - 如果该表正被打开(比如在表数据编辑页或结构页),需先关闭再刷新,否则可能因缓存锁导致刷新不生效
- 若仍不显示新字段,检查是否启用了
Server side object filters(连接配置 → Metadata 标签页),该选项可能过滤掉新增对象
F5和工具栏⟳按钮为什么有时没用?
它们默认绑定的是“当前焦点节点”的Refresh行为,但焦点容易被忽略:
- 焦点在SQL编辑器里按F5 → 刷新的是SQL结果集(
refreshData),不是元数据 - 焦点在ER图编辑区按F5 → 触发的是
ERDEditorPart.refreshDiagram(),默认不重载元数据,需手动勾选“Reload metadata” - 工具栏⟳按钮的行为完全取决于当前活动视图:在导航树有选中项时才作用于该节点;否则可能无响应
- 真正稳妥的做法:确保导航树中明确选中目标表/scheme/连接 → 再按F5或点⟳
最易被忽略的一点:PostgreSQL等数据库的分区表、物化视图、扩展类型等元数据加载依赖额外缓存模块,仅刷新表本身可能不生效,必须从schema级或连接级触发Refresh All才能清掉schema.getConstraintCache().clearObjectCache()这类深层缓存。


















