Re: How can I create null value from function call with no results?

From: Seref Arikan <serefarikan(at)gmail(dot)com>
To: PG-General Mailing List <pgsql-general(at)postgresql(dot)org>
Cc: Seref Arikan <serefarikan(at)gmail(dot)com>
Subject: Re: How can I create null value from function call with no results?
Date: 2014-07-30 19:20:39
Message-ID: CA+4ThdrUcTgV9ke9Sbk4parNBnrVdLubmuoixLvBdz8DtmpAgA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

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 <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Seref Arikan <serefarikan(at)gmail(dot)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
>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Scott Marlowe 2014-07-30 19:21:28 Re: free RAM not being used for page cache
Previous Message Seref Arikan 2014-07-30 19:08:08 Re: How can I create null value from function call with no results?