55P03: lock_not_available
PostgreSQLO que significa?
O lock solicitado não pôde ser adquirido imediatamente. Geralmente acontece quando um lock é solicitado com NOWAIT enquanto outra sessão o mantém, ou quando o lock_timeout expira.
Por que acontece?
A linha/tabela estar bloqueada durante o uso de SELECT ... FOR UPDATE NOWAIT ou LOCK TABLE ... NOWAIT, ou a expiração do lock_timeout. Na maioria das vezes, uma transação longa está mantendo o lock.
Como resolver
Encontre a sessão bloqueadora: faça join de pg_locks e pg_stat_activity (relação de espera/bloqueio). Finalize a transação longa ou, se necessário, encerre-a com pg_terminate_backend(pid). Em vez de NOWAIT, aguarde com um lock_timeout razoável e adicione lógica de retry. Encurte as transações para reduzir o tempo de retenção dos locks.