172 похожих чатов

Добрый день Для вывода графиков в веб-приложении я функцией generate_series генерирую

даты от и до с интервалом в 1 день, затем лефтджойню табличку с данными (нужно показать кол-во добавленных записей по дням) и группирую по дате

Все бы ничего, если бы не часовые пояса. В самой базе данные хранятся в UTC, но при коннекте с веб-приложения я делаю SET TIMEZONE = пользовательская таймзона и из-за этого по дате данные джойнятся некорректно

Что посоветуете?

25 ответов

17 просмотров

> В самой базе данные хранятся в UTC, Изменить вот это на нормальное хранение (или придётся мучиться). В сторону: что-то сегодня прямо день неправильно работающих с timestamp-ами. ;)

Oleg-Kuzmenko Автор вопроса
Yaroslav Schekin
> В самой базе данные хранятся в UTC, Изменить во...

А чем хранение в UTC не нормальное, если к БД коннектятся из разных частей мира?

Oleg Kuzmenko
А чем хранение в UTC не нормальное, если к БД конн...

https://wiki.postgresql.org/wiki/Don%27t_Do_This#Don.27t_use_timestamp_.28without_time_zone.29 Вообще прочитайте весь этот раздел.

Oleg-Kuzmenko Автор вопроса
Yaroslav Schekin
https://wiki.postgresql.org/wiki/Don%27t_Do_This#D...

Я уже как-то долго с одним человеком спорил об этом (рассматривая конкретно мой случай) и в итоге он согласился, что я прав. Это было долго, я не готов повторять это снова 🙂

Oleg Kuzmenko
Я уже как-то долго с одним человеком спорил об это...

Это просто потрясающе. Т.е. у Вас проблемы с тем, что при правильном подходе было бы тривиально, но Вы правы? ;) > и в итоге он согласился, что я прав А никто, кто знает, как работать с датой/временем, не согласился бы, понимаете? Просто для информации: приведённая ссылка — это не предмет для спора, это описание правильных подходов.

Oleg-Kuzmenko Автор вопроса
Yaroslav Schekin
Это просто потрясающе. Т.е. у Вас проблемы с тем, ...

Спасибо, это познавательно в любом случае

Oleg Kuzmenko
Спасибо, это познавательно в любом случае

Не за что. Вы могли бы, конечно, показать \d таблицы / пример данных / нужного результата — всё это вполне решаемо и при неправильном хранении, только писать [намного] больше, и ошибиться куда легче.

Oleg-Kuzmenko Автор вопроса
Yaroslav Schekin
Не за что. Вы могли бы, конечно, показать \d табли...

Я вам, кстати, тоже могу ответить ссылкой с авторитетного ресурса (42 плюсика напротив коммента, все же, о чем-то говорит): https://dba.stackexchange.com/questions/59006/what-is-a-valid-use-case-for-using-timestamp-without-time-zone Это я не пытаюсь сказать, что вы не правы, просто бывают случаи, когда уместно хранить без таймзоны и у меня как раз тот случай

Oleg Kuzmenko
Я вам, кстати, тоже могу ответить ссылкой с автори...

Кхе-кхе. Во-первых, "90% оf Stack overflow answers is BS." © И даже там: "Now, with those two down, I can came with only one good reason to use timestamp WITHOUT time zone. That is when you want to store events in the future and that some kind of alert must be triggered when we got to that time." — и это тоже неправильно, строго говоря (но почти всегда "сойдёт"). Во-вторых, правильность определяется не общественным мнением, авторитетом и т.п. ерундой. ;) Но даже если Вы падки на такие вещи, Вы сравниваете статью от сообщества PostgreSQL, написанную и проверенную, в том числе, несколькими основными разработчиками, с ответами "левых" людей и их "авторитетными" голосами. > когда уместно хранить без таймзоны и у меня как раз тот случай К хранению / работе с "гражданским" временем в прошлом есть только один правильный подход (что касается планируемых событий — см. выше), и весь postgres "заточен" именно на него (используя что-то другое, Вы будете бороться с postgres, и наступать на грабли в неожиданных местах... как будто в timestamps самих по себе мало трудностей). Чем Ваш случай такой уникальный, ради любопытства?

