55P03: lock_not_available
PostgreSQL含义
无法立即获取所请求的锁。通常发生在他人持有锁时以 NOWAIT 请求该锁,或 lock_timeout 到期时。
原因
使用 SELECT ... FOR UPDATE NOWAIT 或 LOCK TABLE ... NOWAIT 时行/表已被锁定,或 lock_timeout 到期。大多数情况下是某个长事务持有该锁。
解决方法
找出阻塞会话:关联 pg_locks 和 pg_stat_activity(等待/阻塞关系)。结束长事务,必要时用 pg_terminate_backend(pid) 终止它。不使用 NOWAIT,而是以合理的 lock_timeout 等待并添加重试逻辑。缩短事务以减少持锁时间。