Esto parece ser un malentendido. Considere mi énfasis en negrita :
La ADVERTENCIA obviamente pertenece a una transacción concurrente diferente , que no inició una transacción explícita. El commit
está fuera de lugar allí , ya que está operando en modo de confirmación automática.
Si continúa leyendo su registro, probablemente encontrará una entrada para la confirmación más abajo:
Depuración
Si no encuentra ni eso ni un rollback
entrada ni un error, comprobaría si hay problemas en su aplicación dejando transacciones zombi sin confirmar, lo que sería una mala cosa .
Comience la investigación revisando la vista del sistema pg_stat_activity
mientras está conectado a su base de datos:
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%';
El state
valor idle
no es necesariamente sospechoso, solo una sesión que está esperando una entrada.
Pero idle in transaction
y idle in transaction (aborted)
son.
Más en el manual aquí o estas respuestas relacionadas:
- ¿Cómo descartar una base de datos PostgreSQL si hay conexiones activas a ella?
- ¿Hay ¿un tiempo de espera para las conexiones inactivas de PostgreSQL?