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 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