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
>
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? |