Re: [PORTS] Port Bug Report: pg_dump -d database >unload.file; cat unload.file|psql database ARE NOT EQUAL - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: [PORTS] Port Bug Report: pg_dump -d database >unload.file; cat unload.file|psql database ARE NOT EQUAL
Date
Msg-id 199803282016.PAA17441@candle.pha.pa.us
Whole thread Raw
List pgsql-hackers
>   PostgreSQL version : 6.3-980326
> Problem Description:
> --------------------
> Parser generated error message when script was inserting
> a value equal -1 into column of float8 type.
> If exchange -1 to -1.0 - no errors.
>
> --------------------------------------------------------------------------
>
> Test Case:
> ----------
> create table templ_arg(accii int2,type char,sign float8);
> create table a1 () inherits (templ_arg);
> insert into a1 values (9999,'a',1); -- working;
> insert into a1 values (9999,'a',-1); -- ERROR;
> insert into a1 values (9999,'a',-1.0); --working
Yep, it is a bug, and I will add it to the TODO list.  In float8out, we
use:
    printf("%.*g", CONST, value)

and the %g is causing it to print as:

             equal to the precision.  Trailing zeros are removed from the
             fractional part of the result; a decimal point appears only if it
             is followed by at least one digit.

Now, what we should probably be doing is to allow -1 (without decimal
point) to be promoted to float8 in the INSERT, and I think we are going
to be able to do that in 6.4.

I know this is crummy, but I can't even think of a workaround for it.


--
Bruce Momjian                          |  830 Blythe Avenue
maillist@candle.pha.pa.us              |  Drexel Hill, Pennsylvania 19026
  +  If your life is a hard drive,     |  (610) 353-9879(w)
  +  Christ can be your backup.        |  (610) 853-3000(h)

pgsql-hackers by date:

Previous
From: "Meskes, Michael"
Date:
Subject: RE: [HACKERS] Going on vacation
Next
From: Bruce Momjian
Date:
Subject: Re: [PORTS] Port Bug Report: pg_dump -d database >unload.file; cat unload.file|psql database ARE NOT EQUAL