我想“测试” postgres视图sql的执行。像
之类的东西select exec(select pg_get_viewdef('schema.materialized_view_name', true))
(不起作用)
我正在使用物化视图。物化视图正在从外部数据包装器表中选择数据,我想在刷新视图之前“测试” SQL代码。基础数据源架构可能已更改,我想确保最终不会在物化视图中没有数据。我宁愿过时的缓存数据,也不愿没有数据。
总而言之:
这可能吗?
您可以使用动态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
不能防止执行时间过长。