Postgresql Текущая временная метка обновления
Что такое эквивалент postgres ниже кода mysql
CREATE TABLE t1 (
created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
CREATE TABLE t2 (
created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
В соответствии с Alex Brasetvik ниже, кажется, я должен идти с триггерами, моя проблема в том, что у меня есть несколько таблиц t1, t2... с созданными и измененными полями, можно ли написать обобщенную процедуру?
- обновление
Почти готов
CREATE FUNCTION update_timestamp() RETURNS trigger AS $update_timestamp$
BEGIN
NEW.modified := current_timestamp;
RETURN NEW;
END;
$update_timestamp$ LANGUAGE plpgsql;
CREATE TRIGGER update_timestamp BEFORE INSERT OR UPDATE ON t1
FOR EACH ROW EXECUTE PROCEDURE update_timestamp();
CREATE TRIGGER update_timestamp BEFORE INSERT OR UPDATE ON t2
FOR EACH ROW EXECUTE PROCEDURE update_timestamp();
Ответы
Ответ 1
Просто убедитесь, что все таблицы имеют одинаковое имя столбца:
CREATE OR REPLACE FUNCTION upd_timestamp() RETURNS TRIGGER
LANGUAGE plpgsql
AS
$$
BEGIN
NEW.modified = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$$;
CREATE TRIGGER t_name
BEFORE UPDATE
ON tablename
FOR EACH ROW
EXECUTE PROCEDURE upd_timestamp();
Ответ 2
Спасибо за информацию Митхун и Алекс Брасетвик.
Я хочу добавить одну мелодию к триггеру. Поскольку мы, скорее всего, хотим, чтобы столбец изменен сохранял метку времени, когда последняя строка была изменена, а не когда она была целью оператора UPDATE, мы должны сравнить новое и старое значение строки, Мы обновляем столбец изменен, только если эти два значения отличаются.
CREATE OR REPLACE FUNCTION update_modified_timestamp() RETURNS TRIGGER
LANGUAGE plpgsql
AS
$$
BEGIN
IF (NEW != OLD) THEN
NEW.modified = CURRENT_TIMESTAMP;
RETURN NEW;
END IF;
RETURN OLD;
END;
$$;
Этот триггер гарантирует, что измененный столбец обновляется, только если операция UPDATE фактически изменяет значения, хранящиеся в строке.
Ответ 3
Обновите его с помощью триггера. Документация и примеры.