Yaroslav Schekin
Кхе-кхе. Во-первых, "90% оf Stack overflow answers...

А чем при работе с timestamptz объясняется тот момент, что при корректно настроенной на клиенте time zone, полностью совпадающей с time zone клиента, время в столбце с типом timestamptz не является реальным временем?

Iurii Shaporenko
А чем при работе с timestamptz объясняется тот мом...

Я не понял вопроса. Что Вы имеете в виду?

Yaroslav Schekin
Я не понял вопроса. Что Вы имеете в виду?

Клиентский часовой пояс — Новосибирск. Серверный — аналогично. Корректное значение sent_at — 8 с копейками часов утра

Iurii Shaporenko
screenshot

Вы можете текстом показать?

Iurii Shaporenko
screenshot Клиентский часовой пояс — Новосибирск. Серверный —...

Уберите каст к timestamptz, сделайте timestamp at time zone ...

Farit Shamardanov
Уберите каст к timestamptz, сделайте timestamp at ...

Оно есть, это второй столбец как раз. Данные без явного указания часового пояса и с ним разные

Iurii Shaporenko
Оно есть, это второй столбец как раз. Данные без я...

Вот так, к примеру, это должно выглядеть: SELECT now() AS sent_at_tz, now()::timestamptz AT time zone 'Asia/Novosibirsk' AS sent_at__with_tz_given, now()::timestamp AS sent_at_no_tz; sent_at_tz | sent_at__with_tz_given | sent_at_no_tz -------------------------------+----------------------------+---------------------------- 2021-07-02 18:48:43.506828+03 | 2021-07-02 22:48:43.506828 | 2021-07-02 18:48:43.506828 Обратите внимание на формат каждого поля — все timestamptz обязаны включать time zone при выводе, если её нет — что-то портит этот самый вывод.

Yaroslav Schekin
Вот так, к примеру, это должно выглядеть: SELECT n...

Я вам еще более забавный артефакт могу показать SELECT now() AS now, now()::text as now_text 02.07.2021 21:53:09 2021-07-02 22:53:09.227937+07

Iurii Shaporenko
Я вам еще более забавный артефакт могу показать S...

Это явный "косяк" клиента, больше ничего — выкиньте его в мусорное ведро найдите, как там это настраивается. ;)

Yaroslav Schekin
Это явный "косяк" клиента, больше ничего — выкиньт...

Зря вы так на Aqua Data Studio — ничего более удобного для выгрузок большого объема данных напрямую в Excel или сортировки этих уже полученных данных без повторного выполнения запроса внутри самой IDE (как это делают условные DataGrip, Toad, да тот же pgAdmin) и без необходимости листать эти результаты батчами по 100/500/1000/другое_очень_маленькое_количество строк Но вот это, видимо, действительно артефакт, и придется в конфигах копаться. Хотя, опять-таки, непонятно, почему одна и та же IDE на разных машинах ведет себя по-разному

Iurii Shaporenko
Зря вы так на Aqua Data Studio — ничего более удоб...

Ну это уж кому что нравится, но проблема-то есть...

Yaroslav Schekin
Ну это уж кому что нравится, но проблема-то есть.....

Покопался в issues у производителя IDE, нашел там ссылочку на postgresql.org, где такое поведение объясняется поведением java.sql.Time https://www.postgresql.org/message-id/alpine.BSO.2.00.1005190257480.27053@leary.csoft.net

Похожие вопросы

Обсуждают сегодня

Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
48
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
Мне тут приспичило встроить в программу форматировние текста SQL, расставить переносы строк и отступы так, чтобы лучше читалось. Я что-то свое изобразил, оно после ключевых сл...
Sergey Bodrov
11
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Добрый день. Опять снова хочу обратиться к вам за помощью. После создания проэкта stack new, lazy.nvim + nvim-lspconfig/haskell-tools + hlint, ormolu из mason + hls из ghcup ...
Nannk
8
Does anyone have some zeroday's left?
Wito!d ♥️🩷
44
Карта сайта