Как PostgreSQL автоматически обновляет метки времени?

база данных MySQL PostgreSQL
Как PostgreSQL автоматически обновляет метки времени?

Это 16-й день моего участия в ноябрьском испытании обновлений.Подробности о событии:Вызов последнего обновления 2021 г.

🤞 Персональная домашняя страница:@青城Sequencer Stone
🤞 Преимущества вентилятора:Добавить фан-базуОтвечайте на вопросы один на один, получайте бесплатные шаблоны резюме, улучшайте учебные материалы и т. д. и станьте королем новой эры!

Недавно, когда некоторые стажеры в компании использовали PostgreSQL для создания схемы таблицы, их очень беспокоило время создания.create_atи время обновленияupdate_atОтметка времени автообновления поля не очень четкая. Запишите эту статью для будущих стажеров и новых коллег, чтобы иметь ссылку.

1. Почему

Прежде чем говорить о том, как обновить метку времени, нам все же нужно понять, почему необходимо обновлять метку времени автоматически. Для многих бизнес-таблиц большинству из нас необходимо записать следующие поля:

  • create_atвремя создания
  • update_atВремя обновления
  • create_byоснователь
  • update_byпрограмма обновления

Для того, чтобы присвоить значения этим полям, нам нужноrepositoryслойentityНазначение, время создания и время обновления занимают текущее системное времяLocalDateTime, создатель и программа обновления должны использовать системного пользователя для назначения значений. Что касается времени создания и времени обновления, возможно ли, что таких полей, не связанных с текущим бизнесом, может и не быть?repositoryКаждый раз, когда вы идете, чтобы вручную присвоить значения.

Конечно, должны быть.Время создания это не что иное, как время, когда данные вновь вставляются в строку, а время обновления - это время, когда данные строки обновляются.Если вы понимаете смысл этого слоя, то есть решение.

заMysqlВнутренние функции довольно легко автоматически обновляют поля времени создания и времени обновления, но дляPostgreSQLВсе будет немного сложнее.

2. Как это сделать

Автозаполнение при вставке данныхcreate_atзначение столбца, мы можем использоватьDEFAULTзначение, как показано ниже.

CREATE TABLE users (
  ...
  create_at timestamp(6) default current_timestamp
)

заcreate_atПоле устанавливает значение по умолчаниюcurrent_timestampТекущая метка времени, чтобы значение столбца явно переопределялось путем предоставления значения в операторе INSERT.

Но вышеописанный метод подходит только дляinsertЭто работает, когда используются данные строки.Если строка обновляется, нам нужно использовать триггер к базе данных.trigger.

Сначала пишем триггерupdate_modified_columnКак показано в коде ниже, смысл в том, чтобы обновить поля таблицыupdate_atявляется текущей отметкой времени.

CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.update_at = now();
    RETURN NEW;
END;
$$ language 'plpgsql';

Затем мы применяем этот триггер, как его применить? Конечно, для этого триггера задано условие триггера.

CREATE TRIGGER update_table_name_update_at BEFORE UPDATE ON table_name FOR EACH ROW EXECUTE PROCEDURE  update_modified_column();

значит смысл в обновлении таблицыtable_nameКогда данные строки выполняются, этот триггер выполняется.Нам нужно применить этот триггер для каждой настройки таблицы! В этот момент цель достигнута.


Мальчик, ты не можешь видеть достаточно? нажмите на каменьПодробное описание, Просто нажмите и посмотрите, может быть, будут сюрпризы? Добро пожаловать в поддержкуНравится/Подписывайтесь/Комментируйте, ваша поддержка — моя самая большая мотивация для Gengwen, спасибо!