Thread: now() and date_trunc() apparently corrupting data

now() and date_trunc() apparently corrupting data

From
Oliver Elphick
Date:
This is with -configure -enable-integer-datetime in 7.3.2, i386 Linux
platform.  Is anyone else seeing this?  If so, does it happen without
--enable-integer-datetime?

        junk=# \d mt
                    Table "public.mt"
         Column |        Type         | Modifiers
        --------+---------------------+-----------
         v      | time with time zone |

        junk=# delete from mt;
        DELETE 4
        junk=# insert into mt values ('06:25');
        INSERT 12554249 1
        junk=# select * from mt;
              v
        -------------
         06:25:00+00
        (1 row)

        junk=# select * from mt where v < now();
              v
        -------------
         00:00:00+00              <-- data has been changed...
        (1 row)

        junk=# select * from mt;
              v
        -------------
         00:00:00+00              <-- ...permanently, it seems.
        (1 row)

The same seems to happen with date_trunc()

--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight, UK                             http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "Who is like Thee among the gods, O Lord? Who is like
      Thee, majestic in holiness, awesome in praises,
      working wonders?"
                              Exodus 15:11

Re: now() and date_trunc() apparently corrupting data

From
Tom Lane
Date:
Oliver Elphick <olly@lfix.co.uk> writes:
> This is with -configure -enable-integer-datetime in 7.3.2, i386 Linux
> platform.  Is anyone else seeing this?  If so, does it happen without
> --enable-integer-datetime?

>         junk=# select * from mt;
>               v
>         -------------
>          06:25:00+00
>         (1 row)

>         junk=# select * from mt where v < now();
>               v
>         -------------
>          00:00:00+00              <-- data has been changed...
>         (1 row)


I think this is explained by this bug:

2003-02-13 12:04  tgl

    * src/backend/utils/adt/date.c (REL7_3_STABLE): Prevent timetz2tm()
    from scribbling on its input in HAVE_INT64_TIMESTAMP case.

Can you try it with CVS tip (either HEAD or REL7_3_STABLE branch)?

            regards, tom lane

Re: now() and date_trunc() apparently corrupting data

From
Oliver Elphick
Date:
On Thu, 2003-03-13 at 23:06, Tom Lane wrote:
> Oliver Elphick <olly@lfix.co.uk> writes:
> > This is with -configure -enable-integer-datetime in 7.3.2, i386 Linux
> > platform.  Is anyone else seeing this?  If so, does it happen without
> > --enable-integer-datetime?
>
> >         junk=# select * from mt;
> >               v
> >         --
> >          06:25:00+00
> >         (1 row)
>
> >         junk=# select * from mt where v < now();
> >               v
> >         --
> >          00:00:00+00              <-- data has been changed...
> >         (1 row)
>
>
> I think this is explained by this bug:
>
> 2003-02-13 12:04  tgl
>
>     * src/backend/utils/adt/date.c (REL7_3_STABLE): Prevent timetz2tm()
>     from scribbling on its input in HAVE_INT64_TIMESTAMP case.
>
> Can you try it with CVS tip (either HEAD or REL7_3_STABLE branch)?

With HEAD it's OK -- no bug.

Applying that patch to 7.3.2 fixes it there a well.  Thanks.



--
Oliver Elphick                                Oliver.Elphick@lfix.co.uk
Isle of Wight, UK                             http://www.lfix.co.uk/oliver
GPG: 1024D/3E1D0C1C: CA12 09E0 E8D5 8870 5839  932A 614D 4C34 3E1D 0C1C
                 ========================================
     "Let your light so shine before men, that they may see
      your good works, and glorify your Father which is in
      heaven."         Matthew 5:16