On Thu, Feb 26, 2009 at 03:50:16PM -0500, Tom Lane wrote: > "aiwaniuk" <aiwan...@instytut.com.pl> writes: > > i postgres version 8.2, 8.3 and probobly 8.1 there is problem with running > The reason there's an issue here is that you're invoking the same > function f() both inside and outside the subtransactions caused by > the begin/exception block. The expressions inside f() get re-prepared > each time the subtransaction ID changes. The memory this eats is > reclaimed at subtransaction end. So the memory used by the call inside > the begin/exception block is cleaned up immediately, but the memory > used by the other call accumulates in the outer subtransaction's > workspace.
thanks for replay. i have to say something more. i see that if there is one perform of f() (no matter if it is begin - exception block, or not) postgres process consumes 450MB of memory. but if there are two executions of f(), and i make select info.memory_growth(1000000); postgres process consumes 5.2GB of memory. this is way too much... or not ? isn't it some bug in memory reciment ? executing f() only once, consumes as i mention, 450MB of memory. changing number of loops in execution do not lead to memory growth. if we performing two executions of f() (one in begin - exception block) used memory is growing, on and on. i have 13GB of memory, and multiplying number loops by 10 (from 1000000 to 10000000) causes server crash - not enough memory. there is one interesting thing, if i create a copy of f() function (lets say f1), and function f() is performing in begin-exception block, and f1() is performing in main block, mamory do not grows!! postgres constantly uses 450MB interesting, isn't it ? looking forward for comment -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs