Я добавляю новый столбец «NOT NULL» в свою базу данных Postgresql, используя следующий запрос (очищенный для Интернета):
ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;
Каждый раз, когда я запускаю этот запрос, я получаю следующее сообщение об ошибке:
ERROR: column "mycolumn" contains null values
Я в тупике. Куда я иду не так?
ПРИМЕЧАНИЕ: я в основном использую pgAdmin III (1.8.4), но я получил ту же ошибку при запуске SQL из терминала.
sql
postgresql
alter-table
Huuuze
источник
источник
man ALTER_TABLE
:)Как заметили другие, вы должны либо создать столбец, который можно обнулять, либо указать значение DEFAULT. Если это недостаточно гибко (например, если вам нужно как-то вычислить новое значение для каждой строки отдельно), вы можете использовать тот факт, что в PostgreSQL все команды DDL могут выполняться внутри транзакции:
источник
Поскольку строки уже существуют в таблице,
ALTER
оператор пытается вставитьNULL
во вновь созданный столбец для всех существующих строк. Вам нужно будет добавить столбец как разрешающийNULL
, затем заполнить столбец требуемыми значениями, а затем установить его наNOT NULL
потом.источник
Вам нужно либо определить значение по умолчанию, либо сделать то, что говорит Шон, и добавить его без ограничения NULL, пока вы не заполните его в существующих строках.
источник
Задание значения по умолчанию также будет работать при условии, что значение по умолчанию является подходящим.
источник
Или создайте новую таблицу как временную с дополнительным столбцом, скопируйте данные в эту новую таблицу, манипулируя ею по мере необходимости, чтобы заполнить необнуляемый новый столбец, а затем поменяйте местами таблицу с помощью двухэтапного изменения имени.
Да, это сложнее, но вам может потребоваться сделать это таким образом, если вы не хотите большого ОБНОВЛЕНИЯ на живом столе.
источник
этот запрос будет автоматически обновлять нули
источник
Это сработало для меня :)
источник
NOT NULL
ваш запрос нет ограничений. Конечно, это работает.