Я хочу, чтобы код мог автоматически обновлять отметку времени при вставке новой строки, как я могу это сделать в MySQL, используя CURRENT_TIMESTAMP.
Как я смогу добиться этого в PostgreSQL?
CREATE TABLE users (
id serial not null,
firstname varchar(100),
middlename varchar(100),
lastname varchar(100),
email varchar(200),
timestamp timestamp
)
database
postgresql
timestamp
Аарон
источник
источник
timestamp
определяется спецификацией SQL как аббревиатураTIMESTAMP WITHOUT TIME ZONE
. Как объяснил эксперт Postgres Дэвид Уиллер, это почти наверняка не то, что вам нужно . Другой тип,TIMESTAMP WITH TIME ZONE
вероятно, то, что вы хотите, используя любую переданную информацию о смещении часового пояса для настройки даты и времени на UTC (но фактически не сохраняя информацию о часовом поясе, несмотря на имя типа).Ответы:
Чтобы заполнить столбец во время вставки, используйте
DEFAULT
значение:Обратите внимание, что значение этого столбца можно явно перезаписать, указав значение в
INSERT
операторе. Если вы хотите предотвратить это, вам нужен триггер .Вам также понадобится триггер, если вам нужно обновлять этот столбец всякий раз, когда обновляется строка (как упоминалось EJ Brennan )
Обратите внимание, что использование зарезервированных слов для имен столбцов обычно не является хорошей идеей. Вы должны найти другое имя, чем
timestamp
источник
timestamp
вtimestamp_
. Еще лучше было бы более описательное имя, например, какrow_created_
.Вам нужно будет написать триггер вставки и, возможно, триггер обновления, если вы хотите, чтобы он изменялся при изменении записи. Эта статья объясняет это довольно хорошо:
http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/
источник
Обновление метки времени, только если значения изменились
На основе ссылки EJ и добавьте оператор if из этой ссылки ( https://stackoverflow.com/a/3084254/1526023 )
источник
Использование «сейчас ()» в качестве значения по умолчанию автоматически генерирует метку времени.
источник