út 27. 5. 2025 v 7:27 odesílatel Amul Sul <sula...@gmail.com> napsal:

> On Tue, May 27, 2025 at 4:23 AM Tom Lane <t...@sss.pgh.pa.us> wrote:
> >
> > Back in [1], Andres complained that repeated attempts to create
> > an invalid plpgsql function (one that fails initial compilation)
> > leak memory, for example
> >
> > DO $do$
> > BEGIN
> >   FOR i IN 1 .. 100000 LOOP
> >     BEGIN
> >       CREATE OR REPLACE FUNCTION foo() RETURNS VOID
> >         LANGUAGE plpgsql AS $f$BEGIN frakbar; END;$f$;
> >     EXCEPTION WHEN others THEN
> >     END;
> >   END LOOP;
> > END;$do$;
> >
> > The reason is that we create the long-lived function cache context
> > and detect the syntax error only while trying to fill it in.
> > As I remarked at the time, we could make that better by making
> > the cache context initially short-lived and reparenting it only
> > after it's known good.  The attached patch does that.
> >
> > I noted that the CachedFunction struct made by funccache.c gets
> > leaked too.  (That's not new, but the blame used to fall on plpgsql's
> > equivalent of that code.)  That's not hard to fix in typical cases,
> > at the price of an extra PG_TRY, which seems okay in a code path that
> > is setting up a long-lived cache entry.  Also done in the attached.
> >
> > I thought that SQL-language functions might have this issue too,
> > but they do not, because sql_compile_callback already uses the
> > reparenting trick.  (I followed its lead in making the function
> > contexts live under CacheMemoryContext not TopMemoryContext.)
> >
> > If you run the above example long enough, you will also observe a
> > slow leak in TopTransactionContext.  AFAICT that is from accumulating
> > invalidation messages from the failed pg_proc insertions, so it's not
> > specific to functions but applies to any DDL in a loop.  Fixing that
> > seems outside the scope of this patch.
> >
> > I think this is a bug fix, so I'm inclined to squeeze it into v18.
> > I am not sure if it's worth developing a back-patchable version.
> > The pl_comp.c change probably applies easily further back, and
> > would be enough to get the bulk of the benefit.
> >
> > Comments?
> >
>
> The patch seems reasonable and the changes appear straightforward
> enough for a backport. However, I am not sure about the backporting,
> as the leak doesn't seem to occur very frequently.
>

+1

Regards

Pavel

>
> Regards,
> Amul
>
>
>

Reply via email to