Обсуждение: BUG #1699: Invalid timestamps with timezone and interger timestamps

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

BUG #1699: Invalid timestamps with timezone and interger timestamps

От
"Guillaume Beaudoin"
Дата:
The following bug has been logged online:

Bug reference:      1699
Logged by:          Guillaume Beaudoin
Email address:      guillaume.beaudoin@bdeb.qc.ca
PostgreSQL version: 7.4.8
Operating system:   Debian GNU/Linux
Description:        Invalid timestamps with timezone and interger timestamps
Details:

SET TIME ZONE INTERVAL '-05:00' HOUR TO MINUTE;
SELECT NOW();

will report something like:

                 now
--------------------------------------
 1979-06-06 09:42:49.854158-227814:06
(1 row)


Please check http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=311533 for
more informations about this.

Regards,

Re: BUG #1699: Invalid timestamps with timezone and interger timestamps

От
Tom Lane
Дата:
"Guillaume Beaudoin" <guillaume.beaudoin@bdeb.qc.ca> writes:
> Description:        Invalid timestamps with timezone and interger timestamps

Fixed for next releases --- thanks for the report!
The 7.4-branch patch is

Index: variable.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/commands/variable.c,v
retrieving revision 1.88.2.1
diff -c -r1.88.2.1 variable.c
*** variable.c    11 Aug 2004 21:10:50 -0000    1.88.2.1
--- variable.c    5 Jun 2005 01:39:03 -0000
***************
*** 454,460 ****
--- 454,464 ----
          if (doit)
          {
              /* Here we change from SQL to Unix sign convention */
+ #ifdef HAVE_INT64_TIMESTAMP
+             CTimeZone = -(interval->time / INT64CONST(1000000));
+ #else
              CTimeZone = -interval->time;
+ #endif
              HasCTZSet = true;
          }
          pfree(interval);
***************
*** 608,614 ****
--- 612,622 ----
          Interval    interval;

          interval.month = 0;
+ #ifdef HAVE_INT64_TIMESTAMP
+         interval.time = -(CTimeZone * INT64CONST(1000000));
+ #else
          interval.time = -CTimeZone;
+ #endif

          tzn = DatumGetCString(DirectFunctionCall1(interval_out,
                                            IntervalPGetDatum(&interval)));


            regards, tom lane