The following bug has been logged online:
Bug reference: 1702
Logged by: Jan Behrens
Email address: jan@monso.de
PostgreSQL version: 8.0.3
Operating system: NetBSD
Description: Function returning nested composite types
Details:
Following input:
CREATE TYPE test1 AS (a text, b text);
CREATE TYPE test2 AS (c test1, d test1);
CREATE FUNCTION test3 () RETURNS test2
LANGUAGE 'plpgsql' AS $$
DECLARE
result test2;
BEGIN
result := ROW (ROW ('1', '2'), ROW ('3', '4'));
RETURN result;
END; $$;
SELECT * FROM test3();
generates the following error:
ERROR: row not compatible with its own tupdesc
CONTEXT: PL/pgSQL function "test3" line 5 at return
I assume this is a bug, because the source code says:
if (estate->retval == (Datum) NULL)
/* should not happen */
elog(ERROR,
"row not compatible with its own tupdesc");
[...]
if (tup == NULL) /* should not happen */
elog(ERROR,
"row not compatible with its own tupdesc");