IT заметки по программированию
IT заметки по программированию
IT заметки по программированию
IT заметки по программированию

SKIP LOCKED в PostgreSQL

SKIP LOCKED — это опция в SELECT ... FOR UPDATE и SELECT ... FOR SHARE, которая позволяет игнорировать заблокированные строки. Это полезно для организации конкурентной обработки данных, когда несколько потоков (или процессов) обрабатывают записи без конфликтов.


Пример использования

Допустим, у нас есть таблица tasks, и несколько процессов выбирают задачи для обработки.

Добавим несколько задач:
Теперь представим, что два процесса читают задачи одновременно. Если мы просто сделаем:

Обе транзакции могут попытаться заблокировать одни и те же строки, что приведёт к блокировке ожидания (deadlock).

Используем SKIP LOCKED, чтобы избежать ожидания:

  • FOR UPDATE – блокирует строку, чтобы другие транзакции её не выбрали.
  • SKIP LOCKEDпропускает заблокированные строки, чтобы избежать ожидания.
  • LIMIT 1 – берём только одну задачу для обработки.

Когда полезно SKIP LOCKED?

Очереди задач – распределение работы между процессами без конфликтов.
Балансировка нагрузки – эффективное управление обработкой записей.
Избежание блокировок – процессы не ждут разблокировки данных.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *