Sobes.tech
Назад к вопросам
Intern
24

Что такое SKIP LOCKED в PostgreSQL? Как использовать для очередей задач?

Компании, где спрашивали
Adapty

Ответ от нейросети

sobes.tech AI

SKIP LOCKED — это опция в PostgreSQL для оператора SELECT ... FOR UPDATE, которая позволяет пропускать заблокированные строки при выборке. Это полезно для реализации очередей задач, где несколько воркеров одновременно берут задачи из таблицы.

Когда один процесс блокирует строку (задачу), другие процессы с SKIP LOCKED просто пропускают её и берут следующую доступную задачу, не ожидая освобождения блокировки.

Пример использования для очереди задач:

BEGIN;
SELECT * FROM tasks
WHERE status = 'pending'
FOR UPDATE SKIP LOCKED
LIMIT 1;
-- обновить статус задачи на 'processing'
UPDATE tasks SET status = 'processing' WHERE id = <выбранный_id>;
COMMIT;

Такой подход позволяет эффективно распределять задачи между несколькими воркерами без конфликтов и простоев.