Ограничения в PostgreSQL: NOT NULL
Удаление ограничения NOT NULL из столбца PostgreSQL потребует полной блокировки таблицы. Но это не проблема, ведь речь идет о простом обновлении каталога. Однако когда мы говорим о добавлении ограничения NOT 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-блокировок таблицы, однако записи/чтению он мешать не будет.
Источник: https://medium.com/paypal-tech/postgresql-at-scale-database-schema-changes-without-downtime-20d3749ed680.