Вставка current_timestamp в часовой пояс GMT вместо этого дает местное время - PullRequest
0 голосов
/ 23 января 2019

Я получил базу данных 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 Ответ

0 голосов
/ 23 января 2019

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

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

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

...