Thread: Function works in 8.4 but not in 9.0 beta2 "ERROR: structure of query does not match function result type"
Function works in 8.4 but not in 9.0 beta2 "ERROR: structure of query does not match function result type"
From
Marcel Asio
Date:
Hi I've started testing our applications against PostgreSQL 9.0 beta2 and found that this function now does not work anymore(rewritten to be as small and anonymous as possible) CREATE TYPE test_type AS( product text, amount numeric(30,4) ); CREATE FUNCTION test_func() RETURNS SETOF test_type AS $$ BEGIN RETURN QUERY SELECT 'test'::text, 30.2::numeric; END; $$ LANGUAGE plpgsql STABLE; Output in postgresql 8.4: postgres=# SELECT version(); version ---------------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 8.4.1 on i386-apple-darwin10.0.0, compiled by GCC i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646), 64-bit (1 row) postgres=# SELECT test_func(); test_func ------------- (test,30.2) (1 row) postgres=# And in postgresql 9.0 beta2 version --------------------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 9.0beta2 on x86_64-apple-darwin10.4.0, compiled by GCC i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5659), 64-bit (1 row) postgres=# \set VERBOSITY verbose postgres=# SELECT test_func(); ERROR: 42804: structure of query does not match function result type DETAIL: Returned type numeric does not match expected type numeric(30,4) in column 2. CONTEXT: PL/pgSQL function "test_func" line 2 at RETURN QUERY LOCATION: convert_tuples_by_position, tupconvert.c:112 postgres=# Currently unning Mac OS X 10.6 Marcel Asio Network & System Administrator Redbet Technology Mobile: +46 (0)709 13 04 01 Work: +46 (0)8 12 09 99 41 marcel.asio@redbet.com This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden.
Re: Function works in 8.4 but not in 9.0 beta2 "ERROR: structure of query does not match function result type"
From
Tom Lane
Date:
Marcel Asio <marcel.asio@redbet.com> writes: > I've started testing our applications against PostgreSQL 9.0 beta2 and found > that this function now does not work anymore(rewritten to be as small and > anonymous as possible) > CREATE TYPE test_type AS( > product text, > amount numeric(30,4) > ); > CREATE FUNCTION test_func() RETURNS SETOF test_type AS $$ > BEGIN > RETURN QUERY SELECT 'test'::text, 30.2::numeric; > END; > $$ LANGUAGE plpgsql STABLE; You need to actually coerce the 30.2 to numeric(30,4), not just numeric. The former behavior wasn't self-consistent. regards, tom lane
Re: Function works in 8.4 but not in 9.0 beta2 "ERROR: structure of query does not match function result type"
From
Marcel Asio
Date:
Hi Tom, Yes I managed to figured that out, but when was this changed?=20 It was working in 8.4 but not 9.0 and I could not find anything about this = in the release notes. On Jun 29, 2010, at 17:32 , Tom Lane wrote: > Marcel Asio <marcel.asio@redbet.com> writes: >> I've started testing our applications against PostgreSQL 9.0 beta2 and f= ound >> that this function now does not work anymore(rewritten to be as small and >> anonymous as possible) >> CREATE TYPE test_type AS( >> product text, >> amount numeric(30,4) >> ); >> CREATE FUNCTION test_func() RETURNS SETOF test_type AS $$ >> BEGIN >> RETURN QUERY SELECT 'test'::text, 30.2::numeric; >> END; >> $$ LANGUAGE plpgsql STABLE; >=20 > You need to actually coerce the 30.2 to numeric(30,4), not just numeric. > The former behavior wasn't self-consistent. >=20 > regards, tom lane Regards Marcel Asio Network & System Administrator Redbet Technology Mobile: +46 (0)709 13 04 01 Work: +46 (0)8 12 09 99 41 marcel.asio@redbet.com This e-mail may contain confidential and/or privileged information. If you = are not the intended recipient (or have received this e-mail in error) plea= se notify the sender immediately and destroy this e-mail. Any unauthorised = copying, disclosure or distribution of the material in this e-mail is stric= tly forbidden.
Re: Function works in 8.4 but not in 9.0 beta2 "ERROR: structure of query does not match function result type"
From
Tom Lane
Date:
Marcel Asio <marcel.asio@redbet.com> writes: > Yes I managed to figured that out, but when was this changed? > It was working in 8.4 but not 9.0 and I could not find anything about this in the release notes. The 9.0 release notes are not really up to snuff yet :-(. The only thing in the notes about it is "Allow PL/pgSQL to handle row types with dropped columns" which is a rather inadequate description of the consequences of that patch. We're probably going to need to call it out as an incompatibility. regards, tom lane
Re: Function works in 8.4 but not in 9.0 beta2 "ERROR: structure of query does not match function result type"
From
Marcel Asio
Date:
I was suspecting that it was incompatibility that hadn't been documented correctly, just wanted to make sure that this was the case. It probably should go into the release notes too since it is bound to affect others.... Thankfully Marcel Asio Network & System Administrator Redbet Technology Mobile: +46 (0)709 13 04 01 Work: +46 (0)8 12 09 99 41 marcel.asio@redbet.com This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden. On 29 June 2010 19:38, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Marcel Asio <marcel.asio@redbet.com> writes: > > Yes I managed to figured that out, but when was this changed? > > > It was working in 8.4 but not 9.0 and I could not find anything about > this in the release notes. > > The 9.0 release notes are not really up to snuff yet :-(. The only > thing in the notes about it is "Allow PL/pgSQL to handle row types with > dropped columns" which is a rather inadequate description of the > consequences of that patch. We're probably going to need to call it out > as an incompatibility. > > regards, tom lane >
Re: Function works in 8.4 but not in 9.0 beta2 "ERROR: structure of query does not match function result type"
From
Tom Lane
Date:
Marcel Asio <marcel.asio@redbet.com> writes: > I was suspecting that it was incompatibility that hadn't been documented > correctly, just wanted to make sure that this was the case. > It probably should go into the release notes too since it is bound to affect > others.... Yeah, done. regards, tom lane
Re: Function works in 8.4 but not in 9.0 beta2 "ERROR: structure of query does not match function result type"
From
Marcel Asio
Date:
Awesome Thanks for the help Marcel Asio Network & System Administrator Redbet Technology Mobile: +46 (0)709 13 04 01 Work: +46 (0)8 12 09 99 41 marcel.asio@redbet.com This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and destroy this e-mail. Any unauthorised copying, disclosure or distribution of the material in this e-mail is strictly forbidden. On 29 June 2010 23:21, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Marcel Asio <marcel.asio@redbet.com> writes: > > I was suspecting that it was incompatibility that hadn't been documented > > correctly, just wanted to make sure that this was the case. > > > It probably should go into the release notes too since it is bound to > affect > > others.... > > Yeah, done. > > regards, tom lane >