• Tom Lane's avatar
    Allow foreign tables to participate in inheritance. · cb1ca4d8
    Tom Lane authored
    Foreign tables can now be inheritance children, or parents.  Much of the
    system was already ready for this, but we had to fix a few things of
    course, mostly in the area of planner and executor handling of row locks.
    
    As side effects of this, allow foreign tables to have NOT VALID CHECK
    constraints (and hence to accept ALTER ... VALIDATE CONSTRAINT), and to
    accept ALTER SET STORAGE and ALTER SET WITH/WITHOUT OIDS.  Continuing to
    disallow these things would've required bizarre and inconsistent special
    cases in inheritance behavior.  Since foreign tables don't enforce CHECK
    constraints anyway, a NOT VALID one is a complete no-op, but that doesn't
    mean we shouldn't allow it.  And it's possible that some FDWs might have
    use for SET STORAGE or SET WITH OIDS, though doubtless they will be no-ops
    for most.
    
    An additional change in support of this is that when a ModifyTable node
    has multiple target tables, they will all now be explicitly identified
    in EXPLAIN output, for example:
    
     Update on pt1  (cost=0.00..321.05 rows=3541 width=46)
       Update on pt1
       Foreign Update on ft1
       Foreign Update on ft2
       Update on child3
       ->  Seq Scan on pt1  (cost=0.00..0.00 rows=1 width=46)
       ->  Foreign Scan on ft1  (cost=100.00..148.03 rows=1170 width=46)
       ->  Foreign Scan on ft2  (cost=100.00..148.03 rows=1170 width=46)
       ->  Seq Scan on child3  (cost=0.00..25.00 rows=1200 width=46)
    
    This was done mainly to provide an unambiguous place to attach "Remote SQL"
    fields, but it is useful for inherited updates even when no foreign tables
    are involved.
    
    Shigeru Hanada and Etsuro Fujita, reviewed by Ashutosh Bapat and Kyotaro
    Horiguchi, some additional hacking by me
    cb1ca4d8
explain.c 80.3 KB