From: | Robert Haas <rhaas(at)postgresql(dot)org> |
---|---|
To: | pgsql-committers(at)postgresql(dot)org |
Subject: | pgsql: Modify tqueue infrastructure to support transient record types. |
Date: | 2015-11-06 21:59:05 |
Message-ID: | E1Zup2H-0005I7-R0@gemulon.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers pgsql-hackers |
Modify tqueue infrastructure to support transient record types.
Commit 4a4e6893aa080b9094dadbe0e65f8a75fee41ac6, which introduced this
mechanism, failed to account for the fact that the RECORD pseudo-type
uses transient typmods that are only meaningful within a single
backend. Transferring such tuples without modification between two
cooperating backends does not work. This commit installs a system
for passing the tuple descriptors over the same shm_mq being used to
send the tuples themselves. The two sides might not assign the same
transient typmod to any given tuple descriptor, so we must also
substitute the appropriate receiver-side typmod for the one used by
the sender. That adds some CPU overhead, but still seems better than
being unable to pass records between cooperating parallel processes.
Along the way, move the logic for handling multiple tuple queues from
tqueue.c to nodeGather.c; tqueue.c now provides a TupleQueueReader,
which reads from a single queue, rather than a TupleQueueFunnel, which
potentially reads from multiple queues. This change was suggested
previously as a way to make sure that nodeGather.c rather than tqueue.c
had policy control over the order in which to read from queues, but
it wasn't clear to me until now how good an idea it was. typmod
mapping needs to be performed separately for each queue, and it is
much simpler if the tqueue.c code handles that and leaves multiplexing
multiple queues to higher layers of the stack.
Branch
------
master
Details
-------
http://git.postgresql.org/pg/commitdiff/6e71dd7ce9766582da453f493bc371d64977282f
Modified Files
--------------
src/backend/executor/nodeGather.c | 138 ++++--
src/backend/executor/tqueue.c | 983 ++++++++++++++++++++++++++++++++-----
src/include/executor/tqueue.h | 12 +-
src/include/nodes/execnodes.h | 4 +-
src/tools/pgindent/typedefs.list | 2 +-
5 files changed, 986 insertions(+), 153 deletions(-)
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2015-11-07 04:03:30 | pgsql: When completing ALTER INDEX .. SET, add an equals sign also. |
Previous Message | Robert Haas | 2015-11-06 17:18:10 | pgsql: Remove unnecessary cast in previous commit. |
From | Date | Subject | |
---|---|---|---|
Next Message | Robert Haas | 2015-11-06 21:59:18 | Re: a raft of parallelism-related bug fixes |
Previous Message | Peter Geoghegan | 2015-11-06 21:41:02 | Re: Better name for PQsslAttributes() |