如何避免在Postgres中进行静态查询?

时间:2019-04-04 22:17:46

标签: postgresql

在一个函数中,我需要一个值数组,这是一个简单查询的结果,例如:

SELECT array_agg( some_col ) FROM some_table;

我可以在以下函数中声明它:

my_array text[] := SELECT array_agg( some_col ) FROM some_table;

但是:

  • 此数据集可能在几年内更改一次
  • 这个数据集真的很小
  • 此功能将被称为很多
  • 此数据集需要最新

有没有办法避免一遍又一遍地执行相同的查询?调用它并不是特别昂贵,但是由于其静态性质,我想避免使用它。

我可以在some_table上设置触发器,以针对表上的任何突变生成my_array的缓存版本,但是有没有办法一直为每个连接保持这样的变量? >

我想用SQL或PLPGSQL编写此函数。

1 个答案:

答案 0 :(得分:1)

在Postgres中,您可以创建实例化视图(see the docs)。它允许您存储查询结果,并在需要时刷新它。

它的作用类似于虚拟表,因此查询起来非常便宜。

CREATE MATERIALIZED VIEW mymatview AS SELECT array_agg( some_col ) FROM some_table;

当您要刷新它时:

REFRESH MATERIALIZED VIEW mymatview;