Sql 获取所有物化视图的计数

Sql 获取所有物化视图的计数,sql,postgresql,Sql,Postgresql,我试图从数据库中的所有物化视图中获取计数。这是我目前掌握的,但它没有返回计数- DO $$ DECLARE rec record; my_pk_new integer; BEGIN FOR rec IN SELECT matviewname FROM pg_matviews limit 2 LOOP EXECUTE ' SELECT count(*) from' || rec.matviewname

我试图从数据库中的所有物化视图中获取计数。这是我目前掌握的,但它没有返回计数-

DO
$$
DECLARE
    rec record;
    my_pk_new integer;
BEGIN
    FOR rec IN 
        SELECT matviewname
        FROM pg_matviews  
        limit 2
    LOOP
    EXECUTE ' SELECT count(*) from' || rec.matviewname
    INTO my_pk_new;
    END LOOP;
    RAISE NOTICE 'Calling (%)', my_pk_new;

END;
$$
LANGUAGE plpgsql;
这就是我希望看到的-

Matview A    2432
Matview B    453984
一个空格后的1个空格丢失。因此,您正在执行查询

SELECT count(*) frommy_view
而不是

SELECT count(*) from my_view
所以有一个错误。在我的系统上,默认的int值返回1

2你的加薪通知不在规定范围内。因此,您只注意到最后一个查询结果。把这个放到循环体中,它就工作了

DO $$
DECLARE
    rec record;
    my_pk_new integer;
BEGIN
    FOR rec IN 
        SELECT matviewname
        FROM pg_matviews  
        limit 2
    LOOP
        EXECUTE 'SELECT count(*) FROM ' || rec.matviewname
        INTO my_pk_new;

        RAISE NOTICE 'Calling (%)', my_pk_new;   
    END LOOP;       
END;
$$
LANGUAGE plpgsql;

谢谢,但我仍然只得到最后一个值。你确定你已将提升通知移动到循环中吗?因为我不知道任何支持提升通知的小提琴引擎,我已将你的匿名函数转换为普通函数。但它的作用是相同的:如何将结果选择到表中?我宁愿这样做,而不是发出通知。看小提琴:你可以使用与这里相同的策略: