Llevo semanas peleando con una aplicación que generaba deadlocks en PostgreSQL de forma intermitente. El esquema era simple: dos tablas, pedidos y clientes, con una relación de FK. En producción, cada cierto tiempo, las transacciones se quedaban bloqueadas y el sistema se caía. El log mostraba errores de deadlock entre dos UPDATEs que teóricamente no se cruzaban.
Después de mucho debuggear, descubrí que el problema era el orden de las operaciones en mi código: en un mismo hilo actualizaba clientes y luego pedidos, pero en otro hilo hacía lo inverso. Eso generaba un interbloqueo clásico. Lo resolví estableciendo un orden fijo de actualización (siempre actualizar clientes antes que pedidos) y añadiendo un LOCK TABLE en modo SHARE ROW EXCLUSIVE para transacciones críticas.
¿Alguien más ha tenido problemas similares? ¿Cuál es vuestra estrategia para evitar deadlocks en entornos de alta concurrencia?