BUG #1637: age() function is giving different results

Started by J.Simon Goodallalmost 21 years ago6 messagesbugs
Jump to latest
#1J.Simon Goodall
simon@EstanciaViamonte.com

The following bug has been logged online:

Bug reference: 1637
Logged by: J.Simon Goodall
Email address: simon@EstanciaViamonte.com
PostgreSQL version: 7.4.2
Operating system: Linux
Description: age() function is giving different results
Details:

With the same query the age function is giving me two results, one as it
should be (34 years) and the other one is off by 1 hour, the query is a
single one so the results I asume should be the same.

I have tried finding the age(,) function in the source but had no luck.

Would appreciate some help, thx.

Simon.

Z SQL Method Z SQL Method at /StockMan/select_birthdays

Famname Firstname Birth date Age
Surname1 Name1 1971-05-05 34 years
Surname2 Name2 1964-05-05 40 years 11 mons 30 days 23:00:00

SQL used:

SELECT famname, firstname, birth_date, age( DATE '2005-05-05'::date,
birth_date::date )
FROM addresses
WHERE
EXTRACT ( day FROM timestamp '2005-05-05') = EXTRACT ( day FROM
birth_date)
AND
EXTRACT ( month FROM timestamp '2005-05-05') = EXTRACT ( month FROM
birth_date);

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: J.Simon Goodall (#1)
Re: BUG #1637: age() function is giving different results

"J.Simon Goodall" <simon@EstanciaViamonte.com> writes:

With the same query the age function is giving me two results, one as it
should be (34 years) and the other one is off by 1 hour,

Daylight-savings time shift?

regards, tom lane

#3Andrew - Supernews
andrew+nonews@supernews.com
In reply to: J.Simon Goodall (#1)
Re: BUG #1637: age() function is giving different results

On 2005-04-28, "J.Simon Goodall" <simon@EstanciaViamonte.com> wrote:

The following bug has been logged online:

Bug reference: 1637
Logged by: J.Simon Goodall
Email address: simon@EstanciaViamonte.com
PostgreSQL version: 7.4.2
Operating system: Linux
Description: age() function is giving different results
Details:

With the same query the age function is giving me two results, one as it
should be (34 years) and the other one is off by 1 hour, the query is a
single one so the results I asume should be the same.

I have tried finding the age(,) function in the source but had no luck.

I did some analysis for this one when it was mentioned just now in the irc
chan. I can reproduce on 7.4.x as follows:

test=> set timezone to 'America/Buenos_Aires';
SET
test=> select age(date '2005-05-05', date '1964-05-05');
age
-----------------------------------
40 years 11 mons 30 days 23:00:00
(1 row)

Doesn't occur with any other timezones I tried, also doesn't occur if
you explicitly cast the dates to timestamp (not timestamptz) which
causes the other version of age() to be used instead. So this is obviously
a timezone-related issue. Couldn't reproduce on 8.0.1 with any timezone.

--
Andrew, Supernews
http://www.supernews.com - individual and corporate NNTP services

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew - Supernews (#3)
Re: BUG #1637: age() function is giving different results

Andrew - Supernews <andrew+nonews@supernews.com> writes:

I did some analysis for this one when it was mentioned just now in the irc
chan. I can reproduce on 7.4.x as follows:

test=> set timezone to 'America/Buenos_Aires';
SET
test=> select age(date '2005-05-05', date '1964-05-05');
age
-----------------------------------
40 years 11 mons 30 days 23:00:00
(1 row)

Not for me --- I get "41 years" for that case. Since 7.4 depends on the
OS' timezone code, this is presumably OS-dependent. I'm using Fedora
Core 3, which has ... hmm ...

$ rpm -qf /usr/share/zoneinfo/America/Buenos_Aires
tzdata-2005f-1.fc3

... a pretty recent zoneinfo package. What's yours?

regards, tom lane

#5Andrew - Supernews
andrew+nonews@supernews.com
In reply to: J.Simon Goodall (#1)
Re: BUG #1637: age() function is giving different results

On 2005-04-29, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Andrew - Supernews <andrew+nonews@supernews.com> writes:

I did some analysis for this one when it was mentioned just now in the irc
chan. I can reproduce on 7.4.x as follows:

test=> set timezone to 'America/Buenos_Aires';
SET
test=> select age(date '2005-05-05', date '1964-05-05');
age
-----------------------------------
40 years 11 mons 30 days 23:00:00
(1 row)

Not for me --- I get "41 years" for that case. Since 7.4 depends on the
OS' timezone code, this is presumably OS-dependent. I'm using Fedora
Core 3, which has ... hmm ...

$ rpm -qf /usr/share/zoneinfo/America/Buenos_Aires
tzdata-2005f-1.fc3

... a pretty recent zoneinfo package. What's yours?

I tested on a couple of FreeBSD 4.10 (approximately) builds, from May and
September last year. The original poster was on Linux I believe.

Looking at the definition of America/Buenos_Aires, which is exactly the
same in my FreeBSD sources and in the zoneinfo source supplied in pg 8.0.1,
it looks as though Argentina did indeed change timezones in 1969, so the
actual elapsed time between '2005-05-05 00:00:00' and '1964-05-05 00:00:00'
in that timezone is in fact 14974 days 23 hours.

Looking more closely, the significant thing seems to be that neither of my
7.4 servers is on 7.4.7, and this seems to have been fixed there (in response
to bug 1331).

--
Andrew, Supernews
http://www.supernews.com - individual and corporate NNTP services

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew - Supernews (#5)
Re: BUG #1637: age() function is giving different results

Andrew - Supernews <andrew+nonews@supernews.com> writes:

Looking more closely, the significant thing seems to be that neither of my
7.4 servers is on 7.4.7, and this seems to have been fixed there (in response
to bug 1331).

1332 you mean. Yeah, I was testing on 7.4.7, so this is almost
certainly a duplicate of 1332.

2004-12-01 14:57 tgl

* src/backend/utils/adt/timestamp.c (REL7_4_STABLE): Fix
timestamptz_age() to do calculation in local timezone not GMT, per
bug 1332.

regards, tom lane