sql >> Databáze >  >> RDS >> PostgreSQL

Proč tato transakce PostgreSQL dává VAROVÁNÍ:neprobíhá žádná transakce

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:



  1. SQL aktualizuje jeden sloupec z jiného sloupce v jiné tabulce

  2. Levé spojení s odlišným dotazem v Laravelu

  3. Jak ladit:Interní chyba aktuální transakce je přerušena, příkazy jsou ignorovány až do konce bloku transakce

  4. Jak Access komunikuje se zdroji dat ODBC? Část 1