postgres - отображает столбец метки времени с настройкой параметра TIMEZONE и без нее - PullRequest
0 голосов
/ 24 мая 2018

Для начала, официальный документ гласит следующее:

Для решения этих проблем мы рекомендуем использовать типы даты / времени, которые содержат дату и время при использовании времени.зоны.Мы не рекомендуем использовать тип time with time zone (хотя он поддерживается PostgreSQL для устаревших приложений и для соответствия стандарту SQL).PostgreSQL предполагает использование вашего местного часового пояса для любого типа, содержащего только дату или время.

И при отображении данных с отметкой времени он говорит:

Все даты с учетом часового пояса ивремя хранится внутри UTC.Они преобразуются в местное время в зоне, указанной параметром конфигурации TimeZone, перед тем, как они будут отображаться на клиенте.

Поэтому я определил столбцы как тип данных timestamp и вставил в таблицу как "2018-05-24 09:30:00+05:30".Исходя из упомянутых выше моментов, я надеялся увидеть метку времени (в выводе запроса SELECT) в UTC, то есть 2018-05-24 04:00:00, поскольку TIME ZONE было установлено в UTC.И когда я изменил параметр на

SET TIME ZONE INTERVAL '+05:30' HOUR TO MINUTE;

, я надеялся увидеть 2018-05-24 09:30:00.Но, независимо от параметра часового пояса, я вижу вывод запроса как 2018-05-24 09:30:00.Как это наблюдение согласуется с документацией?

Вставка в базу данных была сделана с помощью Javascript, тогда как другие операции были выполнены с psql.

1 Ответ

0 голосов
/ 24 мая 2018

Критическим выражением в документации является «дата и время с учетом часового пояса».Это относится к типу timestamptz.

Перефразирование документов: если вы хотите, чтобы часовые пояса происходили во время ввода / вывода, используйте тип timestamptz.

  1. Этот типрендеринг / вывод в часовом поясе сеанса.То есть все значения будут смещены относительно UTC и будут отображаться с суффиксом зоны, например, +05:30.
  2. Литералы без какой-либо информации о зоне интерпретируются / вводятся как находящиеся в часовом поясе сеанса.То есть 2018-05-24 09:30:00 будет действовать так, как если бы он имел суффикс +05:30.
  3. Информация о зоне в литералах рассматривается, а не отбрасывается.То есть 2018-05-24 09:30:00+05:30 будет преобразовано в 04:00 UTC.

(сторона ввода выглядит немного волшебно, но это потому, что литералы нетипизированы , пока они не будут разыграны илипривыкнуть к чему-то напечатанному. То есть '2018-05-24 09:30:00+05:30' само по себе не является ни отметкой времени, ни отметкой времени. Это куча символов, которые интерпретируются при вставке в таблицу или сравнении со столбцом.)

...