Sobes.tech
Back to questions
Junior — Middle
66

Можешь перечислить виды блокировок, используемых в PostgreSQL, и объяснить их особенности?

Answer from AI

sobes.tech AI

В PostgreSQL используются различные виды блокировок для управления параллелизмом и целостностью данных:

  • Row-level locks (блокировки на уровне строк) — блокируют отдельные строки таблицы. Например, FOR UPDATE блокирует выбранные строки для предотвращения одновременного изменения.
  • Table-level locks (блокировки на уровне таблиц) — блокируют всю таблицу. Существуют разные режимы, например:
    • ACCESS SHARE — разрешает чтение, блокирует операции изменения структуры.
    • ROW EXCLUSIVE — блокирует другие операции записи.
    • EXCLUSIVE и ACCESS EXCLUSIVE — самые строгие, блокируют почти все операции.
  • Advisory locks (рекомендательные блокировки) — пользовательские блокировки, которые не влияют на стандартные блокировки базы, используются для синхронизации на уровне приложения.

Особенности:

  • Блокировки в PostgreSQL иерархичны и совместимы по режимам, что позволяет нескольким транзакциям работать параллельно, если их операции не конфликтуют.
  • Row-level блокировки не блокируют чтение других строк.
  • Табличные блокировки могут быть явными или автоматически применяться системой.

Пример явной блокировки строки:

BEGIN;
SELECT * FROM orders WHERE id = 123 FOR UPDATE;
-- теперь эта строка заблокирована для изменений другими транзакциями
COMMIT;