plpgsql memory leaks - Mailing list pgsql-hackers

From Pavel Stehule
Subject plpgsql memory leaks
Date
Msg-id CAFj8pRCWZBS4pXSZd8ibsSivVkzsUn1d8eX0y4jOYmRB+Cw2yg@mail.gmail.com
Whole thread Raw
Responses Re: plpgsql memory leaks
List pgsql-hackers
Hi

I have reported very memory expensive pattern:

CREATE OR REPLACE FUNCTION public.fx(iter integer)
 RETURNS void
 LANGUAGE plpgsql
AS $function$
declare
  c cursor(m bigint) for select distinct i from generate_series(1, m) g(i);
  t bigint;
  s bigint;
begin
  for i in 1..iter
  loop
    open c(m := i * 10000);
    s := 0;
    loop
      fetch c into t;
      exit when not found;
      s := s + t;
    end loop;
    close c; raise notice '%=%', i, s;
  end loop;
end;
$function$
;

This script takes for 100 iterations 100MB

but rewritten

CREATE OR REPLACE FUNCTION public.fx(iter integer)
 RETURNS void
 LANGUAGE plpgsql
AS $function$
declare
  t bigint;
  s bigint;
begin
  for i in 1..iter
  loop
    s := 0;
    for t in select  ic from generate_series(1, i * 10000) g(ic)
    loop
      s := s + t;
    end loop;
    raise notice '%=%', i, s;
  end loop;
end;
$function$

takes lot of megabytes of memory too.

Regards

Pavel

pgsql-hackers by date:

Previous
From: Masahiko Sawada
Date:
Subject: Re: [PoC] Improve dead tuple storage for lazy vacuum
Next
From: Alvaro Herrera
Date:
Subject: Re: alter table add x wrong error position