The following bug has been logged on the website:

Bug reference:      6785
Logged by:          Anderson Valadares
Email address:      anderva...@gmail.com
PostgreSQL version: 9.1.4
Operating system:   Linux CentOS 5.5
Description:        

Hello,
  we recently had a memory exhaustion in the PostgreSQL server of the
company, after a scan found a likely memory leak when using a plpgsql
function.
The problem occurred on an IBM x3400 server with 12G, CentOS 5.5 and
PostgreSQL 9.1.4. The leak occurs when a variable declared type of a table
column and when the
column or the table ceases to exist.
Follow the steps for the simulation:

create table tbl_test
(cod integer);

CREATE OR REPLACE FUNCTION citgis.fct_test()
RETURNS void AS
$body$
DECLARE
  v_cod tbl_test.cod%type;
BEGIN
  return;
END;
$body$
LANGUAGE 'plpgsql';

drop table tbl_test;


test=# select pg_backend_pid();
 pg_backend_pid
----------------
           6465

Initial memory
------------------------------------------------------------------------------------------------------------------------
PID USER      PR  NI  VIRT SWAP  RES CODE DATA  SHR S P %CPU %MEM    TIME+ 
COMMAND
6465 postgres  16   0 1183m 1.2g 4308 4684 2896 2900 S 1  0.0  0.0   0:00.00
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------


1st Execution
------------------------------------------------------------------------------------------------------------------------

\o processa.sql
\t

select E'select fct_test();'
from generate_series(1, 1000);

\o
\t

\i processa.sql

PID USER      PR  NI  VIRT SWAP  RES CODE DATA  SHR S P %CPU %MEM    TIME+ 
COMMAND
6465 postgres  15   0 1194m 1.2g  14m 4684  12m 3748 S 1  0.0  0.1   0:00.08
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------



2st Execution
------------------------------------------------------------------------------------------------------------------------
\o processa.sql
\t

select E'select fct_test();'
from generate_series(1, 1000);

\o
\t

\i processa.sql

PID USER      PR  NI  VIRT SWAP  RES CODE DATA  SHR S P %CPU %MEM    TIME+ 
COMMAND
6465 postgres  15   0 1203m 1.2g  23m 4684  21m 3748 S 1  0.0  0.2   0:00.17
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------


3st Execution
------------------------------------------------------------------------------------------------------------------------
\o processa.sql
\t

select E'select fct_test();'
from generate_series(1, 1000);

\o
\t

\i processa.sql

PID USER      PR  NI  VIRT SWAP  RES CODE DATA  SHR S P %CPU %MEM    TIME+ 
COMMAND
6465 postgres  15   0 1212m 1.2g  32m 4684  30m 3748 S 1  3.0  0.3   0:00.26
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------


4st Execution
------------------------------------------------------------------------------------------------------------------------
\o processa.sql
\t

select E'select fct_test();'
from generate_series(1, 1000);

\o
\t

\i processa.sql

PID USER      PR  NI  VIRT SWAP  RES CODE DATA  SHR S P %CPU %MEM    TIME+ 
COMMAND
6465 postgres  16   0 1221m 1.2g  41m 4684  39m 3756 S 1  0.0  0.3   0:00.36
postgres: postgres test [local] idle
------------------------------------------------------------------------------------------------------------------------



-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Reply via email to