Какие знаешь блокировки в PostgreSQL

Python Senior Без компании
Какие знаешь блокировки в PostgreSQL
Ответы
PostgreSQL поддерживает несколько уровней блокировок для управления параллельным доступом к данным: **1. Row-Level Locks (блокировки строк):** - `FOR UPDATE` - блокирует строки для изменения - `FOR NO KEY UPDATE` - менее строгая версия FOR UPDATE - `FOR SHARE` - блокирует строки от изменения, но разрешает чтение - `FOR KEY SHARE` - самая слабая блокировка строк **2. Table-Level Locks (блокировки таблиц):** - `ACCESS SHARE` - самый слабый уровень, конфликтует только с ACCESS EXCLUSIVE - `ROW SHARE` - разрешает параллельный доступ, но запрещает EXCLUSIVE и ACCESS EXCLUSIVE - `ROW EXCLUSIVE` - автоматически устанавливается при UPDATE, DELETE, INSERT - `SHARE UPDATE EXCLUSIVE` - предотвращает параллельные изменения схемы таблицы - `SHARE` - разрешает только чтение - `SHARE ROW EXCLUSIVE` - похож на SHARE, но запрещает SHARE - `EXCLUSIVE` - разрешает только параллельные ACCESS SHARE - `ACCESS EXCLUSIVE` - полная блокировка таблицы Пример: ``` BEGIN; SELECT * FROM accounts WHERE user_id = 1 FOR UPDATE; -- блокировка строки -- другие транзакции не смогут изменять эту строку COMMIT; ``` Блокировки помогают поддерживать целостность данных при параллельном доступе.