On Mon, Jan 09, 2006 at 01:01:33PM -0800, Matthew Peter wrote: > One other quick question, (figure it still applies to the subject > line :) when returning a row from a function I'm trying to include an > aggregate, but it's not showing up in the query result and I think > it's because it's not included in the RETURN NEXT row;? How do I > return it as part of the resultset... Terminology point: you used the word "aggregate" but the function below doesn't have an aggregate. Aggregates are functions that operate on multiple rows, like count() and sum(); substr() doesn't do that so it's not an aggregate. > create or replace function getrecord(int,text) RETURNS SETOF my_tbl as $$ > DECLARE > row my_tbl%rowtype; > > BEGIN > FOR row IN SELECT *, SUBSTR(title,1,25) as short_title FROM my_tbl [...] You've declared the row variable to be of type my_tbl so whatever columns my_tbl has are the columns you get. If you want to return additional columns then you have a few choices: 1. Create a composite type with the desired columns, declare the function to return SETOF that type, and declare row to be of that type. 2. Declare the function to return SETOF record, declare row to be of type record, and provide a column definition list when you call the function. 3. Use OUT parameters (new in 8.1). -- Michael Fuhr