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?