PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Pourquoi cette transaction PostgreSQL donne-t-elle AVERTISSEMENT :il n'y a pas de transaction en cours

Cela semble être un malentendu. Considérez mon emphase audacieuse :

L'AVERTISSEMENT appartient évidemment à une transaction simultanée différente , qui n'a pas démarré de transaction explicite. Le commit est mal placé , puisqu'il fonctionne en mode autocommit.

Si vous continuez à lire votre journal, vous trouverez probablement une entrée pour le commit plus bas :

Débogage

Si vous ne trouvez ni cela ni un rollback entrée ni erreur, je vérifierais les problèmes dans votre application en laissant des transactions zombies non validées, ce qui serait une mauvaise chose .

Commencez l'enquête en vérifiant la vue système pg_stat_activity en étant connecté à votre base de données :

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%';

L'state valeur idle n'est pas nécessairement suspect - juste une session qui attend une entrée.
Mais idle in transaction et idle in transaction (aborted) sont.

Plus d'informations dans le manuel ici ou ces réponses associées :