PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Perché questa transazione PostgreSQL dà AVVISO:non c'è nessuna transazione in corso

Questo sembra essere un malinteso. Considera la mia enfasi in grassetto :

L'AVVISO appartiene ovviamente a una transazione simultanea diversa , che non ha avviato una transazione esplicita. Il commit è fuori posto , poiché sta operando in modalità autocommit.

Se continui a leggere il tuo log, probabilmente troverai una voce per il commit più in basso:

Debug

Se non trovi né quello né un rollback voce né un errore, verificherei la presenza di problemi nella tua app lasciando transazioni zombi non vincolate, il che sarebbe una cosa negativa .

Avvia l'indagine controllando la vista di sistema pg_stat_activity mentre sei connesso al tuo database:

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%';

Lo state valore idle non è necessariamente sospetto, è solo una sessione in attesa di input.
Ma idle in transaction e idle in transaction (aborted) sono.

Maggiori informazioni nel il manuale qui o queste risposte correlate: