Thread: what exactly is a query structure?

what exactly is a query structure?

From
silly sad
Date:
hello.

Postgresql 8.3.9

CREATE TYPE usr_secrets AS (login TEXT, pass TEXT, shop_pass TEXT);

CREATE OR REPLACE FUNCTION get_noobs () RETURNS SETOF usr_secrets AS $$
BEGIN  RETURN QUERY SELECT login, '*' as pass, shop_pass FROM noob;  RETURN;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

SELECT * from get_noobs();

And we have the following error

ERROR:  structure of query does not match function result type


Re: what exactly is a query structure?

From
"A. Kretschmer"
Date:
In response to silly sad :
> hello.
> 
> Postgresql 8.3.9
> 
> CREATE TYPE usr_secrets AS (login TEXT, pass TEXT, shop_pass TEXT);
> 
> CREATE OR REPLACE FUNCTION get_noobs () RETURNS SETOF usr_secrets AS $$
> BEGIN
>   RETURN QUERY SELECT login, '*' as pass, shop_pass FROM noob;
>   RETURN;
> END;
> $$ LANGUAGE plpgsql SECURITY DEFINER;
> 
> SELECT * from get_noobs();
> 
> And we have the following error
> 
> ERROR:  structure of query does not match function result type

Wild guess: your table noob has an other structure as expected, in
particular login and/or shop_pass are not TEXT.


Andreas
-- 
Andreas Kretschmer
Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: -> Header)
GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431  2EB0 389D 1DC2 3172 0C99


Re: what exactly is a query structure?

From
silly sad
Date:
On 02/26/10 10:19, A. Kretschmer wrote:
> In response to silly sad :
>> hello.
>>
>> Postgresql 8.3.9
>>
>> CREATE TYPE usr_secrets AS (login TEXT, pass TEXT, shop_pass TEXT);
>>
>> CREATE OR REPLACE FUNCTION get_noobs () RETURNS SETOF usr_secrets AS $$
>> BEGIN
>>    RETURN QUERY SELECT login, '*' as pass, shop_pass FROM noob;
>>    RETURN;
>> END;
>> $$ LANGUAGE plpgsql SECURITY DEFINER;
>>
>> SELECT * from get_noobs();
>>
>> And we have the following error
>>
>> ERROR:  structure of query does not match function result type
>
> Wild guess: your table noob has an other structure as expected, in
> particular login and/or shop_pass are not TEXT.

they are texts.

if we substitute constant '*' with a text field or even a subselect, the 
error disappear.




Re: what exactly is a query structure?

From
silly sad
Date:
On 02/26/10 09:50, silly sad wrote:
> hello.
>
> Postgresql 8.3.9
>
> CREATE TYPE usr_secrets AS (login TEXT, pass TEXT, shop_pass TEXT);
>
> CREATE OR REPLACE FUNCTION get_noobs () RETURNS SETOF usr_secrets AS $$
> BEGIN
> RETURN QUERY SELECT login, '*' as pass, shop_pass FROM noob;
> RETURN;
> END;
> $$ LANGUAGE plpgsql SECURITY DEFINER;
>
> SELECT * from get_noobs();
>
> And we have the following error
>
> ERROR: structure of query does not match function result type
>


my own wild guess:
string constant '*' is of type "unknown"



Re: what exactly is a query structure?

From
"A. Kretschmer"
Date:
In response to silly sad :
> 
> my own wild guess:
> string constant '*' is of type "unknown"

Maybe. Add a explicit cast, for instance '*'::text

Andreas
-- 
Andreas Kretschmer
Kontakt:  Heynitz: 035242/47150,   D1: 0160/7141639 (mehr: -> Header)
GnuPG: 0x31720C99, 1006 CCB4 A326 1D42 6431  2EB0 389D 1DC2 3172 0C99


Re: what exactly is a query structure?

From
Tom Lane
Date:
"A. Kretschmer" <andreas.kretschmer@schollglas.com> writes:
> In response to silly sad :
>> my own wild guess:
>> string constant '*' is of type "unknown"

> Maybe. Add a explicit cast, for instance '*'::text

Definitely.  More recent versions of PG provide a more explicit error
message:

regression=# SELECT * from get_noobs();
ERROR:  structure of query does not match function result type
DETAIL:  Returned type unknown does not match expected type text in column "pass".
CONTEXT:  PL/pgSQL function "get_noobs" line 2 at RETURN QUERY
        regards, tom lane