extract('epoch' from age()) returning wrong number of seconds - Mailing list pgsql-bugs

From Peter Nelson
Subject extract('epoch' from age()) returning wrong number of seconds
Date
Msg-id 29D4F821F6A75941B4FE0C0AAAE0E7809CA1E6D6@ex01.code42.local
Whole thread Raw
Responses Re: extract('epoch' from age()) returning wrong number of seconds  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
The forth column in this query is returning the wrong value.

The last two columns in this query should return the same value, 5270400 (t=
he number of seconds in 61 days). Using simple subtraction works fine, but =
using the age() function it returns 5184000 seconds (60 days). This same be=
havior can be found using other start/end dates and interval lengths, somet=
imes age() returns too many seconds, sometimes too few. I did not get any f=
ailures below 60 days, but I did not do an exhaustive test of all interval =
values and a range of start/end dates.



 > select version();
                                           version
---------------------------------------------------------------------------=
-------------------
 PostgreSQL 9.2.6 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.7.=
2-5) 4.7.2, 64-bit
(1 row)

Time: 41.898 ms
 > select extract('epoch' from      ('2013-12-31'::date) - ('2013-12-31'::d=
ate - '5184000 seconds'::interval))  as right_answer_subtraction_60_days
         ,extract('epoch' from age (('2013-12-31'::date) , ('2013-12-31'::d=
ate - '5184000 seconds'::interval))) as right_answer_age_60_days
         ,extract('epoch' from      ('2013-12-31'::date) - ('2013-12-31'::d=
ate - '5270400 seconds'::interval))  as right_answer_subtraction_61_days
         ,extract('epoch' from age (('2013-12-31'::date) , ('2013-12-31'::d=
ate - '5270400 seconds'::interval))) as wrong_answer_age_61_days;
 right_answer_subtraction_60_days | right_answer_age_60_days | right_answer=
_subtraction_61_days | wrong_answer_age_61_days
----------------------------------+--------------------------+-------------=
---------------------+--------------------------
                          5184000 |                  5184000 |             =
             5270400 |                  5184000
(1 row)

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #10823: Better REINDEX syntax.
Next
From: Bruce Momjian
Date:
Subject: Re: BUG #10823: Better REINDEX syntax.