]> granicus.if.org Git - postgresql/commit
Code review for tqueue.c: fix memory leaks, speed it up, other fixes.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 31 Jul 2016 20:05:12 +0000 (16:05 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 31 Jul 2016 20:05:12 +0000 (16:05 -0400)
commita9ed875fdc2c44b5793a07727274786b417fc924
tree3efa4da41d712cd20108811bae058198e9985393
parentf9e439b1ca81e3305b677d93c67299549625370c
Code review for tqueue.c: fix memory leaks, speed it up, other fixes.

When doing record typmod remapping, tqueue.c did fresh catalog lookups
for each tuple it processed, which was pretty horrible performance-wise
(it seemed to about halve the already none-too-quick speed of bulk reads
in parallel mode).  Worse, it insisted on putting bits of that data into
TopMemoryContext, from where it never freed them, causing a
session-lifespan memory leak.  (I suppose this was coded with the idea
that the sender process would quit after finishing the query ---
but the receiver uses the same code.)

Restructure to avoid repetitive catalog lookups and to keep that data
in a query-lifespan context, in or below the context where the
TQueueDestReceiver or TupleQueueReader itself lives.

Fix some other bugs such as continuing to use a tupledesc after
releasing our refcount on it.  Clean up cavalier datatype choices
(typmods are int32, please, not int, and certainly not Oid).  Improve
comments and error message wording.
src/backend/executor/tqueue.c