I've applied this patch.

                        regards, tom lane

Index: datetime.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/utils/adt/datetime.c,v
retrieving revision 1.137
diff -c -r1.137 datetime.c
*** datetime.c  11 Jan 2005 18:33:45 -0000      1.137
--- datetime.c  20 Apr 2005 17:09:57 -0000
***************
*** 3883,3899 ****
                        /* fractional seconds? */
                        if (fsec != 0)
                        {
  #ifdef HAVE_INT64_TIMESTAMP
                                if (is_before || ((!is_nonzero) && (tm->tm_sec 
< 0)))
                                        tm->tm_sec = -tm->tm_sec;
                                sprintf(cp, "%s%d.%02d secs", (is_nonzero ? " " 
: ""),
!                                               tm->tm_sec, (((int) fsec) / 
10000));
                                cp += strlen(cp);
-                               if (!is_nonzero)
-                                       is_before = (fsec < 0);
  #else
-                               fsec_t          sec;
- 
                                fsec += tm->tm_sec;
                                sec = fsec;
                                if (is_before || ((!is_nonzero) && (fsec < 0)))
--- 3883,3907 ----
                        /* fractional seconds? */
                        if (fsec != 0)
                        {
+                               fsec_t          sec;
+ 
  #ifdef HAVE_INT64_TIMESTAMP
+                               sec = fsec;
                                if (is_before || ((!is_nonzero) && (tm->tm_sec 
< 0)))
+                               {
                                        tm->tm_sec = -tm->tm_sec;
+                                       sec = -sec;
+                                       is_before = TRUE;
+                               }
+                               else if ((!is_nonzero) && (tm->tm_sec == 0) && 
(fsec < 0))
+                               {
+                                       sec = -sec;
+                                       is_before = TRUE;
+                               }
                                sprintf(cp, "%s%d.%02d secs", (is_nonzero ? " " 
: ""),
!                                               tm->tm_sec, (((int) sec) / 
10000));
                                cp += strlen(cp);
  #else
                                fsec += tm->tm_sec;
                                sec = fsec;
                                if (is_before || ((!is_nonzero) && (fsec < 0)))
***************
*** 3905,3913 ****
                                        is_before = (fsec < 0);
  #endif
                                is_nonzero = TRUE;
- 
-                               /* otherwise, integer seconds only? */
                        }
                        else if (tm->tm_sec != 0)
                        {
                                int                     sec = tm->tm_sec;
--- 3913,3920 ----
                                        is_before = (fsec < 0);
  #endif
                                is_nonzero = TRUE;
                        }
+                       /* otherwise, integer seconds only? */
                        else if (tm->tm_sec != 0)
                        {
                                int                     sec = tm->tm_sec;

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to