我想“测试”postgres视图sql的执行。有点像
select exec(select pg_get_viewdef('schema.materialized_view_name', true))(这不起作用)
我在处理物化视图。物化视图正在从外部数据包装表中选择数据,我希望在刷新视图之前“测试”sql代码。底层数据源模式可能已经更改,我希望确保在物化视图中不会有任何数据。我宁愿拥有过时的缓存数据,也不愿没有数据。
因此,总结如下:
这个是可能的吗?
发布于 2019-11-20 14:45:54
您可以使用动态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无法防止长时间的执行。
https://stackoverflow.com/questions/58956747
复制相似问题