[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-postgresql-chto-takoe-advisory-locks-i-kogda-ikh-ispolzovat":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},1045,"chto-takoe-advisory-locks-i-kogda-ikh-ispolzovat",28,"postgresql","PostgreSQL","🐘","Что такое Advisory Locks и когда их использовать?","Advisory Locks (рекомендательные блокировки) — это механизм блокировок на уровне приложения. PostgreSQL предоставляет инфраструктуру, а семантику определяет приложение. Они не связаны ни с какими объектами базы данных.\n\n```sql\n-- Блокировка на уровне сессии (удерживается до явного освобождения или отключения)\nSELECT pg_advisory_lock(12345);\n-- ... выполняем критическую секцию ...\nSELECT pg_advisory_unlock(12345);\n\n-- Блокировка на уровне транзакции (освобождается при COMMIT\u002FROLLBACK)\nBEGIN;\nSELECT pg_advisory_xact_lock(12345);\n-- ... работаем ...\nCOMMIT;  -- блокировка автоматически освобождена\n\n-- Неблокирующие варианты (возвращают true\u002Ffalse)\nSELECT pg_try_advisory_lock(12345);\n\n-- Разделяемые (shared) advisory locks\nSELECT pg_advisory_lock_shared(12345);\n```\n\n### Типичные применения\n\n```sql\n-- 1. Предотвращение параллельного выполнения batch-процесса\nSELECT pg_try_advisory_lock(hashtext('daily_report_generation'));\n-- Если true — выполняем, иначе — уже запущен\n\n-- 2. Блокировка обработки конкретной сущности\nSELECT pg_advisory_xact_lock(client_id) FROM clients WHERE id = 42;\n\n-- 3. Двухпараметровая блокировка (пространство имён)\nSELECT pg_advisory_lock(1, 42);  -- (тип операции, ID сущности)\n```\n\n### Преимущества перед SELECT FOR UPDATE\n\n- Не привязаны к строкам таблицы — можно блокировать абстрактные ресурсы\n- Быстрее для сценариев, не требующих блокировки конкретных строк\n- Полезны для координации между различными процессами приложения\n\nAdvisory locks потребляют разделяемую память, ограничение задаётся параметром `max_locks_per_transaction`.\n\n> **На собеседовании:** advisory locks — это продвинутая тема. Расскажите конкретный сценарий: «предотвращение дублирования batch-задач» или «блокировка обработки клиента без FOR UPDATE». Упомяните разницу между сессионными и транзакционными advisory locks — забытая сессионная блокировка приведёт к утечке.","","senior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое Advisory Locks и когда их использовать? — Gymterview","Advisory Locks (рекомендательные блокировки) — это механизм блокировок на уровне приложения. PostgreSQL предоставляет инфраструктуру, а семантику определяет при","Advisory Locks (рекомендательные блокировки) — это механизм блокировок на уровне приложения. PostgreSQL предоставляет ин",[7,13],"Advisory Locks (рекомендательные блокировки) — это механизм блокировок на уровне приложения. PostgreSQL предоставляет инфраструктуру, а семантику определяет приложение. Они не связаны ни с какими объектами базы данных.",true]