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