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