After trying to upgrade PostgreSQL from 6.5.3 to 7.0.2 I got into trouble with float4.
I'll try to explain it by example.
postgres@lee: ~$ createdb -E LATIN1 -e testfloat
CREATE DATABASE "testfloat" WITH ENCODING = 'LATIN1'
CREATE DATABASE
postgres@lee: ~$ psql testfloat
testfloat=# create table tftbl (f1 float4, f2 float4);
CREATE
testfloat=# insert into tftbl values (10, 20);
INSERT 212682 1
testfloat=# select * from tftbl;
f1 | f2
----+----
10 | 20
(1 row)
testfloat=# update tftbl set f1=10.1 where f1=10 and f2=20;
UPDATE 1
testfloat=# update tftbl set f2=20.2 where f1=10.1 and f2=20;
UPDATE 0
testfloat=# select * from tftbl;
f1 | f2
------+----
10.1 | 20
(1 row)
testfloat=# update tftbl set f2=20.2 where f1=float4(10.1) and f2=20;
UPDATE 1
testfloat=# select * from tftbl;
f1 | f2
------+------
10.1 | 20.2
(1 row)
In my real client application (Windows 98, Borland C++ Builder 5.0, BDE 5.1.1.1,
PostODBC 06.50.0000) I cannot in all cases use expressions like f1=float4(10.1)
instead of simple f1=10.1 because BDE and PostODBC construct queries by themselves
when I, for example, update tables from BCB components (BDE complains, that another
user changed the record, while I am the only user at the time). They use f1=10.1-like
format. With PostgeSQL 6.5.3 I have no problem of the kind.
PostgreSQL lives in Debian Linux (woody), kernel 2.2.14, libc6 2.1.3, locales 2.1.3,
here is output of locale:
lee:~# locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
Any help, tip or hint would be appreciated.
Thank you, Mikhail.