动态postgres查询的执行结果

3zwjbxry  于 2021-07-27  发布在  Java
关注(0)|答案(2)|浏览(356)

我的postgres数据库中有一个名为rpt.view\u refresh\u schedule的表。此表包含存储在数据库中的具体化视图的名称,我希望按计划刷新这些视图。
我编写了下面的查询,它获取rpt.view\u refresh\u schedule表中的每条记录,并构建一个动态查询来刷新每个表。

select CONCAT('REFRESH MATERIALIZED VIEW ' || view_name || ';') as script from rpt.view_refresh_schedule

该查询的输出如下:

REFRESH MATERIALIZED VIEW mv_user_trading_activity;
REFRESH MATERIALIZED VIEW mv_orders;

我想创建一个函数来执行由上述sql生成的动态查询。我该怎么做?我见过其他文章从单个字符串执行查询,但这是多个命令。在python中,我只是循环结果并执行每个结果。博士后也有类似的情况吗?我尝试过循环函数,但没有成功。

q9yhzks0

q9yhzks01#

请尝试一下:

DO $$
DECLARE 
  cmd text;
BEGIN
  FOR cmd in select CONCAT('REFRESH MATERIALIZED VIEW ' || view_name) as script 
               from rpt.view_refresh_schedule 
  LOOP
    EXECUTE cmd;
  END LOOP;
END;
$$;
iih3973s

iih3973s2#

如果您使用的是psql,则可以这样做,而无需编写函数:

select CONCAT('REFRESH MATERIALIZED VIEW ' || view_name || ';') as script from rpt.view_refresh_schedule
\gexec

相关问题