Se eu executar o seguinte em um arquivo com o comando pgsql, ele reclamará que o procedimento precisa ser chamado com 'perform'. Mas quando tento usar perform, ele me diz que perform não está definido. Qual é a solução?
create or replace function waitris() returns void as
$$
declare
cnt integer;
begin
loop
select count(*) into cnt from taskflag where taskid = 'rdfdb' and state != 2;
if cnt = 0 then
exit;
end if;
select pg_sleep(1);
end loop;
end;
$$
language plpgsql;
select waitris();
Não há problema em como você chama sua função. O erro que você obtém vem de executá-lo se e somente se
cnt
for maior que zero. O erro que você obtém ée afirma claramente que o problema está na
SELECT pg_sleep(1);
linha. Esse é o lugar que você deve substituirSELECT
porPERFORM
.Caso contrário, seu loop é inútil sem um arquivo
CONTINUE
. E mesmo se você adicionar isso, o comportamento do loop é difícil de seguir. É melhor usar umWHILE
loop em vez disso. E ainda mais um: como você vê, mudei o nome da variávelcount
paracnt
melhor legibilidade.