Документация для generate_series говорит, что аргумент может быть int или bigint для generate_series(start, stop) и generate_series(start, stop, step) случаев и timestamp или timestamp with time zone для generate_series(start, stop, step interval).
В чем причина того, что generate_series работает также с типом date в качестве входных данных и возвращает timestamp with timezone?
pg=# select generate_series('2014-01-01'::date,'2014-01-02'::date,'1 day');
generate_series
------------------------
2014-01-01 00:00:00+01
2014-01-02 00:00:00+01
(2 rows)