Как автоматически проставлять текущую ДАТУ и ВРЕМЯ при добавлении записи в таблицу?
Давайте начнём с того какие вообще типы данных для ДАТЫ и ВРЕМЕНИ существуют:
PostgreSQL предлагает нам основные 6 вариантов.
- timestamp without time zone
- timestamp with time zone
- date
- time without time zone
- time with time zone
- interval
Все эти варианты могут быть ещё и в виде массивов:
- timestamp without time zone []
- timestamp with time zone []
- date []
- time without time zone []
- time with time zone []
- interval []
А ещё все эти варианты могут иметь точность значений. Можно урезать точность вычислений при помощи круглых скобок.
Давайте для примера создадим таблицу и запихнём в неё все базовые вариации:
— Table: a.t_2
— DROP TABLE IF EXISTS a.t_2;
CREATE TABLE IF NOT EXISTS a.t_2
(
dt1 timestamp without time zone,
dt2 timestamp with time zone,
dt3 date,
dt4 time without time zone,
dt5 time with time zone,
dt6 interval
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE IF EXISTS a.t_2
OWNER to postgres;
Вот так это может выглядеть в таблице.
Если в таком виде оставим, то ничего толкового не получится. Нужен ещё столбец c первичными ключами и данными. Добавим их.
Ввод данных
Первичный ключ у нас оформлен автоинкрементом, а данные мы добавляем вручную.
Накинем одну запись в таблицу.
И мы видим, что ни одна дата не проставилась автоматически при вставке данных записи в таблицу PostgreSQL. Что делать?
Решение
Чтобы ДАТЫ и ВРЕМЕНА проставлялись автоматически, нужно задать значения в поле DEFAULT
Какие значения нужно задавать?
PostgreSQL предоставляет набор функций, результат которых зависит от текущей ДАТЫ и ВРЕМЕНИ. Все следующие функции соответствуют стандарту SQL и возвращают значения, отражающие время начала текущей транзакции:
- CURRENT_DATE
- CURRENT_TIME
- CURRENT_TIMESTAMP
- CURRENT_TIME(точность)
- CURRENT_TIMESTAMP(точность)
- LOCALTIME
- LOCALTIMESTAMP
- LOCALTIME(точность)
- LOCALTIMESTAMP(точность)
Давайте подпихнём нужные варианты ФУНКЦИИ в нужные ДЕФОЛТЫ таблицы
А теперь нужно добавить новую запись
И вот в добавленной записи автоматически проставились значения ДАТ и ВРЕМЁН. Теперь нам не нужно париться по высчитыванию дат.
Теперь мы точно будем знать когда запись была добавлена в таблицу.
Конечно же это самый «мизер» о датах и временах, но мы успешно решили нашу маленькую задачу.
Итоговый код таблицы:
Информационные ссылки
Официальный сайт WEB-оболочки pgAdmin — https://www.pgadmin.org
Официальный сайт СУБД PostgreSQL — https://www.postgresql.org
Раздел «8.5. Типы даты/времени» — https://postgrespro.ru/docs/postgresql/14/datatype-datetime
Раздел «9.9.5. Текущая дата/время» — https://postgrespro.ru/docs/postgresql/14/functions-datetime#FUNCTIONS-DATETIME-CURRENT