Encontrei uma boa resposta aqui:Acompanhamento do progresso de uma declaração de atualização
O truque é primeiro criar uma sequência (nomeie-a como quiser):
CREATE SEQUENCE query_progress START 1;
Em seguida, anexe à parte WHERE da sua consulta:
AND NEXTVAL('query_progress')!=0
Agora você pode consultar o progresso:
SELECT NEXTVAL('query_progress');
Por fim, não se esqueça de se livrar da sequência:
DROP SEQUENCE query_progress;
Observe que isso provavelmente fará com que sua consulta seja executada ainda mais devagar e toda vez que você verificar o progresso, ele incrementará adicionalmente o valor. O link acima sugeriu a criação de uma sequência temporária, mas o PostgreSQL não parece torná-los visíveis nas sessões.