IntelliJ Database Tool控制台删行后编辑数据视图不同步怎么办
问题现象
- 在console_2中执行DELETE语句删除目标表数据

- 点击「reload page」按钮后,Edit Data视图没有任何变化,仍显示删除前的旧数据

- 执行SELECT语句查询该表,已经能返回空表的预期结果,说明DELETE操作实际已经在数据库层面执行成功

核心原因
这是数据库GUI工具的事务隔离机制导致的,不是DELETE语句没生效:
绝大多数带可视化数据编辑功能的数据库工具(pgAdmin、Navicat、DBeaver等),打开Edit Data视图时会单独启动一个独立长事务,页面级的「reload page」按钮只会重载前端页面资源,不会重置这个长事务的快照,自然读不到其他会话已经提交的数据变更。另外如果你的控制台默认是手动提交模式,执行完DELETE没手动提交的话,其他会话也读不到这个未提交的变更。
同步方法
按操作成本从低到高试:
- 点击Edit Data面板工具栏自带的数据刷新按钮(环形箭头图标,和保存行修改、新增行按钮在同一栏,不是页面全局的reload page),这个按钮会主动结束当前视图的旧事务,拉取最新的已提交数据快照,绝大多数情况点完就同步了。
- 回到执行DELETE的console_2窗口,执行
COMMIT;命令提交事务,再回到Edit Data视图点自带的刷新按钮——如果控制台开了手动提交,你在当前窗口能查到删除结果是会话内的修改可见,不代表其他会话能读到。 - 直接关闭当前的Edit Data标签页,右键目标表重新打开Edit Data视图,新视图会创建新事务拉取最新数据,肯定能同步。
- 以上都不行的话重启GUI工具即可,属于极个别缓存bug场景。
避坑提醒:永远不要用页面全局的reload按钮刷新数据库视图数据,这个按钮不会触发后端数据库的事务刷新,只能重载前端页面代码。
内容的提问来源于stack exchange,提问作者Semjon Mössinger
相关产品推荐
相关产品推荐

