Sobes.tech
Senior

Kas yra SKIP LOCKED PostgreSQL ir kam jis naudojamas?

sobes.tech AI

Atsakymas iš 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;

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