Thanks Tom,
The function can return multiple rows. It is a very simplified version of a
function that is used in the context of an EAV design.
It should return 0 or more rows that match the criteria that is calculated
in the function.

Originally I had a left outer join from the table that I'm using in the
SELECT here to a subquery. The problem is, postgres 9.3 chooses an
inefficient query plan when I do that (and this is all in a quite large
query).
If I replace the LEFT OUTER JOIN + subquery with the function call
approach, the overall query runs a lot faster. So it is a workaround for
performance reasons, though it leaves a bad taste in my mouth as well :(

Best regards
Seref



On Wed, Jul 30, 2014 at 7:54 PM, Tom Lane <t...@sss.pgh.pa.us> wrote:

> Seref Arikan <serefari...@gmail.com> writes:
> > I want to call a function using a column of a table as the parameter and
> > return the parameter and function results together.
> > The problem is, when the function returns an empty row my select
> statement
> > that uses the function returns an empty row as well.
>
> This function isn't actually returning an empty row; it's returning no
> rows, which is possible because RETURNS TABLE is really RETURNS SETOF
> some-record-type.  It's not entirely clear what you're trying to
> accomplish, so the first thing is to get clear on that.  Perhaps you
> want it to always return one row?  If so, don't use the TABLE notation
> (just list some OUT parameters instead).  If you actually do want it
> to return zero rows, then the problem is not with the function but with
> the query you're using it in.  Set-returning functions in a SELECT's
> targetlist are often a bad idea.
>
>                         regards, tom lane
>

Reply via email to