Предположу, что имелось ввиду не "рекомендательные блокировки", а "advisory locks" (советующие блокировки).
Советующие блокировки полезны в случаях, когда необходимо обеспечить взаимное исключение между различными операциями, которые не обязательно связаны с операциями чтения или записи данных в базе.
Пример установления блокировки на время выполнения определенной операции:
-- Пытаемся взять блокировку с ключом 1. Если она занята другим процессом, то мы её не получим.
SELECT pg_try_advisory_lock(1);
-- Если блокировка у нас, можем делать свою работу, спокойно зная, что никто другой её не делает одновременно с нами.
-- После выполнения работы освобождаем блокировку, чтобы другие могли её использовать.
SELECT pg_advisory_unlock(1);
Некоторые из основных сценариев их использования:
-
Контроль одновременного доступа: Гарантирует, что только один процесс выполняет критическую операцию в данный момент времени.
-
Очереди заданий: Убеждается, что задача из очереди выполняется только одним рабочим процессом.
-
Планирование задач: Гарантирует, что запланированная задача (например, ежедневное обновление) запускается только один раз.
-
Координация между системами: Если разные системы взаимодействуют с одной базой данных, блокировки помогают им работать последовательно.
-
Ограничение частоты: Удостоверяется, что определенная операция не происходит слишком часто.