← todos los posts
DEEP DIVE30 jun 2026·1 min de lectura

Transacciones en Drizzle: dónde vive el rollback silencioso

El bug: dentro de db.transaction, una de las queries usaba db en vez de tx. Corría fuera de la transacción — hacía commit sola incluso cuando el resto sufría rollback. Ningún error, ningún log. Solo datos inconsistentes días después.

services/transfer.ts
undefined

El fix es trivial (usar tx), pero la lección más grande fue sobre aislamiento: el default de Postgres es READ COMMITTED, y para un ledger eso permite anomalías de lectura entre las dos patas del asiento. Las transacciones financieras piden SERIALIZABLE — y retry en conflicto.

services/transfer.ts
undefined

Regla de lint que adopté: prohibir la referencia a db dentro de callbacks de transaction. Un no-restricted-syntax lo resuelve.

← volver al blogBernardo Filipe · 30 jun 2026