From: | "Ezequiel Tolnay" <mail(at)etolnay(dot)com(dot)ar> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #1587: Unexpected behaviour of numeric datatype when mixed with float4, domains and plpgsql variables |
Date: | 2005-04-07 09:06:53 |
Message-ID: | 20050407090653.B9486F0C45@svr2.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged online:
Bug reference: 1587
Logged by: Ezequiel Tolnay
Email address: mail(at)etolnay(dot)com(dot)ar
PostgreSQL version: 8.0.1
Operating system: Windows XP Advanced Server
Description: Unexpected behaviour of numeric datatype when mixed with
float4, domains and plpgsql variables
Details:
Tables with columns specified as numeric through the use of a domain are
capable of containing values with a higher precision than allowed.
The following snippet can be used to reproduce the error (run each step
sequencially and observe results):
--step 1: direct execution on base type
SELECT 92::numeric(15,4) * 0.2::float4;
--step 2: using a function variable and a domain
CREATE DOMAIN currency AS numeric(15,4);
CREATE TABLE test (id serial, amt currency);
CREATE FUNCTION f_test(currency) RETURNS currency AS $$
DECLARE n currency;
BEGIN n := $1 * 0.2::float4;
INSERT INTO test (amt) VALUES (n); RETURN n;
END $$ LANGUAGE PLPGSQL;
SELECT f_test(92);
--step 3: wrong precision stored in the table!
SELECT id, amt, amt::currency as amt_still_bad,
amt::numeric(15,4) as amt_casted_as_base,
amt::float::currency as amt_casted_back_n_forth
FROM test;
From | Date | Subject | |
---|---|---|---|
Next Message | Lionel Bouton | 2005-04-07 09:14:30 | BUG #1588: pg_autovacuum sleep parameter overflow |
Previous Message | Neil Conway | 2005-04-07 05:17:30 | Re: float conversion / presentation problem ? |