From: | Andrew Dunstan <andrew(at)dunslane(dot)net> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: FDW oddity |
Date: | 2015-04-12 01:54:42 |
Message-ID: | 5529D062.90005@dunslane.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | 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(at)dunslane(dot)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(at)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
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Eisentraut | 2015-04-12 03:36:05 | Re: moving from contrib to bin |
Previous Message | Petr Jelinek | 2015-04-11 23:56:49 | Re: Replication identifiers, take 4 |