Re: postgres_fdw: wrong results with self join + enable_nestloop off
Suraj Kharage <suraj.kharage@enterprisedb.com>
From: Suraj Kharage <suraj.kharage@enterprisedb.com>
To: Richard Guo <guofenglinux@gmail.com>
Cc: Etsuro Fujita <etsuro.fujita@gmail.com>, Nishant Sharma <nishant.sharma@enterprisedb.com>,
pgsql-hackers@postgresql.org
Date: 2023-06-02T03:30:13Z
Lists: pgsql-hackers
+1 for fixing this in the backend code rather than FDW code. Thanks, Richard, for working on this. The patch looks good to me at a glance. On Tue, Apr 25, 2023 at 3:36 PM Richard Guo <guofenglinux@gmail.com> wrote: > > 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 > -- -- Thanks & Regards, Suraj kharage, edbpostgres.com
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