PostgreSQL: Fallos silenciosos en datos financieros

Fuentes: Harnessing Postgres race conditions

Un artículo de lirbank.com advierte sobre una vulnerabilidad común en bases de datos PostgreSQL que puede llevar a errores financieros silenciosos. Estas 'condiciones de carrera' ocurren cuando dos transacciones concurrentes leen el mismo valor (por ejemplo, el saldo de una cuenta), lo calculan independientemente y luego escriben el resultado, sobrescribiendo la operación anterior. Esto puede resultar en pérdidas de dinero sin generar errores en los registros. El artículo destaca que las pruebas unitarias tradicionales no detectan este problema porque se ejecutan de forma secuencial. Para simular y probar estas condiciones de carrera, el artículo introduce el concepto de 'barreras de sincronización', un mecanismo para forzar la lectura concurrente de datos antes de la escritura. La implementación de barreras, incluso combinada con transacciones y bloqueos (SELECT ... FOR UPDATE), puede revelar y demostrar la existencia de estas condiciones de carrera, aunque a veces resulten en bloqueos. El autor sugiere que, aunque la solución a corto plazo puede ser desactivar estas pruebas, es crucial entender y abordar la causa raíz para evitar errores silenciosos en refactorizaciones futuras.