Isso parece ser um mal-entendido. Considere minha ênfase em negrito :
O AVISO obviamente pertence a uma transação simultânea diferente , que não iniciou uma transação explícita. O
commit
está fora do lugar lá , já que está operando no modo de confirmação automática. Se você continuar lendo seu log, provavelmente encontrará uma entrada para o commit mais abaixo:
Depurar
Se você não encontrar isso nem um
rollback
entrada nem um erro, eu verificaria se há problemas em seu aplicativo deixando transações zombi não confirmadas, o que seria uma coisa ruim . Inicie a investigação verificando a visualização do sistema
pg_stat_activity
enquanto estiver conectado ao seu banco de dados:SELECT *
FROM pg_stat_activity
WHERE datname = current_database() -- only current database
AND pid <> pg_backend_pid() -- except your current session
AND state LIKE 'idle%';
O
state
valor idle
não é necessariamente suspeito - apenas uma sessão que está aguardando entrada.Mas
idle in transaction
e idle in transaction (aborted)
são. Mais no no manual aqui ou estas respostas relacionadas:
- Como descartar um banco de dados PostgreSQL se houver conexões ativas com ele?
- Existe um tempo limite para conexões ociosas do PostgreSQL?