Re: FDW oddity
| От | Andrew Dunstan |
|---|---|
| Тема | Re: FDW oddity |
| Дата | |
| Msg-id | 5529D062.90005@dunslane.net обсуждение исходный текст |
| Ответ на | Re: FDW oddity (Andrew Dunstan <andrew@dunslane.net>) |
| Список | pgsql-hackers |
On 04/11/2015 07:30 PM, Andrew Dunstan wrote:
>
> On 04/11/2015 05:10 PM, Tom Lane wrote:
>> Andrew Dunstan <andrew@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:
enteringfunction blackhole_fdw_handler DEBUG: entering function blackholePlanForeignModify DEBUG: entering
functionblackholeBeginForeignModify 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
В списке pgsql-hackers по дате отправления: