On 2015/04/16 19:57, Amit Langote wrote:
> On 16-04-2015 PM 07:50, Etsuro Fujita wrote:
>>> The EXPLAIN output has also been improved as discussed in [1].
>>
>> I noticed that the EXPLAIN for a pushed-down update (delete) on inheritance
>> childs doubly displays "Foreign Update" ("Foreign Delete"), one for
>> ForeignScan and the other for ModifyTable.  Here is an example:
>>
>> postgres=# explain verbose update parent set c1 = c1;
>>                                    QUERY PLAN
>> ------------------------------------------------------------------------------
>>   Update on public.parent  (cost=0.00..364.54 rows=4819 width=10)
>>     Update on public.parent
>>     Foreign Update on public.ft1
>>     Foreign Update on public.ft2
>>     ->  Seq Scan on public.parent  (cost=0.00..0.00 rows=1 width=10)
>>           Output: parent.c1, parent.ctid
>>     ->  Foreign Update on public.ft1  (cost=100.00..182.27 rows=2409 
>> width=10)
>>           Remote SQL: UPDATE public.t1 SET c1 = c1
>>     ->  Foreign Update on public.ft2  (cost=100.00..182.27 rows=2409 
>> width=10)
>>           Remote SQL: UPDATE public.t2 SET c1 = c1
>> (10 rows)
>>
>> Should we do something?  Suggestions are welcome.

>>From what I see in Tom's commit message[0] for FTI patch, this shouldn't be,
> right?
> 
> To be specific, there should be "Foreign Scan" there as per the commit. Am I
> missing something?

As shown in the below example, this patch doesn't change the EXPLAIN
output for non-pushed-down update (delete) cases, but since we changed
the EXPLAIN output as discussed in [1], the patch doubly displays
"Foreign Update" ("Foreign Delete") for pushed-down update (delet) cases
like the above example.

postgres=# explain verbose update parent set c1 = trunc(random() * 9 +
1)::int;
                                                 QUERY PLAN
-------------------------------------------------------------------------------------------------------------
 Update on public.parent  (cost=0.00..452.06 rows=5461 width=6)
   Update on public.parent
   Foreign Update on public.ft1
     Remote SQL: UPDATE public.t1 SET c1 = $2 WHERE ctid = $1
   Foreign Update on public.ft2
     Remote SQL: UPDATE public.t2 SET c1 = $2 WHERE ctid = $1
   ->  Seq Scan on public.parent  (cost=0.00..0.01 rows=1 width=6)
         Output: (trunc(((random() * '9'::double precision) +
'1'::double precision)))::integer, parent.ctid
   ->  Foreign Scan on public.ft1  (cost=100.00..226.03 rows=2730 width=6)
         Output: (trunc(((random() * '9'::double precision) +
'1'::double precision)))::integer, ft1.ctid
         Remote SQL: SELECT ctid FROM public.t1 FOR UPDATE
   ->  Foreign Scan on public.ft2  (cost=100.00..226.03 rows=2730 width=6)
         Output: (trunc(((random() * '9'::double precision) +
'1'::double precision)))::integer, ft2.ctid
         Remote SQL: SELECT ctid FROM public.t2 FOR UPDATE
(14 rows)

Best regards,
Etsuro Fujita


-- 
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