PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que esta transação do PostgreSQL dá AVISO:não há transação em andamento


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 , 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: