Advisory locks в Postgres. Пример из Go.

Ответ

Advisory lock - блокировка на уровне приложения по целому числу (или паре). Не привязана к строке таблицы. Используют для координации воркеров: один воркер на задачу по id. pg_advisory_lock(id) блокирует до освобождения; pg_try_advisory_lock не блокирует, возвращает true/false. В Go вызывают SELECT pg_advisory_lock($1), затем работу, pg_advisory_unlock (или закрытие соединения снимает lock в session mode).

_, err := db.ExecContext(ctx, "SELECT pg_advisory_lock($1)", jobID)
defer db.ExecContext(ctx, "SELECT pg_advisory_unlock($1)", jobID)
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.