Как заставить PostgreSQL игнорировать часовой пояс клиента при получении LOCALTIMESTAMP?

#postgresql #timezone

#postgresql #Часовой пояс

Вопрос:

Согласно документации, функция PostgreSQL localtimestamp возвращает «текущую дату и время», а значение равно «без часового пояса». Но я обнаружил, что возвращаемое значение зависит не только от текущего абсолютного времени, но и от настройки часового пояса клиента:

 clan_1=> SET timezone='UTC';
SET
clan_1=> SELECT localtimestamp;
       localtimestamp       
----------------------------
 2019-04-15 12:50:23.754272
(1 row)

clan_1=> SET timezone='Europe/Prague';
SET
clan_1=> SELECT localtimestamp;
       localtimestamp       
----------------------------
 2019-04-15 14:50:33.678917
(1 row)
 

В моих функциях БД мне нужно получать согласованные данные (типа timestamp, а не timestamptz) независимо от того, какой клиент (и его настройка часового пояса) используется для их вызова. После некоторых исследований я обнаружил, что должно работать следующее:

 SELECT current_timestamp AT TIME ZONE 'UTC';
 

Есть ли лучший (более простой) способ?


PostgreSQL 10.6

Ответ №1:

Ваш способ сделать это прекрасен, но так проще

 SELECT current_timestamp;
 

Он также вернет одну и ту же временную метку для всех сеансов, только они будут отформатированы в соответствии с часовым поясом сеанса.

Это не должно быть проблемой, потому 2019-04-01 12:00:00 02 что это то же 2019-04-01 10:00:00 00 самое, что и .

Комментарии:

1. Спасибо. Проблема в том, что мне нужно получить временную метку (не timestamptz ). (Я признаю, что я не упомянул об этом явно в своем первоначальном вопросе.)

2. Тогда ваше решение является лучшим.