Heavyweight Lock
Особенности:
- Могут устанавливаться автоматически или вручную
- Обычно действуют до конца транзакции (или сессии для advisory locks)
- Количество
Heavyweight Lockограничено — лимит определяется, в первую очередь, параметрами max_locks_per_transaction и max_connections - Используются для ожидания блокировок и участвуют в обнаружении deadlock
- Имеют 8 режимов:
ACCESS SHARE,ROW SHARE,ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE,SHARE,SHARE ROW EXCLUSIVE,EXCLUSIVE,ACCESS EXCLUSIVE
Heavyweight Lock будет автоматически установлен при выполнении SELECT ... FOR UPDATE / FOR SHARE и др., UPDATE,
DELETE, ALTER, DROP, TRUNCATE, VACUUM
-- Посмотреть Heavyweight Lock
SELECT locktype, -- Heavyweight отображаются как locktype = relation, advisory и др.
relation::regclass,
mode, -- один из режимов
granted -- true получена, false ожидает
FROM pg_locks;
LOCK TABLE table_name IN EXCLUSIVE MODE; -- установить блокировку (будет установлена Heavyweight)
Кроме Heavyweight есть другие механизмы блокировок: lightweight и spinlock