Вставка 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
и преобразовать его в нужный часовой пояс при его отображении.