Backend Matrix: post #2136 — TG.ME

⚡️ Пишем свою легкую очередь задач прямо в PostgreSQL

Когда вам нужно обрабатывать фоновые задачи (например, отправку писем или обработку платежей) несколькими воркерами, возникает проблема race condition: два воркера могут взять одну и ту же запись из БД.

Вместо сложной блокировки всей таблицы используйте SKIP LOCKED:

-- Каждый воркер выполняет этот запрос:
BEGIN;

SELECT id, payload
FROM task_queue
WHERE status = 'pending'
ORDER BY created_at ASC
LIMIT 1
FOR UPDATE SKIP LOCKED; -- 👈 Вся магия здесь

-- Обновляем статус найденной задачи
UPDATE task_queue
SET status = 'processing'
WHERE id = :found_id;

COMMIT;
July 25, 2026 251 2