#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. Тогда ваше решение является лучшим.