• Etsuro Fujita's avatar
    postgres_fdw: Disable batch insertion when there are WCO constraints. · 4a9bc2e0
    Etsuro Fujita authored
    When inserting a view referencing a foreign table that has WITH CHECK
    OPTION constraints, in single-insert mode postgres_fdw retrieves the
    data that was actually inserted on the remote side so that the WITH
    CHECK OPTION constraints are enforced with the data locally, but in
    batch-insert mode it cannot currently retrieve the data (except for the
    row first inserted through the view), resulting in enforcing the WITH
    CHECK OPTION constraints with the data passed from the core (except for
    the first-inserted row), which led to incorrect results when inserting
    into a view referencing a foreign table in which a remote BEFORE ROW
    INSERT trigger changes the rows inserted through the view so that they
    violate the view's WITH CHECK OPTION constraint.  Also, the query
    inserting into the view caused an assertion failure in assert-enabled
    builds.
    
    Fix these by disabling batch insertion when inserting into such a view.
    
    Back-patch to v14 where batch insertion was added.
    
    Discussion: https://postgr.es/m/CAPmGK17LpbTZs4m4a_6THP54UBeK9fHvX8aVVA%2BC6yEZDZwQcg%40mail.gmail.com
    4a9bc2e0
postgres_fdw.sql 142 KB