У меня есть несколько запросов SQL, которые будут выполняться в кластерной среде. Я пытаюсь использовать консультативную блокировку Postgres для предотвращения многократного выполнения этих запросов.
- Начать транзакцию.
- Выполнить
pg_try_advisory_xact_lock
и проверить логическое возвращаемое значение.
- Если
true
(блокировка получена), тогда продолжите выполнение реальных запросов бизнес-логики (произвольно).
- Если
false
(другой экземпляр уже удерживает эксклюзивную блокировку), тогда ничего не делать.
- Завершение транзакции.
Обратите внимание, что я использую неблокирующий вариант _try_
, который возвращает логическое значение. Если блокировка не доступна сразу, какой-то другой экземпляр уже выполняет команду, поэтому ничего не нужно делать.
Вопрос " Оператор IF PostgreSQL " предлагает встроить предложение PL / pgSQL IF
с использованием DO
. Есть ли способ сделать это без этой дополнительной сложности?