On Thu, Sep 16, 2021 at 4:51 AM Steve Pritchard <steve.pritch...@bto.org> wrote: > > I have a PL/pgSQL function that I want to call within a query, but the > function is fairly expensive to execute so I only want it executed once > within the query. However the planner seems to reorganize my query so that it > calls the function for every row. > > We were previously on Pg 9.6 and this wasn't a problem then. But now that we > have upgraded to Pg 13, the behaviour has changed. >
The behavior for planning a CTE changed in PG12. > There must be a "proper" way to get the planner to call a function only once. > Add the MATERIALIZED keyword to the WITH statement