To wydaje się być nieporozumieniem. Rozważ mój odważny nacisk :
OSTRZEŻENIE oczywiście należy do innej jednoczesnej transakcji , który nie rozpoczął jawnej transakcji. commit
jest niewłaściwie umieszczony tam , ponieważ działa w trybie automatycznego zatwierdzania.
Jeśli będziesz dalej czytać swój dziennik, prawdopodobnie znajdziesz poniżej wpis dotyczący zatwierdzenia:
Debugowanie
Jeśli nie znajdziesz ani tego, ani rollback
wpis ani błąd, sprawdziłbym pod kątem problemów w Twojej aplikacji, pozostawiając niezatwierdzone transakcje zombie, co byłoby złą rzeczą .
Rozpocznij dochodzenie, sprawdzając widok systemowy pg_stat_activity
podczas połączenia z bazą danych:
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
wartość idle
niekoniecznie jest podejrzane - po prostu sesja, która czeka na dane wejściowe.
Ale idle in transaction
i idle in transaction (aborted)
są.
Więcej w instrukcji tutaj lub te powiązane odpowiedzi:
- Jak usunąć bazę danych PostgreSQL, jeśli są z nią aktywne połączenia?
- Czy jest przekroczony limit czasu dla bezczynnych połączeń PostgreSQL?