Вставка current_timestamp в часовой пояс GMT вместо этого дает местное время

Я получил базу данных PostgreSQL, в которой у меня есть поле даты в таблице счетов:

Column           |           Type           |
payment_date     | timestamp with time zone | 

Сервер расположен в GMT-5, как вы можете видеть:

$date
Tue Jan 22 17:33:01 EST 2019

Получение времени по Гринвичу с помощью команды PostgreSQL дает мне:

select current_timestamp at time zone 'GMT';
          timezone
----------------------------
 2019-01-22 22:33:01.087354

Проблема в том, когда я делаю вставку / обновление:

update invoices set payment_date = current_timestamp at time zone 'GMT'

Затем, когда я получу результат запроса...

select payment_date from invoices

это дает мне:

2019-01-22 22:33:01.087354-05 

Неправильно! должен давать мне 2019-01-22 22: 33: 01.087354-00

Что я делаю неправильно?

1 ответ

Ваше поле payment_date имеет (правильный) тип timestamp with time zone, Итак timestamp without time zone это результат AT TIME ZONE операция конвертируется с использованием вашего часового пояса сеанса.

PostgreSQL, timestamp with time zone Тип данных не хранит информацию о часовом поясе, он хранит метку времени UTC, которая конвертируется в часовой пояс сеанса на дисплее.

Рекомендуется хранить метку времени как timestamp with time zone и преобразовать его в нужный часовой пояс при его отображении.

Другие вопросы по тегам