Re: [HACKERS] How to inspect tuples during execution of a plan?

2016-10-13 Thread Jim Nasby

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?

2016-10-12 Thread Ernst-Georg Schmid
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?

2016-10-11 Thread Ashutosh Bapat
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?

2016-10-10 Thread Ernst-Georg Schmid
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