в UTC 0 приходят.
Вопрос: я могу как-то timezone поставить для конкретной таблицы, или проще когда забираю данные плюсовать 3 часа :?
Данные нужно в часовой пояс на стороне клиента по уму приводить, а передавать между сервисами строго в UTC. Если просто select нужно сделать с выводом в нужной зоне, то есть специальная конструкция at time zone.
Спасибо. Да там решили что логичней всего хранить в 0 часовом поясе. Хотя данные нужны как бы в +3 формате
Хранить логичнее да. Причем хранить в timestamptz.
Зачем Вам что-то "плюсовать"? Переводите в абсолютные моменты времени — timestamptz, и так и храните.
Хранить это понятно. У человека абстрактный вопрос как выбрать сразу в конкретной зоне. Абстрактный ответ - выбирать с указанием нужной зоны)
А это уже от API зависит, на самом деле. Но это "данные нужны как бы в +3 формате" намекает, что у используемого с этим плохо, конечно.
😏 Ну конечно, мой вопрос был, можно ли не меняя глобальную временную зону, забирать данные сразу в нужной мне..
можно устанавливать переменную сессии таймзону. и все данные автоматом будут преобразовываться в нее. Но следует иметь ввиду если вы пользуетесь pgbouncerом
"Глобальной временной зоны" в PostgreSQL не существует. А вот это "забирать данные сразу в нужной мне" намекает, что используемое Вами API не умеет в настоящие значения даты/времени. Так что Вам нужно, текст вида "2021-03-04 18:00:23+03", или текст вида "2021-03-04 18:00:23", или ещё что-то?
Отдаёт в str> в формате "2021-03-04 18:00:23"
Подождите, что отдаёт? Это не один из форматов для timestamptz, например. В общем, рассказали бы Вы по шагам (с форматами / примерами на каждом шагу), если по-хорошему. Но если у Вас уже есть timestamptz, например, то это будет: SELECT now() AT TIME ZONE '-03'; -- или: SELECT now() AT TIME ZONE '03:00'::INTERVAL; Или, если нужен не фиксированный часовой пояс, а именно временная зона: SELECT now() AT TIME ZONE 'Europe/Moscow'; Если API настолько тупое, что не может нормально читать и этого (т.к. это значения timestamp, оно потенциально может их запрашивать по бинарному протоколу и запарывать), то либо изменить его настройки, либо добавить CAST в text.
SELECT now() AT TIME ZONE 'Europe/Moscow'; вот так будет, скорее всего. Ну я там забираю по апишке, и оно мне отдаёт типа 'timestamp': '2021-03-04 07:59:59.000', и я просто забираю это значение, он отдаёт без указания пояса, но путём угроз и махинаций, узнал, что отдаёт в 0.
Обсуждают сегодня