You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计数据库中所有物化视图的记录数?现有代码无法返回结果

解决PostgreSQL物化视图记录数统计的问题

我看了你的PL/pgSQL代码,问题主要出在这几个地方:

  • 你把所有物化视图的计数都存在同一个变量my_pk_new里,循环结束后这个变量只会保留最后一个物化视图的结果,自然看不到所有视图的统计数据
  • EXECUTE语句里的from后面没加空格,会导致SQL语法错误(比如变成frommatviewA这种无效语句)
  • 你只在循环结束后输出一次结果,没法逐个展示每个物化视图的计数

这里给你修正后的代码,完全能实现你想要的输出效果:

DO $$ 
DECLARE 
    rec record; 
    mv_count bigint; -- 用bigint避免大计数溢出
BEGIN 
    FOR rec IN SELECT matviewname FROM pg_matviews LIMIT 2 LOOP 
        -- 修复from后的空格问题,同时把计数存入变量
        EXECUTE 'SELECT count(*) FROM ' || rec.matviewname INTO mv_count;
        -- 循环内直接输出每个物化视图的名称和计数
        RAISE NOTICE '% %', rec.matviewname, mv_count;
    END LOOP;
END; 
$$ LANGUAGE plpgsql;

如果不想用额外变量,也可以直接在EXECUTE里拼接输出逻辑,这样更简洁,还能避免视图名带特殊字符的问题:

DO $$ 
DECLARE 
    rec record; 
BEGIN 
    FOR rec IN SELECT matviewname FROM pg_matviews LIMIT 2 LOOP 
        EXECUTE format('RAISE NOTICE ''%s %%s'', (SELECT count(*) FROM %I)', rec.matviewname, rec.matviewname);
    END LOOP;
END; 
$$ LANGUAGE plpgsql;

这里用format()函数和%I占位符更安全,能自动处理物化视图名称包含空格、关键字等特殊情况,避免语法错误。

内容的提问来源于stack exchange,提问作者Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:59:58