Это 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, спасибо!