WITH RECURSIVE cte AS ( SELECT 0 n UNION ALL SELECT n + 1 FROM cte WHERE n < 20) SELECT n, ('2020-04-13 00:00:00 Europe/Berlin'::timestamptz - make_interval(days => n)) AT TIME ZONE 'Europe/Berlin' FROM cte ORDER BY n
On my machine it gives this result:
Note that the time switches from 00:00 to 23:00 on the day of the DST switch.
On dbfiddle.uk (Link) the query gives this result:
Note that it shows
00:00 for all days, there is no change on the day of the DST switch.
And then on sqlfiddle.com (Link) the result is:
Here we have the switch again, but something else is strange here: The time zone of the result is given as
Z (UTC) even though everything before was in time zone