файл прилагаю следующим сообщением - это слишком длинное для комментария к файлу.
2. У меня тут фактическая ошибка, и можно маппить и в Instant (посмотрел сорцы).
Отвечая на вопросы: ZonedDateTime (в Java (вроде) 5+ версии и в .NET с библиотекой NodaTime) - timestamptz (в вашем определении - "абсолютное время") + timezone, где timezone может быть идентификатором из tzdb (могут быть другие источники, но они мне не интересны). Провайдер маппит его, используя таймзону соединения, что не будет очевидно тем, кто не знает, как в ПГ работают таймзоны. Instant - более подходящий вариант, т.к. он представляет timestamptz (в том же определении) без указания таймзоны.
3. В связи с фактической ошибкой выше - согласен с вами. Если бы не она, то маппинг во время с бесполезной таймзоной на стороне провайдера делал бы семантику неконсистентной (провайдер говорит, что таймзона есть, по факту - её нет)
4. Не соглашусь, что нормальные клиенты будут использовать текстовый протокол. В бинарном, насколько я знаю, указания на этот оффсет нет; по крайней мере в рассматриваемом провайдере читаемое значение используется как utc-шное время (я не изучал протоколы ПГ)
5. Можете привести пример какой-нибудь интересной грабли, ради научного интереса?
Исходя из того что провайдер позволяет маппить timestamptz в Instant, буду использовать timestamptz - так и семантика будет консистентна, и, наверное, ошибок будет меньше (сейчас опробую тот же файл на timestamptz)
попробовал timestamptz, логика отработала так же, в выводе клиент рисует локальное клиентской машине время, что очень не удобно (редактирование через UI так же ожидает ввода локального времени). Последнее может вести к ошибкам при ручном заполнении данных через UI, которым коллеги иногда пользуются. К сожалению, проблема - в драйвере jdbc, и для нормальной работы с UI клиентом необходимо менять настройки сессии, чему придётся учить UI-юзеров. Кажется, всё-таки timestamp пойдёт лучше - он со всех сторон выглядит безопаснее. По крайней мере, на сделанной мной выборке операций. Может, я не учёл какой-то операции, которая так же вероятно может встретиться в коде и которая приведёт к ошибкам при работе с таймзонами
До следующего пункта — примерно понятно. > 4. Не соглашусь, что нормальные клиенты будут использовать текстовый протокол. Я имел в виду те, в которых разработчики будут проверять запросы и т.п. (psql, например). > В бинарном, насколько я знаю, указания на этот оффсет нет; Ну да, это же just human-readable representation. > 5. Можете привести пример какой-нибудь интересной грабли, ради научного интереса? Я их особо не коллекционирую. ;)
Обсуждают сегодня