PostgreSQL 物化视图在刷新时阻塞读取

PostgreSQL materialized view is blocking reads while being refreshed

我有一个复杂的查询,需要 2 到 3 分钟才能完成 运行。对于我们的 javascript 和 python flask web 应用程序来说,这自然是不可接受的响应时间。

为了提高性能,我将查询设为物化视图,并安排它每 30 分钟刷新一次。这非常有效,但是,我遇到了一个问题,即实际刷新块从 Web 应用程序读取。因此,应用程序每 30 分钟就会停顿 2 到 3 分钟。解决这个问题的好方法是什么?我的第一个想法是向 python 后端添加一个缓存,但我觉得我应该有一个更简单的解决方案 - 也许在 postgres 本身?

有什么想法吗?

原来有一个 "CONCURRENTLY" 我不知道的关键字:

Refresh the materialized view without locking out concurrent selects on the materialized view.

http://www.postgresql.org/docs/9.4/static/sql-refreshmaterializedview.html