powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Это баг, фича или просто особенности работы PostgreSQL с датами ?
18 сообщений из 18, страница 1 из 1
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414477
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте !
Скачал с сайта postgrespro.ru и установил PostgreSQL 9.6.1 32-разрядная (сборка под Windows Server 2003).
Проблема вот в чем:
Есть таблица с полем "timestamp without time zone" , нужно сделать выборку за последние несколько минут (10 например).
Запрос "select * from test where time > (now() - ''10 mins'::interval)" выдает результат с учетом зоны, а
Запрос "select * from test where time between (now() - ''10 mins'::interval) and now()" выдает верный результат.
Это баг, фича или просто особенности работы PostgreSQL с датами ? Или это просто данная версия глючит ? Или я в чем-то не прав ?
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414528
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Снимаю тему. Я окончательно запутался, т.к. результат разный от того, откуда делаешь выборку и чем.
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414535
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kigora,

Функция now() возвращает timestamp with time zone и автоматом приводит результат к текущей таймзоне
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414544
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select CURRENT_TIMESTAMP - '10 mins'::interval;
select LOCALTIMESTAMP - '10 mins'::interval;
select now()::timestamp - '10 mins'::interval;
select now() - '10 mins'::interval;
... выводит один и тот же результат из pgAdmin, и разные из DbVisualizer
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414546
kira ivanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kigora, - localtimestamp
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414556
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
... из под DbVisualizer select LOCALTIMESTAMP - '10 mins'::interval; - выдает текущее время минус 10 минут,
делаешь выборку из таблицы (с LOCALTIMESTAMP - '10 mins'::interval) - выдает текущее время минус зона минус 10 минут,
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414562
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kigora,

Ты же сам писал, что у тебя в базе timestamp without time zone, а LOCALTIMESTAMP возвращает в текущей таймзоне время, поэтому происходит преобразование к UTC сначала
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414568
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select * from test where time > (LOCALTIMESTAMP - ''10 mins'::interval) = от текущее время минус зона минус 10 мин. до текущее время минус 10 мин.
select * from test where time between (LOCALTIMESTAMP - ''10 mins'::interval) and LOCALTIMESTAMP = от текущее время минус зона до текущее время минус зона минус 10 мин.
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414571
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex__kK,

я перепробовал все (см. выше) ...
в таком случае (плиззз) подскажите, как выбрать данные за последние 10 минут ?
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414606
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kigora,

Есть такая конструкция at time zone 'название временной зоны', например at time zone 'utc'
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414616
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex__kK,

Да это работает (я проверял). Непонятки ломают мой мозг. 20266038
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414628
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kigoraЗдравствуйте !
Скачал с сайта postgrespro.ru и установил PostgreSQL 9.6.1 32-разрядная (сборка под Windows Server 2003).
Проблема вот в чем:
Есть таблица с полем "timestamp without time zone" , нужно сделать выборку за последние несколько минут (10 например).
Запрос "select * from test where time > (now() - ''10 mins'::interval)" выдает результат с учетом зоны, а
Запрос "select * from test where time between (now() - ''10 mins'::interval) and now()" выдает верный результат.
Это баг, фича или просто особенности работы PostgreSQL с датами ? Или это просто данная версия глючит ? Или я в чем-то не прав ?

это таки баг. но глючит тут не пж, а ганглий школоты.
вам надо вчитаться в типы пж, и выяснить, чем чреваты неявные преобразования типов в пж.

там прелесть в целом в том , что тип "with time zone" на самом деле есть абсолютное время, хранимое безо всякого "time zone" (UTC), т.е. "without time zone", и выглядещее как таймзонное только в приведении к тексту или "таймстампу" в таймзоне клиента (соединения).

а тип "without time zone" всегда интерпретируется как "то что написано" "но в зоне текущего клиента" -- т.е. его "абсолютное значение" (UTC) зависит от таймзоны текущего клиента (если явно не задано приведение к заданной таймзоне ~"at time zone ...")
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414630
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kigora,

вот про типы можно почитать тут: https://postgrespro.ru/docs/postgrespro/9.6/datatype-datetime.html
а еще тут: https://postgrespro.ru/docs/postgrespro/9.6/functions-datetime
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414649
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex__kK,

Спасибо. (... это первые шаги перехода с Sybase ASE 12.3 на PostgreSQL ... и такие грабли ... ИМХО перемудрили они с этими типами дата/время , дюже все сложно)
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414683
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
З.Ы.
это таки баг. но глючит тут не пж, а ганглий школоты.
вам надо вчитаться в типы пж, и выяснить, чем чреваты неявные преобразования типов в пж.

ИМХО баг и в пж, т.к. я вижу то что вижу, ничего явно и неявно не преобразуя
Код: plsql
1.
select CURRENT_TIMESTAMP;


выводит мне то что я хочу (текущее время), а вот
Код: plsql
1.
select * from table where time > CURRENT_TIMESTAMP;


не должен выводить ничего (выводит от минус зоны), при том что база и клиент на одной телеге.
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414738
Alex__kK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kigora,

Если это документировано - то не баг, а ожидаемое поведение. :)
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414745
kigora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил попробовать dbeaver :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select CURRENT_TIMESTAMP - '10 mins'::interval;
select LOCALTIMESTAMP - '10 mins'::interval;
select now()::timestamp - '10 mins'::interval;
select now() - '10 mins'::interval; 
select * from table where time > now()::timestamp - '10 mins'::interval;
select * from table where time > now() - '10 mins'::interval;
select * from table where time > CURRENT_TIMESTAMP - '10 mins'::interval;
select * from table where time between CURRENT_TIMESTAMP - '10 mins'::interval and CURRENT_TIMESTAMP;
select * from table where time between now()- '10 mins'::interval and now();


... чудеса, но все работает как задумывалось (вот и не понятно кто и как преобразует типы)
...
Рейтинг: 0 / 0
Это баг, фича или просто особенности работы PostgreSQL с датами ?
    #39414795
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kigoraЗ.Ы.
это таки баг. но глючит тут не пж, а ганглий школоты.
вам надо вчитаться в типы пж, и выяснить, чем чреваты неявные преобразования типов в пж.

ИМХО баг и в пж, т.к. я вижу то что вижу, ничего явно и неявно не преобразуя

у типа "виз тайм зон" кроме явного хранения абсолютного значения в UTC явно оговорен "интерфейс" его представления в таймзоне клиента. т.е. значение не меняется, но его представление -- да.
т.е. то "что я вижу" -- меняется, а то, что это изменяемое означает -- неизменно.

"это невозможно понять, это нужно запомнить" (как в случае с "вилька, тарелька и жмел")
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Это баг, фича или просто особенности работы PostgreSQL с датами ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]