PostgreSQL | Текущая ДАТА и ВРЕМЯ при добавлении записи в таблицу

PostgreSQL | Текущая ДАТА и ВРЕМЯ при добавлении записи в таблицу

Как автоматически проставлять текущую ДАТУ и ВРЕМЯ при добавлении записи в таблицу?

Давайте начнём с того какие вообще типы данных для ДАТЫ и ВРЕМЕНИ существуют:

Типы даты и времени в СУБД PostgreSQL 2022 год
Типы даты и времени в СУБД PostgreSQL 2022 год

 

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;

 

Вот так это может выглядеть в таблице.

Таблица с типами ДАТЫ и ВРЕМЕНИ в интерфейсе pgAdmin - 2022 год
Таблица с типами ДАТЫ и ВРЕМЕНИ в интерфейсе pgAdmin — 2022 год

 

Если в таком виде оставим, то ничего толкового не получится. Нужен ещё столбец c первичными ключами и данными. Добавим их.

Таблица с типами ДАТЫ и ВРЕМЕНИ в интерфейсе pgAdmin - добавили первичный ключ и данные - 2022 год
Таблица с типами ДАТЫ и ВРЕМЕНИ в интерфейсе pgAdmin — добавили первичный ключ и данные — 2022 год

 

Ввод данных

Первичный ключ у нас оформлен автоинкрементом, а данные мы добавляем вручную.

Накинем одну запись в таблицу.

Добавили запись в таблицу где типы даты и времени могут быть null - PostgreSQL
Добавили запись в таблицу где типы даты и времени могут быть null — PostgreSQL

И мы видим, что ни одна дата не проставилась автоматически при вставке данных записи в таблицу PostgreSQL. Что делать?

 

Решение

Чтобы ДАТЫ и ВРЕМЕНА проставлялись автоматически, нужно задать значения в поле DEFAULT

В таблице не заполнено поле DEFAULT для типов ВРЕМЕНИ и ДАТЫ - автоматически НЕ проставляется - PostgreSQL
В таблице не заполнено поле DEFAULT для типов ВРЕМЕНИ и ДАТЫ — автоматически НЕ проставляется — PostgreSQL

 

Какие значения нужно задавать?

PostgreSQL предоставляет набор функций, результат которых зависит от текущей ДАТЫ и ВРЕМЕНИ. Все следующие функции соответствуют стандарту SQL и возвращают значения, отражающие время начала текущей транзакции:

  • CURRENT_DATE
  • CURRENT_TIME
  • CURRENT_TIMESTAMP
  • CURRENT_TIME(точность)
  • CURRENT_TIMESTAMP(точность)
  • LOCALTIME
  • LOCALTIMESTAMP
  • LOCALTIME(точность)
  • LOCALTIMESTAMP(точность)

Давайте подпихнём нужные варианты ФУНКЦИИ в нужные ДЕФОЛТЫ таблицы

Добавили функции к нужным типам данных даты и времени в PostgreSQL
Добавили функции к нужным типам данных даты и времени в PostgreSQL

 

А теперь нужно добавить новую запись

Добавили запись в таблицу где типы даты и времени имеют дефолтные функции - PostgreSQL
Добавили запись в таблицу где типы даты и времени имеют дефолтные функции — PostgreSQL

И вот в добавленной записи автоматически проставились значения ДАТ и ВРЕМЁН. Теперь нам не нужно париться по высчитыванию дат.

Теперь мы точно будем знать когда запись была добавлена в таблицу.

 

Конечно же это самый «мизер» о датах и временах, но мы успешно решили нашу маленькую задачу.

Итоговый код таблицы:

Итоговый SQL-код таблицы с ДАТАМИ и ВРЕМЕНАМИ - PostgreSQL
Итоговый SQL-код таблицы с ДАТАМИ и ВРЕМЕНАМИ — PostgreSQL

 

Информационные ссылки

Официальный сайт WEB-оболочки pgAdminhttps://www.pgadmin.org

Официальный сайт СУБД PostgreSQLhttps://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