BUG #6236: Query execution bug

Started by Boris Matkovover 14 years ago2 messagesbugs
Jump to latest
#1Boris Matkov
borism@devart.com

The following bug has been logged online:

Bug reference: 6236
Logged by: Boris Matkov
Email address: borism@devart.com
PostgreSQL version: 9.0.0.1
Operating system: Windows
Description: Query execution bug
Details:

INSERT INTO btest0 (id, name) VALUES ((SELECT DISTINCT id FROM btest0 WHERE
name = $1 LIMIT 1), $1) - was executed successfully

INSERT INTO btest0 (name,id) VALUES ($1, (SELECT DISTINCT id FROM btest0
WHERE name = $1 LIMIT 1)) - I got error:
---------------------------
inconsistent types deduced for parameter $1
---------------------------

Script for the btest0 table creating:

CREATE TABLE btest0
(
id integer NOT NULL,
name character varying(50) NOT NULL,
value double precision,
CONSTRAINT pk_btest0 PRIMARY KEY (id)
)

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Boris Matkov (#1)
Re: BUG #6236: Query execution bug

"Boris Matkov" <borism@devart.com> writes:

INSERT INTO btest0 (id, name) VALUES ((SELECT DISTINCT id FROM btest0 WHERE
name = $1 LIMIT 1), $1) - was executed successfully

INSERT INTO btest0 (name,id) VALUES ($1, (SELECT DISTINCT id FROM btest0
WHERE name = $1 LIMIT 1)) - I got error:
---------------------------
inconsistent types deduced for parameter $1
---------------------------

Script for the btest0 table creating:

CREATE TABLE btest0
(
id integer NOT NULL,
name character varying(50) NOT NULL,
value double precision,
CONSTRAINT pk_btest0 PRIMARY KEY (id)
)

It may be annoying, but it's not a bug. The equality test uses the
"text = text" operator, so if that's seen first then the parameter gets
resolved as text. You'd be better off to declare the type of the
parameter instead of assuming that it will always be resolved the way
you want ... but if you can't be bothered to do that, using text instead
of varchar as the column type would avoid most of the cases where you'll
see something like this.

regards, tom lane