Какие знаешь блокировки в 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;
```
Блокировки помогают поддерживать целостность данных при параллельном доступе.