On 04/11/2015 07:30 PM, Andrew Dunstan wrote:

On 04/11/2015 05:10 PM, Tom Lane wrote:
Andrew Dunstan <and...@dunslane.net> writes:
I have just noticed something slightly odd. The traces (obtained by
setting client_min_messages to debug1) from the blackhole FDW show that
the handler function is called each time an INSERT is performed. This is not the case for SELECT, UPDATE or DELETE. It looks at first glance like
a buglet. Can anyone suggest why this should be so?
What do you mean by "the handler function", and for that matter what do
you define as "each time"?  The ExecForeignInsert method certainly ought
to be called once per row inserted, but the same is true of
ExecForeignUpdate and ExecForeignDelete.  The setup methods such as
BeginForeignModify should only be called once per query though.


I mean this function:

   Datum
   blackhole_fdw_handler(PG_FUNCTION_ARGS)
   {
        FdwRoutine *fdwroutine = makeNode(FdwRoutine);

        elog(DEBUG1,"entering function %s",__func__);

        /* assign the handlers for the FDW */

     ...
   }

And it is called at the beginning of every INSERT statement, before blackholePlanForeignModify() is called




Seems to be explained by this comment in createplan.c:

        /*
* If possible, we want to get the FdwRoutine from our RelOptInfo for * the table. But sometimes we don't have a RelOptInfo and must get * it the hard way. (In INSERT, the target relation is not scanned,
         * so it's not a baserel; and there are also corner cases for
         * updatable views where the target rel isn't a baserel.)
         */

cheers

andrew





--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to