| From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
|---|---|
| To: | Dan Sugalski <dan(at)sidhe(dot)org> |
| Cc: | pgsql-general(at)postgresql(dot)org |
| Subject: | Re: Arrays, placeholders, and column types |
| Date: | 2004-10-25 18:37:45 |
| Message-ID: | 22279.1098729465@sss.pgh.pa.us |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-general |
Dan Sugalski <dan(at)sidhe(dot)org> writes:
> I've got some SQL statements that I'm issuing from my app using the
> PQexecParams() C call. All the parameters are passed in as literal
> string parameters (that is, the paramTypes array entry for each
> placeholder is set to 0) letting the engine convert.
> INSERT INTO foo (bar, baz, xyzzy) VALUES ($1, $2, ARRAY[$3, $4, $5])
> DB error is: ERROR: column "xyzzy" is of type numeric[] but
> expression is of type text[]
The ARRAY[] construct forces determination of the array type, and it
defaults to text[] in the absence of any type information from the array
components. (There's been some discussion of allowing the array type
determination to be postponed further, but we haven't thought of a good
way to do it yet.) What you'll need to do is specify at least one of
the array elements to be "numeric", either via paramTypes or with a cast
in the SQL command:
INSERT INTO foo (bar, baz, xyzzy) VALUES ($1, $2, ARRAY[$3::numeric, $4, $5])
regards, tom lane
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Marc G. Fournier | 2004-10-25 18:38:06 | Re: The reasoning behind having several features outside |
| Previous Message | Joshua D. Drake | 2004-10-25 18:28:21 | Re: The reasoning behind having several features outside |