Re: Do function calls the cached?

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Daniel Caldeweyher <dcalde(at)gmail(dot)com>
Cc: "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Do function calls the cached?
Date: 2016-08-30 20:46:45
Message-ID: CAKFQuwaaLDj7Rb1pVjHSdSaU6Q030zX6j1_g=VK-dNwDqXsArA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tue, Aug 30, 2016 at 4:15 PM, Daniel Caldeweyher <dcalde(at)gmail(dot)com>
wrote:

>
> select x,y,z, (extract_keywords(l.*)).*
>
> ​[...]​

> Does this mean the function gets called three time?
>

​Yes.

(​function_call(...)).*​

​syntax is problematic. You should avoid it via one of two options.

LATERAL (new way, preferred)
or
CTE​ (old way)

In the CTE version you make the call in the CTE but do "(col).*" in the
main query. This way the function is only called once to generate a
composite output, then the composite output is exploded.

With LATERAL the system is smart enough to do it the right way.

David J.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Chinh Nguyen 2016-08-30 22:07:46 Queries on async replicas locked each other after index rename on master
Previous Message Daniel Caldeweyher 2016-08-30 20:15:41 Do function calls the cached?