在一个函数中,我需要一个值数组,这是一个简单查询的结果,例如:
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编写此函数。
答案 0 :(得分:1)
在Postgres中,您可以创建实例化视图(see the docs)。它允许您存储查询结果,并在需要时刷新它。
它的作用类似于虚拟表,因此查询起来非常便宜。
CREATE MATERIALIZED VIEW mymatview AS SELECT array_agg( some_col ) FROM some_table;
当您要刷新它时:
REFRESH MATERIALIZED VIEW mymatview;