Re: FDW oddity
От | Andrew Dunstan |
---|---|
Тема | Re: FDW oddity |
Дата | |
Msg-id | 552A2A5E.8060005@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 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 targetrel isn't a baserel.) */ cheers andrew
В списке pgsql-hackers по дате отправления: