Как человек, который пришел сюда с тем же вопросом, я не уверен, что делать с этими ответами. Я перепробовал их все и всегда получал синтаксическую ошибку «рядом» с тем или иным термином. Вернувшись к официальным документам , я понял, что не хватает дополнительного ключевого слова, такого как SET или TYPE. Примеры:
Сначала это
zuri=# ALTER TABLE newarts
ALTER COLUMN sunsetdate DATE NULL;
ERROR: syntax error at or near "DATE"
LINE 2: ALTER COLUMN sunsetdate DATE NULL;
Тогда это:
zuri=# ALTER TABLE newarts
ALTER COLUMN sunsetdate TYPE DATE NULL;
ERROR: syntax error at or near "NULL"
LINE 2: ALTER COLUMN sunsetdate TYPE DATE NULL;
Да, там все еще есть ошибка, но как только я определил значение DATE с ключевым словом TYPE, ошибка была устранена, и я перешел к другой. У меня был такой же опыт с добавлением SET (см. Примеры на той же странице официальных документов, которые я уже цитировал).
Что касается конкретной проблемы NOT NULL, (особенно в части, касающейся моей проблемы дат), я прочитал этот ответ , и мне показалось, что это работает - я не получил сообщение об ошибке -
zuri=# update lili_code set sunsetdate=NULL; UPDATE 0
Но тогда я читаю
При успешном завершении команда UPDATE возвращает тег команды вида
UPDATE count
Количество - это количество обновленных строк. Если число равно 0, строк нет
соответствует условию (это не считается ошибкой).
Что также есть в официальных документах, здесь .
Наконец, я обратился к PGAdminIII, где обнаружил, что NOT NULL - это простой флажок. Снимите флажок, проблема решена. Я уверен, что есть способ заставить это работать в командной строке с помощью psql, я просто не нашел его.
Я думаю, что некоторые из вариаций также могут быть связаны с различиями между ALTER и UPDATE (см. Этот SO ответ и мой нахальный комментарий), а также между ДОБАВЛЕНИЕМ новых структур (как в вопросе OP) и изменение данных, которые уже есть (как у меня).
Мораль этой истории читайте в официальной документации. Не сканируйте это. Прочитайте это. И если вы хотите узнать больше о NULL и NOT NULL, прочитайте this .