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


FYI, The FDW is available here: <https://bitbucket.org/adunstan/blackhole_fdw>

And here are the traces (notice the second call to blackhole_fdw_handler):

   [andrew@emma inst.bhtest.5709]$ bin/psql
   psql (9.5devel)
   Type "help" for help.

   andrew=# create extension blackhole_fdw;
   CREATE EXTENSION
   andrew=# create server blackhole foreign data wrapper blackhole_fdw;
   CREATE SERVER
   andrew=# create foreign table bh(a text, b int) server blackhole;
   CREATE FOREIGN TABLE
   andrew=# set client_min_messages = debug1;
   SET
   andrew=# insert into bh select 'a',x from generate_series(1,5) x;
   DEBUG:  entering function blackhole_fdw_handler
   DEBUG:  entering function blackholePlanForeignModify
   DEBUG:  entering function blackhole_fdw_handler
   DEBUG:  entering function blackholeBeginForeignModify
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeEndForeignModify
   INSERT 0 5
   andrew=# insert into bh select 'a',x from generate_series(1,5) x;
   DEBUG:  entering function blackhole_fdw_handler
   DEBUG:  entering function blackholePlanForeignModify
   DEBUG:  entering function blackholeBeginForeignModify
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeExecForeignInsert
   DEBUG:  entering function blackholeEndForeignModify
   INSERT 0 5
   andrew=#

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