Выполнять запрос Postgres, только если предоставлена ​​блокировка - PullRequest
0 голосов
/ 09 мая 2018

У меня есть несколько запросов SQL, которые будут выполняться в кластерной среде. Я пытаюсь использовать консультативную блокировку Postgres для предотвращения многократного выполнения этих запросов.

  • Начать транзакцию.
  • Выполнить pg_try_advisory_xact_lock и проверить логическое возвращаемое значение.
  • Если true (блокировка получена), тогда продолжите выполнение реальных запросов бизнес-логики (произвольно).
  • Если false (другой экземпляр уже удерживает эксклюзивную блокировку), тогда ничего не делать.
  • Завершение транзакции.

Обратите внимание, что я использую неблокирующий вариант _try_, который возвращает логическое значение. Если блокировка не доступна сразу, какой-то другой экземпляр уже выполняет команду, поэтому ничего не нужно делать.

Вопрос " Оператор IF PostgreSQL " предлагает встроить предложение PL / pgSQL IF с использованием DO. Есть ли способ сделать это без этой дополнительной сложности?

...