sql - Postgresql - 如何执行视图定义?
问题描述
我想“测试”一个 postgres 视图 sql 的执行。就像是
select exec(select pg_get_viewdef('schema.materialized_view_name', true))
(这不起作用)
我正在使用物化视图。物化视图正在从外部数据包装表中选择数据,我想在刷新视图之前“测试”sql 代码。底层数据源架构可能已更改,我想确保我的物化视图中不会没有数据。我宁愿拥有过时的缓存数据,也不愿没有数据。
总而言之:
- 测试以确保物化视图中的 sql 查询返回有效结果(计数 > 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
它无法防止长时间执行。
推荐阅读
- sql - 为什么聚集索引可以防止死锁?
- r - 在 R 中复制后,从列表中的列表中 bbind
- usb - HID 电源设备规格示例未指示值
- python - 如何遍历字典值并且如果没有值是空的,则只传递一次?
- python - on_member_join 事件 discord.py
- rust - Rustlang book 14.3 - 错误[E0425]:在板条箱`add_one`中找不到函数`add_one`
- python - 在 python 中使用 pyodbc 尝试并捕获异常未按预期工作
- python - 输入字符串而不是int时如何显示消息?
- node.js - 如何在 mongoDB 中用一个请求更新 2 个集合?
- html - 从 web html 上显示的 postgreSQL 数据库获取数据节点 js 时出错