Пропуски Senior Базы данных в эксплуатации обновлено
Внешний ключ без долгой блокировки
Вопрос
Добавьте внешний ключ на большую таблицу так, чтобы долгая проверка существующих строк не блокировала запись.
SET lock_timeout = '3s';
ALTER TABLE orders ADD CONSTRAINT orders_user_fk
FOREIGN KEY (user_id) REFERENCES users(id) __(1)__;
ALTER TABLE orders __(2)__ CONSTRAINT orders_user_fk;
Попробуйте сами
Заполните пропуски по номерам.
1
2
Показать ответ и разбор
Коротко
NOT VALID добавляет ограничение для новых строк без проверки старых, это быстро. VALIDATE CONSTRAINT проверяет существующие строки под более слабой блокировкой (SHARE UPDATE EXCLUSIVE), которая не мешает чтению и записи.
Что в пропусках
1
NOT VALID
2
VALIDATE
Разбор
NOT VALID добавляет ограничение для новых строк без проверки старых, это быстро. VALIDATE CONSTRAINT проверяет существующие строки под более слабой блокировкой (SHARE UPDATE EXCLUSIVE), которая не мешает чтению и записи.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.