Sobes.tech
Back to questions
Intern
23

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

Companies where asked
Adapty

Answer from AI

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;

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