tabla - Cómo verificar operaciones pendientes en una transacción de PostgreSQL
ver bloqueos en postgres (3)
Tengo una sesión (SQLAlchemy) en PostgreSQL, con una transacción activa no confirmada. Acabo de pasar la sesión a algún árbol de llamadas que puede o no haber emitido INSERT
SQL INSERT
/ UPDATE
/ DELETE
, a través de sqlalchemy.orm
o directamente a través de la conexión subyacente.
¿Hay alguna manera de verificar si hay alguna declaración pendiente de modificación de datos en esta transacción? Es decir, si el compromiso sería no operativo o no, y si la reversión descartaría algo o no.
He visto personas señalar v$transaction
en Oracle por la misma cosa (ver esta pregunta SO ). Estoy buscando algo similar para usar en PostgreSQL.
Considere la siguiente secuencia de declaraciones:
select txid_current();
begin;
select txid_current();
Si la identificación de la transacción devuelta por las dos selecciones es igual, entonces hay una transacción abierta. Si no, entonces no había, (pero ahora es).
Si los números son diferentes, entonces, como efecto secundario, habrá abierto una transacción, que probablemente quiera cerrar.
Comience comprobando en la vista del sistema pg_locks.
http://www.postgresql.org/docs/8.4/interactive/view-pg-locks.html
No, no desde el nivel de la base de datos, realmente. ¿Quizás pueda agregar algún rastreo en el nivel de sqlalchemy para rastrearlo?
Además, ¿cómo defines un no-op? ¿Qué sucede si actualizaste un valor con el mismo valor que tenía antes, es un no-operativo o no? Desde la perspectiva de las bases de datos, si tuviera una, no sería un no-op. Pero desde la perspectiva de la aplicación, probablemente lo haría.