How to inspect tuples during execution of a plan?
Hello all,
I'd like to inspect the content of tuples as they are sent during the
execution of a query in order to react to their values.
I guess I could do it with a FDW, but that's a bit clumsy so I took a
look at the hooks but have two questions:
1.) Would ExecutorRun_hook be the correct place to implement such an
'tuple inspector'?
2.) If yes, how? As far as I understand the source code, I would have
to provide my own implementation based on standard_ExecutorRun and
replace the ExecutePlan function with my own one that takes a look at
each 'slot' like so
if (estate->es_junkFilter != NULL)
1589 slot = ExecFilterJunk(estate->es_junkFilter, slot);
1590
Tuple inspection here
1591 /*
1592 * If we are supposed to send the tuple somewhere, do so. (In
1593 * practice, this is probably always the case at this point.)
1594 */
1595 if (sendTuples)
1596 {
If there is a better way, please advise. I'm really a newbie to this.
Best regards,
Ernst-Georg Schmid
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
On Mon, Oct 10, 2016 at 1:39 PM, Ernst-Georg Schmid
<ernst.georg.schmid@googlemail.com> wrote:
Hello all,
I'd like to inspect the content of tuples as they are sent during the
execution of a query in order to react to their values.
The correct answer will depend upon the purpose of this inspection.
You may write a function, which can be invoked through a query
wrapping the original query OR you may add a new planner code (check
custom scans) which does the inspection. These are many ways to do
this with different degrees of invasive-ness. They may or may not
suite your purpose.
I guess I could do it with a FDW, but that's a bit clumsy so I took a
look at the hooks but have two questions:1.) Would ExecutorRun_hook be the correct place to implement such an
'tuple inspector'?
2.) If yes, how? As far as I understand the source code, I would have
to provide my own implementation based on standard_ExecutorRun and
replace the ExecutePlan function with my own one that takes a look at
each 'slot' like soif (estate->es_junkFilter != NULL)
1589 slot = ExecFilterJunk(estate->es_junkFilter, slot);
1590Tuple inspection here
1591 /*
1592 * If we are supposed to send the tuple somewhere, do so. (In
1593 * practice, this is probably always the case at this point.)
1594 */
1595 if (sendTuples)
1596 {If there is a better way, please advise. I'm really a newbie to this.
Either of those would do, if you want to write change the executor.
--
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
Hello,
Either of those would do, if you want to write change the executor.
I used the ExeceutorRun_hook and it seems to work. The drawback is,
that I have to provide my own implementation of ExecutePlan() which
could make it incompatible over versions of PostgreSQL. I don't know
how stable that function is over time.
https://github.com/ergo70/pg_sentinel
Thank you,
Ernst-Georg
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
On 10/12/16 2:58 AM, Ernst-Georg Schmid wrote:
Either of those would do, if you want to write change the executor.
I used the ExeceutorRun_hook and it seems to work. The drawback is,
that I have to provide my own implementation of ExecutePlan() which
could make it incompatible over versions of PostgreSQL. I don't know
how stable that function is over time.
There might be another possibility, which would be to use one of the
earlier hooks to change the query destination, and to implement a custom
receiver.
--
Jim Nasby, Data Architect, Blue Treble Consulting, Austin TX
Experts in Analytics, Data Architecture and PostgreSQL
Data in Trouble? Get it in Treble! http://BlueTreble.com
855-TREBLE2 (855-873-2532) mobile: 512-569-9461
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers