Sobes.tech
Senior
21

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

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

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

sobes.tech AI

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

Без SKIP LOCKED запрос будет ждать освобождения блокировки, что может привести к блокировкам и задержкам. С SKIP LOCKED запрос сразу пропускает заблокированные строки и выбирает только доступные, что повышает параллелизм.

Пример:

BEGIN;
SELECT * FROM tasks WHERE status = 'pending' FOR UPDATE SKIP LOCKED LIMIT 1;
-- обработка задачи
COMMIT;

Таким образом, несколько воркеров могут одновременно брать разные задачи из таблицы, не блокируя друг друга.