@Aborigen1020

Столбец удален, но не удален, как удалить столбец?

Всем привет, создал таблицу, добавляю в ней столбец
alter table tablename add column columnname text;
Потом понял что создал неправильно, хотел применить модификатор, но получил ошибку:
столбец "columnname" содержит значения NULL

ну так я беру и удаляю столбец.
alter table tablename drop columnname;
Создаю его заново, а там:
ОШИБКА: столбец "columnname" содержит значения NULL

Ну и разумеется смотрю в \d tablename, и там моего столбца нет.

alter table tablename drop column if exists columnname;
ЗАМЕЧАНИЕ:  столбец "columnname" в таблице"tablename" не существует, пропускается
ALTER TABLE


alter table tablename add column columnname text not null;

ОШИБКА:  столбец "columnname" содержит значения NULL


И как с этим бороться?
  • Вопрос задан
  • 244 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Мой хрустальный шар совершенно верно показал.
Когда вы делаете add column columnname text - вы получаете NULL во всей этой колонке. Разумеется сразу после этого вы поставить NOT NULL не можете никак. Любая строка нарушает это ограничение и база отказывается ставить NOT NULL.
Когда вы делаете add column columnname text NOT NULL - чтож, это может сработать в одном случае - у вас пустая таблица. Тогда ни одна строка не нарушает NOT NULL ограничение, у вас просто 0 строк. Если хоть одна строка есть - это невозможно. Вы просите default NULL и одновременно NOT NULL - так не бывает. В сообщении об ошибке говорится именно о добавляемой в этот момент колонке, не о какой-то другой существовавшей ранее.

Вы должны указать какой-то не NULL default если хотите поставить NOT NULL на создаваемое поле. Либо очистить таблицу.
Либо создать без NOT NULL, заполнить поле, потом уже делать NOT NULL.

В postgresql действительно колонка не удаляется никогда. Но это деталь реализации и к сути вашего вопроса отношения не имеет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы