Postgresql, как запустить объяснить анализ на цикл foreach - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь запустить 'explain analyze' цикл foreach в postgresql, но не нашел подходящего примера в postgres doc.Может ли кто-нибудь помочь мне здесь.

Вот пример

CREATE OR REPLACE FUNCTION xyz() RETURNS TRIGGER AS $xyz$
DECLARE
        idList integer[];

        aa integer;
        bb bigint;
        cc integer;
        dd smallint;

BEGIN
        IF NEW.severity = 7
        THEN     
             idList := array(select someid from sometable where someid like NEW.someid);

        END IF;
             FOREACH Id in ARRAY alarmIdList LOOP
                 select a, b, c, d
                        into aa, bb, cc , dd
                 from SomeActivetable where someid = Id;

                 insert into SomeTable2(ba, bb, bc, bd)
                     values(aa, bb, 6, dd);
             END LOOP;

        END IF;
        RETURN NEW;
END;
$xyz$ LANGUAGE plpgsql;

Спасибо, Гурав

1 Ответ

0 голосов
/ 24 мая 2018

Ну, есть немного странный способ, как это сделать.См. «Подтверждение концепции» ниже - настройте его в соответствии с вашими потребностями ...

do $$
declare
    _idlist int[] := '{10,20,30}';
    i int;
    _q text;
    _t text;
begin
    foreach i in array _idlist loop
        _q := 'explain analyze select '||i;
        raise notice 'query: %', _q;
        for _t in execute _q loop
            raise notice '%', _t;
        end loop;
    end loop;
end; $$ language plpgsql;   

Выводит вывод в окне «сообщений» pgAdmin (или STDERR в командной строке) следующим образом:

NOTICE:  query: explain analyze select 10
NOTICE:  Result  (cost=0.00..0.01 rows=1 width=4) (actual time=0.001..0.001 rows=1 loops=1)
NOTICE:  Planning time: 0.003 ms
NOTICE:  Execution time: 0.012 ms
NOTICE:  query: explain analyze select 20
NOTICE:  Result  (cost=0.00..0.01 rows=1 width=4) (actual time=0.001..0.001 rows=1 loops=1)
NOTICE:  Planning time: 0.004 ms
NOTICE:  Execution time: 0.004 ms
NOTICE:  query: explain analyze select 30
NOTICE:  Result  (cost=0.00..0.01 rows=1 width=4) (actual time=0.000..0.000 rows=1 loops=1)
NOTICE:  Planning time: 0.004 ms
NOTICE:  Execution time: 0.003 ms
DO

Query returned successfully in 127 msec.
...