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