55P03: lock_not_available
PostgreSQL¿Qué significa?
No se pudo adquirir de inmediato el bloqueo solicitado. Suele ocurrir cuando se solicita un bloqueo con NOWAIT mientras otro lo mantiene, o cuando expira lock_timeout.
¿Por qué ocurre?
La fila/tabla está bloqueada al usar SELECT ... FOR UPDATE NOWAIT o LOCK TABLE ... NOWAIT, o expira lock_timeout. La mayoría de las veces, una transacción larga mantiene el bloqueo.
Cómo solucionarlo
Encuentre la sesión bloqueante: combine pg_locks y pg_stat_activity (relación de espera/bloqueo). Finalice la transacción larga o, si es necesario, termínela con pg_terminate_backend(pid). En lugar de NOWAIT, espere con un lock_timeout razonable y añada lógica de reintento. Acorte las transacciones para reducir el tiempo de retención de los bloqueos.