BUG #8393: "ERROR: failed to locate grouping columns" on grouping by varchar returned from function

Started by Evan Martinover 12 years ago2 messagesbugs
Jump to latest
#1Evan Martin
postgresql@realityexists.net

The following bug has been logged on the website:

Bug reference: 8393
Logged by: Evan Martin
Email address: postgresql@realityexists.net
PostgreSQL version: 9.2.4
Operating system: Windows 7 x64 SP1
Description:

version(): PostgreSQL 9.2.4, compiled by Visual C++ build 1600, 64-bit

Run the following:

CREATE OR REPLACE FUNCTION test_group_by()
RETURNS TABLE (my_col varchar(5))
AS $BODY$
SELECT 'hello'::varchar(5);
$BODY$ LANGUAGE sql STABLE;

SELECT my_col
FROM test_group_by()
GROUP BY 1;

Expected result:

'hello'

Actual result:

ERROR: failed to locate grouping columns

Interestingly, if the function is marked "VOLATILE" it works. Casting the
result to "text" also makes it work.

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Evan Martin (#1)
Re: BUG #8393: "ERROR: failed to locate grouping columns" on grouping by varchar returned from function

postgresql@realityexists.net writes:

CREATE OR REPLACE FUNCTION test_group_by()
RETURNS TABLE (my_col varchar(5))
AS $BODY$
SELECT 'hello'::varchar(5);
$BODY$ LANGUAGE sql STABLE;

SELECT my_col
FROM test_group_by()
GROUP BY 1;

ERROR: failed to locate grouping columns

Fixed in our git tree; thanks for the report!

As a workaround in this particular case, you could just not bother with
marking the specific length of the varchar constant. The function
definition essentially ignores the length, storing only "varchar" as the
result column type, and it's the discrepancy between that and the
declaration of the constant that's tickling the bug.

regards, tom lane

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs