• Etsuro Fujita's avatar
    postgres_fdw: Fix incorrect handling of row movement for remote partitions. · 5c470491
    Etsuro Fujita authored
    Commit 3d956d95 added support for update row movement in postgres_fdw.
    This patch fixes the following issues introduced by that commit:
    
    * When a remote partition chosen to insert routed rows into was also an
      UPDATE subplan target rel that would be updated later, the UPDATE that
      used a direct modification plan modified those routed rows incorrectly
      because those routed rows were visible to the later UPDATE command.
      The right fix for this would be to have some way in postgres_fdw in
      which the later UPDATE command ignores those routed rows, but it seems
      hard to do so with the current infrastructure.  For now throw an error
      in that case.
    
    * When a remote partition chosen to insert routed rows into was also an
      UPDATE subplan target rel, fmstate created for the UPDATE that used a
      non-direct modification plan was mistakenly overridden by another
      fmstate created for inserting those routed rows into the partition.
      This caused 1) server crash when the partition would be updated later,
      and 2) resource leak when the partition had been already updated.  To
      avoid that, adjust the treatment of the fmstate for the inserting.  As
      for #1, since we would also have the incorrectness issue as mentioned
      above, error out in that case as well.
    
    Update the docs to mention that postgres_fdw currently does not handle
    the case where a remote partition chosen to insert a routed row into is
    also an UPDATE subplan target rel that will be updated later.
    
    Author: Amit Langote and Etsuro Fujita
    Reviewed-by: Amit Langote
    Backpatch-through: 11 where row movement in postgres_fdw was added
    Discussion: https://postgr.es/m/21e7eaa4-0d4d-20c2-a1f7-c7e96f4ce440@lab.ntt.co.jp
    5c470491
postgres_fdw.sql 105 KB