Postgresql-如何执行视图定义?

问题描述 投票:0回答:1

我想“测试” postgres视图sql的执行。像

之类的东西
select exec(select pg_get_viewdef('schema.materialized_view_name', true))

(不起作用)

我正在使用物化视图。物化视图正在从外部数据包装器表中选择数据,我想在刷新视图之前“测试” SQL代码。基础数据源架构可能已更改,我想确保最终不会在物化视图中没有数据。我宁愿过时的缓存数据,也不愿没有数据。

总而言之:

  1. 进行测试以确保来自实例化视图的sql查询返回有效结果(计数> 0)
  2. 运行实例化视图以更新数据。

这可能吗?

sql postgresql materialized-views
1个回答
0
投票

您可以使用动态SQL:

CREATE FUNCTION test_viewdef(view_to_test regclass) RETURNS boolean
   LANGUAGE sql SET transaction_read_only = on AS
$$DECLARE
   dummy integer;
BEGIN
   EXECUTE format(
              'SELECT 42 FROM (%s) LIMIT 0',
              pg_get_viewdef(view_to_test)
           ) INTO dummy;
   RETURN TRUE;
EXCEPTION
   WHEN OTHERS THEN
      RETURN FALSE;
END;$$;

请注意,LIMIT 0不能防止执行时间过长。

© www.soinside.com 2019 - 2024. All rights reserved.