Ограничения в PostgreSQL: NOT NULL | OTUS
Самые выгодные условия в праздники!
🎁 Дарим вам промокод SPRING_OTUS15 на скидку -15% на оплату любого курса до 12 мая 2024.
Выбрать курс

Ограничения в PostgreSQL: NOT NULL

Удаление ограничения NOT NULL из столбца PostgreSQL потребует полной блокировки таблицы. Но это не проблема, ведь речь идет о простом обновлении каталога. Однако когда мы говорим о добавлении ограничения NOT NULL к уже существующему столбцу, все становится интереснее. Дело в том, что вышеуказанная операция потребует на время проведения полного скана таблицы ACCESS EXCLUSIVE, так как необходимо убедиться, что null-значения отсутствуют. Но мы можем пойти и другим путем:

1.Добавить ограничение проверки CHECK, которое станет требовать от значений столбца не быть null. Реализовать это можно посредством следующей команды:

ALTER TABLE <table> ADD CONSTRAINT <name> CHECK (<column> IS NOT NULL) NOT VALID;

Тут NOT VALID сообщает СУБД PostgreSQL, что не нужно проводить полную проверку, чтобы убедиться, что все строки отвечают условию.

2.Вручную проверить, что все строки содержат значения, которые отличны от null. При этом валидировать наложенное ограничение мы можем следующим образом:

ALTER TABLE <table> VALIDATE CONSTRAINT <name>;

Следует понимать, что выполнение данного выражения заблокирует получение других EXCLUSIVE-блокировок таблицы, однако записи/чтению он мешать не будет.

xPostgres_Database.jpg.pagespeed.ic.9v0WOL_rkm_1-1801-2ed286.jpg

Источник: https://medium.com/paypal-tech/postgresql-at-scale-database-schema-changes-without-downtime-20d3749ed680.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
2 комментария
Комментарий удален
Комментарий удален
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто