Как автоматически обновить метку времени в PostgreSQL
Я хочу, чтобы код мог автоматически обновлять отметку времени при вставке новой строки, как я могу сделать в 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
)
4 ответов:
чтобы заполнить столбец во время вставки, используйте
DEFAULTзначение:CREATE TABLE users ( id serial not null, firstname varchar(100), middlename varchar(100), lastname varchar(100), email varchar(200), timestamp timestamp default current_timestamp )обратите внимание, что значение для этого столбца можно явно перезаписать, указав значение в
INSERTзаявление. Если вы хотите предотвратить это, вам нужно триггер.вам также нужен триггер, если вам нужно обновить этот столбец всякий раз, когда строка обновляется (как упомянутый Э. Дж. Бреннаном)
обратите внимание, что использование зарезервированные слова для имен столбцов, как правило, не очень хорошая идея. Вы должны найти другое имя, чем
timestamp
вам нужно будет написать триггер вставки и, возможно, триггер обновления, если вы хотите, чтобы он изменился при изменении записи. Эта статья объясняет это довольно хорошо:
http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/
CREATE OR REPLACE FUNCTION update_modified_column() RETURNS TRIGGER AS $$ BEGIN NEW.modified = now(); RETURN NEW; END; $$ language 'plpgsql';применить триггер следующим образом:
CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON customer FOR EACH ROW EXECUTE PROCEDURE update_modified_column();
обновление метки времени, только если значения изменились
на основе ссылки E. J и добавьте оператор if из этой ссылки (https://stackoverflow.com/a/3084254/1526023)
CREATE OR REPLACE FUNCTION update_modified_column() RETURNS TRIGGER AS $$ BEGIN IF row(NEW.*) IS DISTINCT FROM row(OLD.*) THEN NEW.modified = now(); RETURN NEW; ELSE RETURN OLD; END IF; END; $$ language 'plpgsql';
Comments