Иногда нужно гарантировать, что только один процесс выполняет критическую секцию, но при этом не хочется блокировать таблицы и строки.
Для этого PostgreSQL предоставляет
advisory locks — логические блокировки, не привязанные к таблицам или строкам.SELECT pg_advisory_xact_lock(42);
Пока транзакция активна, другие процессы с тем же ключом будут ожидать.
Ключ — это просто число. Можно использовать
user_id, order_id, хеш или tenant_id.SELECT pg_advisory_xact_lock(user_id);
🔥 Это превращает PostgreSQL в механизм распределённой синхронизации. После
COMMIT или ROLLBACK блокировка снимается автоматически.➡️ SQL Ready | #совет
