TGViewer
SQL Ready | Базы Данных SQL Ready | Базы Данных @sql_ready · 17.6K subscribers
Post #707 2.48K
SELECT FOR UPDATE SKIP LOCKED — распределяем задачи без гонок!

Иногда нужно, чтобы несколько воркеров одновременно обрабатывали очередь задач, не мешая друг другу. Чтобы избежать гонок и блокировок, используется SELECT … FOR UPDATE SKIP LOCKED.

Представим, что у нас есть таблица задач:
SELECT id, status 
FROM tasks
WHERE status = 'pending';


Если несколько процессов попытаются взять одну и ту же задачу — возможна гонка или блокировка.

Используем безопасный способ:
BEGIN;
SELECT id
FROM tasks
WHERE status = 'pending'
FOR UPDATE SKIP LOCKED
LIMIT 1;
-- UPDATE tasks SET status = 'processing' WHERE id = …
COMMIT;


🔥 Каждый воркер получает только одну *свободную* задачу. Если задача уже заблокирована другим процессом — она просто пропускается.

➡️ SQL Ready | #практика
  • ❤ 10
  • 👍 7
  • 🔥 5
More from @sql_ready
  1. Oct 17, 2026📂 16 паттернов программирования, которые должен знать каждый разработчик! Например, Two P…
  2. Oct 16, 2026Почему перенос условия из ON в WHERE меняет семантику LEFT JOIN При использовании LEFT JOI…
  3. Oct 16, 2026⚡️ В сети начали массово сливать IT-курсы и книги известных онлайн школ Вот отсортированна…
  4. Oct 16, 2026👍 Интересная статья лежит на Хабре: «За пределами EXPLAIN: как увидеть выполнение запроса…
  5. Oct 15, 2026Переносите строки без промежуточной выборки! Обычно архивирование делают в два этапа: снач…
  6. Oct 15, 2026Требуются 7 человек, чтобы помогали собирать чат-ботов для бизнеса по блокам, как лего. Ст…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →