sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué esta transacción de PostgreSQL da ADVERTENCIA:no hay ninguna transacción en curso?

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: