Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме PostgreSQLВсе вопросы
PostgreSQLMiddleТеория

Что такое advisory lock в Postgres и зачем он нужен?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Advisory lock — добровольная блокировка по числовому ключу (bigint или два int4). PostgreSQL не связывает её с конкретной строкой и не enforce-ит смысл — все участники должны договориться об одном ключе и протоколе сами.

Runnable пример

-- Попытка захватить advisory lock без ожидания
SELECT pg_try_advisory_lock(12345) AS acquired;
-- acquired = true  → lock наш
-- acquired = false → кто-то уже держит

-- Блокирующий вариант (ждёт освобождения)
SELECT pg_advisory_lock(12345);

-- Transaction-level: снимается автоматически
BEGIN;
SELECT pg_advisory_xact_lock(99);
-- ... работа ...
COMMIT; -- lock снят

-- Явное освобождение session-level
SELECT pg_advisory_unlock(12345);

-- Посмотреть активные advisory locks
SELECT pid, classid, objid, mode, granted
FROM pg_locks
WHERE locktype = 'advisory';

Что такое advisory lock

Advisory lock — механизм явной кооперативной блокировки в PostgreSQL. Вы резервируете числовой ключ (bigint или пару int4), и база гарантирует взаимное исключение между всеми сессиями, которые запрашивают тот же ключ. Никакой связи с таблицами или строками нет — это чистая координационная примитива.

Session-level vs transaction-level

Session-level (pg_advisory_lock, pg_try_advisory_lock) — блокировка живёт до явного pg_advisory_unlock или закрытия соединения. Она не освобождается при COMMIT/ROLLBACK.

Transaction-level (pg_advisory_xact_lock, pg_try_advisory_xact_lock) — автоматически снимается в конце транзакции. Удобнее и безопаснее при использовании с connection pool.

Зачем нужен

  • Запретить параллельный запуск cron-job для одного tenant: pg_try_advisory_lock(tenant_id) → если false, другой worker уже работает.
  • Сериализовать DDL-миграцию или внешний ресурс, который не имеет собственной блокировки.
  • Idempotent command: захватить lock перед операцией, освободить после — без лишних строк в БД.
  • Distributed leader election: первый worker, захвативший ключ, становится лидером.

Namespace ключей

Функция принимает bigint или два int4 (classid + objid). Для избежания коллизий часто кодируют доменный namespace в старших битах, например hashtext('payments') :: bigint << 32 | entity_id. Документируйте namespace в коде — без этого разные части приложения легко случайно используют один ключ.

Подводные камни

  • Session-level + connection pool = утечка блокировки. Если код бросает исключение до pg_advisory_unlock, соединение возвращается в пул с активным lock. Следующий запрос из другого логического контекста получит чужую блокировку. Используйте transaction-level или try/finally.
  • Вложенные вызовы считаются. Session-level lock реентерабелен: два вызова pg_advisory_lock(X) требуют двух pg_advisory_unlock(X). Несовпадение счётчика — частая причина зависших блокировок.
  • Advisory lock не заменяет row lock и constraints. База не знает, какие строки должна защищать блокировка — если один процесс использует advisory lock, а другой напрямую делает UPDATE без него, изоляция нарушается.
  • Коллизии ключей между модулями. Если два разных компонента выбрали одинаковое число (например, оба используют 1), они будут мешать друг другу без очевидной диагностики. Используйте явный namespace.
  • Блокирующий вызов на долго подвешивает воркер. pg_advisory_lock без timeout ждёт бесконечно. В production всегда предпочитайте pg_try_advisory_lock с логикой повтора или lock_timeout.
  • Advisory locks не реплицируются. На standby-реплике ваши advisory locks отдельны от primary. Если вы координируете через advisory lock между primary и replica, это не работает.
  • pg_advisory_unlock_all при ошибке подключения. При аварийном обрыве соединения PostgreSQL снимает все session-level locks автоматически — это плюс, но нужно проектировать код так, чтобы повторный захват lock не вызвал проблем.

Частые вопросы на собеседовании

  • Что делает VACUUM, VACUUM FULL, ANALYZE? Чем они отличаются и какой когда применять?
  • Какие уровни изоляции есть и чем отличаются (READ COMMITTED, REPEATABLE READ, SERIALIZABLE)? Какой по умолчанию в Postgres?
  • Что такое PITR и чем pg_dump отличается от base backup + WAL archive?
  • Каковы типы индексов в PostgreSQL (B-tree, Hash, GIN, GiST, BRIN)?

Типичные ошибки

  • Считать advisory lock автоматической защитой строк.
  • Забывать unlock для session-level.
  • Использовать с пулером без понимания сессий.

Что проверяет интервьюер

  • Просит отличие session и transaction lock.
  • Проверяет добровольную природу механизма.
  • Уточняет совместимость с pooling.

Как вы знаете этот вопрос?

Проверить себя по теме PostgreSQL →

Источники

  • https://www.postgresql.org/docs/current/explicit-locking.html

Связанные темы

PostgreSQLbackend-architectureconcurrency-control