Re: [HACKERS] How to inspect tuples during execution of a plan?
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
Re: [HACKERS] How to inspect tuples during execution of a plan?
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
Re: [HACKERS] How to inspect tuples during execution of a plan?
On Mon, Oct 10, 2016 at 1:39 PM, Ernst-Georg Schmid 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 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. 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
[HACKERS] 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