PostgreSQL advisory lock: сериализовать свою операцию
Advisory lock позволяет приложению согласовать операции, для которых нет подходящей строки или ограничения в таблице. Используйте устойчивый ключ операции и try-функцию, чтобы не ждать блокировку бесконечно.
Рабочий пример
SELECT pg_try_advisory_lock(42001) AS acquired;
-- Выполните критическую операцию на той же сессии.
SELECT pg_advisory_unlock(42001) AS released;Session-level lock удерживается соединением и освобождается при disconnect; transaction-level вариант освобождается в конце транзакции. Все участники должны использовать один ключ и одинаковый протокол.
Частый вопрос
Чем session lock отличается от transaction lock?
Session lock живёт до unlock или закрытия соединения. Transaction lock автоматически снимается при commit или rollback, что часто упрощает управление.