tl;dr:有什么方法可以在postgres中定义物化视图,而不立即用数据填充它,而只在刷新时使用?
背景:我有一个flyway可重复脚本,它创建了一个物化视图,对大量数据进行了大量聚合。是否有可能创建一个视图定义,以便将其映射到hibernate实体而不出现任何错误,但它可以是空的,并在刷新时填充数据。它将在晚上每天刷新一次,所以我不想影响应用程序的启动时间。
堆栈:postgres 11,spring boot 2,hibernate 5
最佳答案
使用WITH NO DATA
选项:
create materialized view bla_bla
as
select *
from foo_foo
WITH NO DATA;
引自the manual:
WITH [ NO ] DATA
此子句指定是否应在创建时填充物化视图。否则,物化视图将被标记为不可记录,在使用刷新物化视图之前无法查询
然而,这意味着在刷新该物化视图之前访问该物化视图的任何尝试都将导致错误,而不仅仅是空结果。