CREATE OR REPLACE FUNCTION getBlogsFromMostPopularTagsAndSite ( site_id INTEGER) RETURNS SETOF RECORD AS $$ DECLARE tag_row RECORD; blog_row RECORD; BEGIN -- requete de selection des tags FOR tag_row IN SELECT tag FROM _freetag_blog JOIN _freetagged_object_blog ON (_freetag_blog.id = _freetagged_object_blog.tag_id) WHERE _freetagged_object_blog.object_tree <@ '0.1' AND (_freetag_blog.rating & (1 << (1 - 1))) = 0 AND (_freetagged_object_blog.rating & (1 << (1 - 1))) = 0 GROUP BY tag ORDER BY COUNT (tag) DESC, tag ASC OFFSET 0 LIMIT 10 LOOP FOR blog_row IN SELECT tag, _blog.id FROM _blog JOIN _freetagged_object_blog ON (_blog.path = _freetagged_object_blog.object_tree) JOIN _freetag_blog ON (_freetag_blog.id = _freetagged_object_blog.tag_id) LEFT JOIN _top_blog ON (_blog.id = _top_blog.id ) WHERE _blog.path <@ '0.1' AND (_blog.rating & (1 << (1 - 1))) = 0 GROUP BY _blog.id, tag, rank HAVING tag = tag_row.tag ORDER BY tag, rank DESC OFFSET 0 LIMIT 5 LOOP RETURN NEXT blog_row; END LOOP; END LOOP; END; $$ LANGUAGE plpgsql; ---------------- ob2=# SELECT * FROM getBlogsFromMostPopularTagsAndSite (1) AS (tag TEXT, id INT8); ERROR: wrong record type supplied in RETURN NEXT CONTEXT: PL/pgSQL function "getblogsfrommostpopulartagsandsite" line 38 at return next