mirror of
https://github.com/postgres/postgres.git
synced 2025-06-05 00:02:04 -04:00
Fix dumb bug in tqueue.c
When I wrote this code originally, the intention was to recompute the remapinfo only when the tupledesc changes. This presumably only happens once per query, but I copied the design pattern from other DestReceivers. However, due to a silly oversight on my part, tqueue->tupledesc never got set, leading to recomputation for every tuple. This should improve the performance of parallel scans that return a significant number of tuples. Report by Amit Kapila; patch by me, reviewed by him.
This commit is contained in:
parent
5f10b7a604
commit
adeee97486
@ -127,15 +127,15 @@ tqueueReceiveSlot(TupleTableSlot *slot, DestReceiver *self)
|
||||
* new tupledesc. This is a strange test both because the executor really
|
||||
* shouldn't change the tupledesc, and also because it would be unsafe if
|
||||
* the old tupledesc could be freed and a new one allocated at the same
|
||||
* address. But since some very old code in printtup.c uses this test, we
|
||||
* adopt it here as well.
|
||||
* address. But since some very old code in printtup.c uses a similar
|
||||
* test, we adopt it here as well.
|
||||
*/
|
||||
if (tqueue->tupledesc != tupledesc ||
|
||||
tqueue->remapinfo->natts != tupledesc->natts)
|
||||
if (tqueue->tupledesc != tupledesc)
|
||||
{
|
||||
if (tqueue->remapinfo != NULL)
|
||||
pfree(tqueue->remapinfo);
|
||||
tqueue->remapinfo = BuildRemapInfo(tupledesc);
|
||||
tqueue->tupledesc = tupledesc;
|
||||
}
|
||||
|
||||
tuple = ExecMaterializeSlot(slot);
|
||||
|
Loading…
x
Reference in New Issue
Block a user