Tenho várias dúvidas que são de longa duração. Gostaria de estimar quanto tempo antes da consulta terminar ou, na sua falta, uma forma de saber em que etapa a consulta está (e não apenas "Análise", "Planejamento", etc. Estou procurando execução Estatisticas).
Eu sei que posso verificar se uma consulta está sendo executada olhando em pg_stat_activity
.
SELECT * FROM pg_stat_activity WHERE query ILIKE '%table_name%';
Mas o que realmente estou interessado é se posso conseguir algo assim:
Query status
------------------------------------------------------------------------------------
Append (cost=3.42..181109110.07 rows=294666 width=1113)
-> Nested Loop Semi Join (cost=3.42..63225432.03 rows=160738 width=1057)
-> Nested Loop Left Join (cost=3.15..20470831.91 rows=160738 width=476)
Join Filter: ((tbl.foo_code)::text = (other_tbl.foo_code)::text)
^^^^^ right now it is here
-> Merge Join (cost=2.72..19913290.23 rows=160738 width=452)
Merge Cond: ((tbl.barnaby)::text = (support_tbl.barnaby)::text)
Se eu pudesse explicar uma consulta em execução, isso também seria ótimo.
Você pode obter o plano de execução de uma consulta em execução no momento, mas precisa instalar a extensão pg_show_plans para isso.
No entanto, não há como saber onde você está atualmente travado na execução de um plano. A única maneira de descobrir isso é conectar-se ao processo de back-end com um depurador e observar o rastreamento de pilha. Isso requer conhecimento profundo do código-fonte do PostgreSQL.