Sobes.tech
Intern

PostgreSQL'de SKIP LOCKED nedir? Görev kuyrukları için nasıl kullanılır?

sobes.tech yapay zeka

AI'dan gelen yanıt

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;

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