There appears to be a bug in timestamp/interval addition. It happens in
both PG version 7.0.2 and 7.1. There is a duplicate day (2001 Sep 07) and
a missing day (2002 Apr 04). I discovered this by accident when I asked
the interface I'm writing for a 365 day long calendar.. Interestingly,
the missing day thing (second example) doesn't happen if only adding a few
days (like the first example). I didn't go into detail to find the point
at which it does happen.
-Cedar
////////////////////
devbarn71=# SELECT version(); version
-------------------------------------------------------------------PostgreSQL 7.1 on i686-pc-linux-gnu, compiled by GCC
egcs-2.91.66
(1 row)
////////////////////
devbarn71=# SELECT to_char(cast('2001 sep 5' as timestamp)+cast('1 days' as interval),'YYYY Mon DD'); to_char
-------------2001 Sep 06
(1 row)
devbarn71=# SELECT to_char(cast('2001 sep 5' as timestamp)+cast('2 days' as interval),'YYYY Mon DD'); to_char
-------------2001 Sep 07
(1 row)
devbarn71=# SELECT to_char(cast('2001 sep 5' as timestamp)+cast('3 days' as interval),'YYYY Mon DD'); to_char
-------------2001 Sep 07
(1 row)
devbarn71=# SELECT to_char(cast('2001 sep 5' as timestamp)+cast('4 days' as interval),'YYYY Mon DD'); to_char
-------------2001 Sep 08
(1 row)
////////////////////
devbarn71=# SELECT to_char(cast('2001 apr 8' as timestamp)+cast('361 days' as interval),'YYYY Mon DD'); to_char
-------------2002 Apr 03
(1 row)
devbarn71=# SELECT to_char(cast('2001 apr 8' as timestamp)+cast('362 days' as interval),'YYYY Mon DD'); to_char
-------------2002 Apr 04
(1 row)
devbarn71=# SELECT to_char(cast('2001 apr 8' as timestamp)+cast('363 days' as interval),'YYYY Mon DD'); to_char
-------------2002 Apr 06
(1 row)
devbarn71=# SELECT to_char(cast('2001 apr 8' as timestamp)+cast('364 days' as interval),'YYYY Mon DD'); to_char
-------------2002 Apr 07
(1 row)
////////////////////
As an afterthought,
cedarc@nanu:~/schedule/fe$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 7
model name : Pentium III (Katmai)
stepping : 3
cpu MHz : 498.379505
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
sep_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx osfxsr kni
bogomips : 496.44