我们的一位用户在打开自动刷新的视图上遇到错误(只是偶尔)。表的名称是
vwdeviceplatform
。是因为视图在运行查询时正在自动刷新吗?有什么办法可以避免这种情况吗?我们不想安排手动刷新。
无效操作。关系“mv_tbl_vwdeviceplatform_0”不存在。
用户正在使用 dbeaver
问题的原因很可能是您提到的,查询发生在物化视图刷新时,导致事务冲突。为了避免这种情况,您可以在物化视图的基表上使用LOCK查询,以“访问独占”模式获取表级锁,从本质上防止自动刷新器在视图所基于的表上运行查询并更新物化视图。
LOCK TABLE <table name>;
但是,以这种方式显式锁定表会导致在其他事务或会话尝试对表进行读取和写入时等待,从而使表变得不那么可用。由于这是暂时性错误,因此最佳实践是让运行查询的应用程序优雅地处理错误并重试特定次数