Zdá se, že jde o nedorozumění. Zvažte můj tučný důraz :
VAROVÁNÍ zjevně patří k jiné souběžné transakci , která nezahájila explicitní transakci. commit
tam je špatně umístěn , protože pracuje v režimu automatického potvrzení.
Pokud budete pokračovat ve čtení svého protokolu, pravděpodobně najdete záznam pro odevzdání níže:
Ladění
Pokud nenajdete ani toto, ani rollback
zadání ani chyba, zkontroloval bych, zda ve vaší aplikaci nejsou problémy s ponecháním neprovedených zombie transakcí, což by bylo špatné .
Začněte vyšetřování kontrolou systémového zobrazení pg_stat_activity
při připojení k vaší databázi:
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%';
state
hodnota idle
nemusí být nutně podezřelé – pouze relace, která čeká na vstup.
Ale idle in transaction
a idle in transaction (aborted)
jsou.
Více v příručce zde nebo tyto související odpovědi:
- Jak zrušit databázi PostgreSQL, pokud jsou k ní aktivní připojení?
- Je tam vypršel časový limit pro nečinná připojení PostgreSQL?