Можете объяснить предназначение использования опции SKIP LOCKED при работе с SQL-запросами?
Answer from AI
sobes.tech AI
Опция SKIP LOCKED в SQL используется при работе с блокировками строк в транзакциях, чтобы пропускать уже заблокированные записи и не ждать их освобождения. Это особенно полезно в системах с параллельной обработкой задач, например, при реализации очередей задач в базе данных.
Когда несколько процессов пытаются одновременно получить доступ к одним и тем же строкам для обработки, SKIP LOCKED позволяет одному процессу пропустить строки, которые уже заблокированы другим процессом, и обработать только доступные. Это повышает производительность и предотвращает взаимные блокировки (deadlocks).
Пример использования в PostgreSQL:
BEGIN;
SELECT * FROM tasks
WHERE status = 'pending'
FOR UPDATE SKIP LOCKED
LIMIT 1;
-- обработать задачу
UPDATE tasks SET status = 'processing' WHERE id = ?;
COMMIT;
Здесь запрос выбирает одну задачу со статусом 'pending', блокируя её для текущей транзакции, но пропускает те, которые уже заблокированы другими транзакциями.