Strange behavior in generate_series(date, date, interval) with DST

Поиск
Список
Период
Сортировка
I've noticed a strange behavior in the generate_series functions.

I'm trying to get all days between a start and an end date including the bounds. So naturally I've tried something like the query below
​. 

The real query uses generate_series to join other tables and is much more complicated, but for the sake of brevity, I think that this query is good enough to show the problem.
:

postgres=# SELECT generate_series('2014-10-10'::DATE,
​​
'2014-10-15'::DATE, '1 DAY'::INTERVAL);
    generate_series     
------------------------
 2014-10-10 00:00:00-03
 2014-10-11 00:00:00-03
 2014-10-12 00:00:00-03
 2014-10-13 00:00:00-03
 2014-10-14 00:00:00-03
 2014-10-15 00:00:00-03
​​
(6 rows)

​Please note that the upper bound ​
'2014-10-15' is included in the resulting rows.

Now if I try this same query with slightly different dates I get:

​postgres=# SELECT generate_series('2014-10-15'::DATE, '2014-10-20'::DATE, '1 DAY'::INTERVAL);
    generate_series     
------------------------
 2014-10-15 00:00:00-03
 2014-10-16 00:00:00-03
 2014-10-17 00:00:00-03
 2014-10-18 00:00:00-03
 2014-10-19 01:00:00-02
(5 rows)

-----------------------------------------------
The upper bound is not included in the results!
-----------------------------------------------

Here, in Brazil our DST started on Oct 19. So if I had to guess I would say that this strange behavior is due to the DST, but I'm having a hard time to understand why this is happening!

Is this expected behavior?

I know that I can achieve the results I expect with the following query:

postgres=# WITH RECURSIVE days(d) AS (
    SELECT '2014-10-15'::DATE
  UNION ALL
    SELECT d+1 FROM days WHERE d < '2014-10-20'::DATE
)
SELECT * FROM days;
     d      
------------
 2014-10-15
 2014-10-16
 2014-10-17
 2014-10-18
 2014-10-19
 2014-10-20
(6 rows)

But using that instead of generate_series, just feels wrong so I would like to understand what's happening and if there is a way to overcome that, before changing my queries.

Thank you!

Sérgio Saquetim

В списке pgsql-general по дате отправления:

Предыдущее
От: AJ Welch
Дата:
Сообщение: Use cases for lateral that do not involve a set returning function
Следующее
От: Adrian Klaver
Дата:
Сообщение: Re: Strange behavior in generate_series(date, date, interval) with DST