Sobes.tech
Intern

Qu'est-ce que SKIP LOCKED dans PostgreSQL ? Comment l'utiliser pour les files d'attente de tâches ?

sobes.tech IA

Réponse de l'IA

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;

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