Re: postgres_fdw: wrong results with self join + enable_nestloop off
Richard Guo <guofenglinux@gmail.com>
From: Richard Guo <guofenglinux@gmail.com>
To: Etsuro Fujita <etsuro.fujita@gmail.com>
Cc: Nishant Sharma <nishant.sharma@enterprisedb.com>,
pgsql-hackers@postgresql.org
Date: 2023-04-25T10:06:01Z
Lists: pgsql-hackers
Attachments
- v1-0001-Fix-how-we-handle-pseudoconstant-clauses-for-scans-of-foreign-joins.patch (application/octet-stream) patch v1-0001
On Fri, Apr 14, 2023 at 8:51 PM Etsuro Fujita <etsuro.fujita@gmail.com> wrote: > I think that the root cause for this issue would be in the > create_scan_plan handling of pseudoconstant quals when creating a > foreign-join (or custom-join) plan. Yes exactly. In create_scan_plan, we are supposed to extract all the pseudoconstant clauses and use them as one-time quals in a gating Result node. Currently we check against rel->baserestrictinfo and ppi_clauses for the pseudoconstant clauses. But for scans of foreign joins, we do not have any restriction clauses in these places and thus the gating Result node as well as the pseudoconstant clauses would just be lost. I looked at Nishant's patch. IIUC it treats the pseudoconstant clauses as local conditions. While it can fix the wrong results issue, I think maybe it's better to still treat the pseudoconstant clauses as one-time quals in a gating node. So I wonder if we can store the restriction clauses for foreign joins in ForeignPath, just as what we do for normal JoinPath, and then check against them for pseudoconstant clauses in create_scan_plan, something like attached. BTW, while going through the codes I noticed one place in add_foreign_final_paths that uses NULL for List *. I changed it to NIL. Thanks Richard
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Re-allow FDWs and custom scan providers to replace joins with pseudoconstant quals.
- 9e9931d2bf40 17.0 landed
-
Disallow replacing joins with scans in problematic cases.
- db01f26968f2 11.21 landed
- 9edf72aa7644 12.16 landed
- 730f983effa5 13.12 landed
- b0e390e6d1d6 14.9 landed
- d1ef5631e620 15.4 landed
- 695f5deb7902 16.0 landed
- 6f80a8d9c137 17.0 landed
-
doc: PQinitOpenSSL and PQinitSSL are obsolete in OpenSSL 1.1.0+
- 928e05ddfd40 16.0 cited