sql >> Databasteknik >  >> RDS >> PostgreSQL

Varför ger denna PostgreSQL-transaktion VARNING:det pågår ingen transaktion

Detta verkar vara ett missförstånd. Tänk på min fjärva betoning :

VARNING tillhör uppenbarligen en annan samtidig transaktion , som inte startade en explicit transaktion. commit är felplacerad där , eftersom den fungerar i autocommit-läge.

Om du fortsätter att läsa din logg hittar du förmodligen en post för commit längre ner:

Felsök

Om du varken hittar det eller en rollback inmatning eller ett fel, skulle jag leta efter problem i din app som lämnar oengagerade zombitransaktioner, vilket skulle vara en dålig sak .

Starta undersökningen genom att kontrollera systemvyn pg_stat_activity medan du är ansluten till din databas:

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 värde idle är inte nödvändigtvis misstänkt - bara en session som väntar på input.
Men idle in transaction och idle in transaction (aborted) är.

Mer i handboken här eller dessa relaterade svar:



  1. Få antalet objekt och deras värden i en kolumn

  2. MySQL återställningsfråga

  3. PHP MySQL-uppdateringen lyckades men databasen uppdaterades inte

  4. Hur infogar man en kolumn i en specifik position i oracle utan att tappa och återskapa tabellen?