|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
Здравствуйте ! Скачал с сайта 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 с датами ? Или это просто данная версия глючит ? Или я в чем-то не прав ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 08:26 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
Снимаю тему. Я окончательно запутался, т.к. результат разный от того, откуда делаешь выборку и чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 10:14 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
kigora, Функция now() возвращает timestamp with time zone и автоматом приводит результат к текущей таймзоне ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 10:24 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
select CURRENT_TIMESTAMP - '10 mins'::interval; select LOCALTIMESTAMP - '10 mins'::interval; select now()::timestamp - '10 mins'::interval; select now() - '10 mins'::interval; ... выводит один и тот же результат из pgAdmin, и разные из DbVisualizer ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 10:33 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
kigora, - localtimestamp ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 10:34 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
... из под DbVisualizer select LOCALTIMESTAMP - '10 mins'::interval; - выдает текущее время минус 10 минут, делаешь выборку из таблицы (с LOCALTIMESTAMP - '10 mins'::interval) - выдает текущее время минус зона минус 10 минут, ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 10:44 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
kigora, Ты же сам писал, что у тебя в базе timestamp without time zone, а LOCALTIMESTAMP возвращает в текущей таймзоне время, поэтому происходит преобразование к UTC сначала ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 10:51 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
select * from test where time > (LOCALTIMESTAMP - ''10 mins'::interval) = от текущее время минус зона минус 10 мин. до текущее время минус 10 мин. select * from test where time between (LOCALTIMESTAMP - ''10 mins'::interval) and LOCALTIMESTAMP = от текущее время минус зона до текущее время минус зона минус 10 мин. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 10:58 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
Alex__kK, я перепробовал все (см. выше) ... в таком случае (плиззз) подскажите, как выбрать данные за последние 10 минут ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 11:03 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
kigora, Есть такая конструкция at time zone 'название временной зоны', например at time zone 'utc' ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 11:36 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 11:46 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
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 ...") ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 12:00 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
kigora, вот про типы можно почитать тут: https://postgrespro.ru/docs/postgrespro/9.6/datatype-datetime.html а еще тут: https://postgrespro.ru/docs/postgrespro/9.6/functions-datetime ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 12:03 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
Alex__kK, Спасибо. (... это первые шаги перехода с Sybase ASE 12.3 на PostgreSQL ... и такие грабли ... ИМХО перемудрили они с этими типами дата/время , дюже все сложно) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 12:33 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
З.Ы. это таки баг. но глючит тут не пж, а ганглий школоты. вам надо вчитаться в типы пж, и выяснить, чем чреваты неявные преобразования типов в пж. ИМХО баг и в пж, т.к. я вижу то что вижу, ничего явно и неявно не преобразуя Код: plsql 1.
выводит мне то что я хочу (текущее время), а вот Код: plsql 1.
не должен выводить ничего (выводит от минус зоны), при том что база и клиент на одной телеге. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 13:30 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
kigora, Если это документировано - то не баг, а ожидаемое поведение. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 14:12 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
Решил попробовать dbeaver : Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... чудеса, но все работает как задумывалось (вот и не понятно кто и как преобразует типы) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 14:20 |
|
Это баг, фича или просто особенности работы PostgreSQL с датами ?
|
|||
---|---|---|---|
#18+
kigoraЗ.Ы. это таки баг. но глючит тут не пж, а ганглий школоты. вам надо вчитаться в типы пж, и выяснить, чем чреваты неявные преобразования типов в пж. ИМХО баг и в пж, т.к. я вижу то что вижу, ничего явно и неявно не преобразуя у типа "виз тайм зон" кроме явного хранения абсолютного значения в UTC явно оговорен "интерфейс" его представления в таймзоне клиента. т.е. значение не меняется, но его представление -- да. т.е. то "что я вижу" -- меняется, а то, что это изменяемое означает -- неизменно. "это невозможно понять, это нужно запомнить" (как в случае с "вилька, тарелька и жмел") ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2017, 15:16 |
|
|
start [/forum/topic.php?fid=53&fpage=77&tid=1996672]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 358ms |
total: | 499ms |
0 / 0 |