Подтвердить что ты не робот

Можно ли определить столбец временной метки, который не является нулевым, и не имеет значения по умолчанию и никакого специального поведения при обновлении?

Когда я создаю таблицу с столбцом отметки времени, этот столбец магически определяется как NOT NULL DEFAULT CURRENT_TIMESTAMP при обновлении CURRENT_TIMESTAMP. Игнорируя, насколько странно это до сих пор, я хотел бы изменить его, чтобы не иметь никаких настроек по умолчанию и никаких специальных действий по обновлению.

Я обнаружил, что если я изменил столбец равным NULL, по умолчанию магически установлено значение NULL, а "on update" волшебным образом исчезнет. Это здорово, однако я бы хотел, чтобы столбец был NOT NULL. Когда я меняю его обратно, как по умолчанию, так и "on update" (устанавливается на CURRENT_TIMESTAMP) волшебным образом появляются снова.

Я знаю, что могу использовать datetime вместо timestamp, но меня интересует временная метка, потому что она зависит от часовой пояс (похоже, это временная метка с часовым поясом в Postgres).

4b9b3361

Ответ 1

Столбец Timestamp - это особый случай. См. здесь: по умолчанию столбцы TIMESTAMP не являются NULL, не могут содержать значения NULL, а назначение NULL присваивает текущую временную метку.

Для получения более подробной информации прочтите Значения по умолчанию для типа данных.

В частности, эта ситуация применяется, если она не работает в строгом режиме. Если вы работаете в строгом режиме, вставка NULL вызовет ошибку.

Это должно позаботиться об этом:

ALTER TABLE tableName ALTER COLUMN columnName DROP DEFAULT;

Если это не сработает, то это должно оставить вас по умолчанию (легко перезаписать), но удалить ON UPDATE:

ALTER TABLE tableName CHANGE columnName columnName NOT NULL DEFAULT CURRENT_TIMESTAMP;

Обратите внимание на имя повторного столбца.

Ответ 2

Недавно я нашел действительно хорошее решение, которое может вам помочь. Отключить ON UPDATE