diff options
| author | Robert Haas <rhaas@postgresql.org> | 2015-10-15 13:00:40 -0400 |
|---|---|---|
| committer | Robert Haas <rhaas@postgresql.org> | 2015-10-15 13:10:39 -0400 |
| commit | 5043193b78919a1bd144563aadc2f7f726549913 (patch) | |
| tree | 3a518c81df7d452ff9a50a2181d29fd0d76604c3 /doc/src | |
| parent | 54e07be2dfd314a64dc2ce03a6a7f59cac1c8a13 (diff) | |
Allow FDWs to push down quals without breaking EvalPlanQual rechecks.
This fixes a long-standing bug which was discovered while investigating
the interaction between the new join pushdown code and the EvalPlanQual
machinery: if a ForeignScan appears on the inner side of a paramaterized
nestloop, an EPQ recheck would re-return the original tuple even if
it no longer satisfied the pushed-down quals due to changed parameter
values.
This fix adds a new member to ForeignScan and ForeignScanState and a
new argument to make_foreignscan, and requires changes to FDWs which
push down quals to populate that new argument with a list of quals they
have chosen to push down. Therefore, I'm only back-patching to 9.5,
even though the bug is not new in 9.5.
Etsuro Fujita, reviewed by me and by Kyotaro Horiguchi.
Diffstat (limited to 'doc/src')
| -rw-r--r-- | doc/src/sgml/fdwhandler.sgml | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/doc/src/sgml/fdwhandler.sgml b/doc/src/sgml/fdwhandler.sgml index 4c410c79168..1533a6bf80c 100644 --- a/doc/src/sgml/fdwhandler.sgml +++ b/doc/src/sgml/fdwhandler.sgml @@ -1136,6 +1136,15 @@ GetForeignServerByName(const char *name, bool missing_ok); </para> <para> + Any clauses removed from the plan node's qual list must instead be added + to <literal>fdw_recheck_quals</> in order to ensure correct behavior + at the <literal>READ COMMITTED</> isolation level. When a concurrent + update occurs for some other table involved in the query, the executor + may need to verify that all of the original quals are still satisfied for + the tuple, possibly against a different set of parameter values. + </para> + + <para> Another <structname>ForeignScan</> field that can be filled by FDWs is <structfield>fdw_scan_tlist</>, which describes the tuples returned by the FDW for this plan node. For simple foreign table scans this can be |
