40001: serialization_failure
PostgreSQL¿Qué significa?
Con el nivel de aislamiento SERIALIZABLE o REPEATABLE READ, la transacción no pudo serializarse porque entró en conflicto con cambios concurrentes y fue cancelada. Es un comportamiento esperado que protege la consistencia de los datos.
¿Por qué ocurre?
Transacciones que acceden a los mismos datos de forma concurrente y no pueden ordenarse de forma serializable, conflictos de escritura con alta concurrencia o dependencias peligrosas detectadas por SSI (Serializable Snapshot Isolation).
Cómo solucionarlo
No es un bug sino una señal esperada: reintente la transacción tal cual. Añada lógica de reintento automático en la aplicación. Para reducir los conflictos, acorte las transacciones y use un nivel de aislamiento más bajo (READ COMMITTED) si realmente no se necesita. Diseñe para reducir la contención en filas calientes.