Обсуждение: Odd sum() problem in 7.2.2

Поиск
Список
Период
Сортировка

Odd sum() problem in 7.2.2

От
andreas@sparcy.net (Andreas Forsgren)
Дата:
I'm stuck. The following two snippets gives me two different results,
and I can't figure out why;

1) select abs(0 + int4(sum((int4(ss7_rel_timestamp_sec) - int4
   (start_timestamp_sec)) / 60))) from session_billed where (b_nr
   like '12345678%' and datetime(ss7_rel_timestamp_sec) >=
   '2002-09-01' and datetime(ss7_rel_timestamp_sec) < '2002-10-01'
   and session_status_reached >= 20);

   = 5845507 and count(*) [1] gives me: 286109

2) select int4(sum(ss7_rel_timestamp_sec - start_timestamp_sec) / 60)
   from session_billed where b_nr like '12345678%' and
   ss7_rel_timestamp_sec >= '2002-09-01' and ss7_rel_timestamp_sec
   < '2002-10-01' and session_status_reached >= 20;

   = 5986420 and count(*) [1] gives me: 286304

 ss7_rel_timestamp_sec = abstime
   start_timestamp_sec = abstime
                  b_nr = character varying(32)
session_status_reached = integer

There have been no changes in the table between these two queries.
PostgreSQL 7.2.2 on i686-pc-linux-gnu, compiled by GCC 2.95.4.

[1] select count(*) from session_billed where <rest of original query>

--
This is your life, and it's ending one minute at a time.

Re: Odd sum() problem in 7.2.2

От
Richard Huxton
Дата:
On Friday 04 Oct 2002 11:37 am, Andreas Forsgren wrote:
> I'm stuck. The following two snippets gives me two different results,
> and I can't figure out why;

>    = 5845507 and count(*) [1] gives me: 286109
>    = 5986420 and count(*) [1] gives me: 286304

Nothing changed but different numbers of rows returned? Best look at the where
clause...

> where (b_nr
>    like '12345678%' and datetime(ss7_rel_timestamp_sec) >=
>    '2002-09-01' and datetime(ss7_rel_timestamp_sec) < '2002-10-01'
>    and session_status_reached >= 20);
>
> where b_nr like '12345678%' and
>    ss7_rel_timestamp_sec >= '2002-09-01' and ss7_rel_timestamp_sec
>    < '2002-10-01' and session_status_reached >= 20;

Hmm - "datetime" - tell me sir, are you in a timezone other than Greenwich and
if you specify timezones explicitly does the problem go away?

--
  Richard Huxton

Re: Odd sum() problem in 7.2.2

От
Tom Lane
Дата:
Richard Huxton <dev@archonet.com> writes:
> Nothing changed but different numbers of rows returned? Best look at the where
> clause...

> Hmm - "datetime" - tell me sir, are you in a timezone other than Greenwich and
> if you specify timezones explicitly does the problem go away?

It looks to me like 7.2 has a bug in
abstime-to-timestamp-without-time-zone conversion, which is what that
datetime() thing is invoking.  In 7.2.3, running in US EST5EDT zone,
I see:

regression=# select abstime '2002-09-01';
        abstime
------------------------
 2002-09-01 00:00:00-04
(1 row)

regression=# select (abstime '2002-09-01')::timestamp without time zone;
      timestamp
---------------------
 2002-09-01 08:00:00
            ^^ !!!
(1 row)

regression=# select (abstime '2002-09-01')::timestamp with time zone;
      timestamptz
------------------------
 2002-09-01 00:00:00-04
(1 row)


In 7.3beta I get more sensible results:

regression=# select (abstime '2002-09-01')::timestamp without time zone;
      timestamp
---------------------
 2002-09-01 00:00:00
(1 row)

so I'd say Thomas fixed the bug while he was working on the datetime
types this summer ...

            regards, tom lane