Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wDBnL-002h5d-0Z for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 01:45:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wDBnJ-003A3E-1K for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Apr 2026 01:45:25 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wDBnI-003A34-2m for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 01:45:25 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wDBnC-00000001Etl-16f8 for pgsql-hackers@lists.postgresql.org; Thu, 16 Apr 2026 01:45:19 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-ba23b5bcbd5so128072566b.2 for ; Wed, 15 Apr 2026 18:45:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776303917; cv=none; d=google.com; s=arc-20240605; b=MpEf9jjarPJHHoIs/DeWwIOKKsFpZkMCDI/xQ1gDxZctfd3mEtpPG3LW+zYXk+ob7H cq5e0oYGUmFtSaLQ+7beQ8JEJxiS2DRxu5txTFTOk04LzF1c9LKEQXH3EBP7N3kSLLFd rvybqm2D7v0ljmsNgDwrHBn+by7vU90rHUh+0rswCVxMUnztE/Wjo/9MmOb44OYA5+kH 7NmO3Dm9pifPjVZYJ/bgEkHOlGGLgAypDpBx8G1OP9k5lSjT9vkm7eEZmiMgUY/ipj6G w+xC9Sl5VO1EWuM5bo6yEZLZQUAOmrdSgCt34obfpajocFlwAFnhzFxBGyDht+HSqtBt fePQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=OKDEZSLh1AKJTfcufzvkWS/8q0HtrqytT0nTr+xfzJE=; fh=836KLLuV3BxA4ZaJOBA33T9RokDAO34c4c1v4RCDKjA=; b=MxnHUR55TiQHlhHBSJK2FS9PMYNF34JREGIWaAWp3Hqxsz6aJ4p5pl7gTHLsLjjqCj tLIKRQ/PTj3a0OBYXKevCNHNa32/OPotOIyNzTyHOyJ0lwRzr7rVzbkCm4PxjaJkvREs 44cdK923hG1YLP1mzbbF/JINf4O+qzqwcl7Bj4+gRWzVChDaBis42ZxXT3vO6hQ4XcI/ 5n01GWopia1507otDOi4T8mBkyyF/hLy2Itz1yA97suonZiAhBcn+qItg7VRx+E6x7DR qJpyK3OodjynzphVBEApb+pW8sH27sfAIY779y1UBxfMXxjbA/Nt8lDL0osm8G7ot7We M+xA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1776303917; x=1776908717; darn=lists.postgresql.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=OKDEZSLh1AKJTfcufzvkWS/8q0HtrqytT0nTr+xfzJE=; b=EfBT2j+mq8Zwv3NYnHgSFil2jzQAPEhellWYPV0Y6EjI7KhZ5YSl60AG1ET281+Jpk JB4jcrVEh28aFM73O4Ho2LJ72Hcru39hKMX4o/5pic7uDbJpVk2fGnGnWAzSbWS5t0/1 Q9mdG7/Pfg1PSVqAlW/HUJwF8GEXmEPRRvIMf00UQxFUN1VOOLQpWj6hPTXAALpVZyYy IVwRZJWdK0gWegSFKvULd6SicJ1rWUXlAJxbJnHJ32kd+38n2D3LdDE75eV2PWmOSH6Z QWwqDIIBKz6NGh5aTuCio/nh/3+zVQ9q0a/QRYGMGleiSg+Cf90CGgNvAsj2jMsE0/Bb 1GyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776303917; x=1776908717; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=OKDEZSLh1AKJTfcufzvkWS/8q0HtrqytT0nTr+xfzJE=; b=YTQZvar11//dU+mhHZbGsq5eGjzNvKZ9uSiTXQmj384IvFWRm9y6QRQnrzsKDkiFcW hLBEJleZvQtFiJmprDNbMI8fTJF00zLAiQ7v8QyuEndDav2L4sY+gBwBkxDxr1dFmwDL qR7UEpQ8KnnwsmIh0jsJalEQasDN2Zb9zxyl4h2hNaZt/a927Z9jycFyyFb+8IKn9Vao 1bTnHEFnXOTz9XubpEUddKjcGKDVNYGwQjipqJx+qT/7mwPIqoPTie0pRkaYiz5spUXX nm1V9jmmMETgbgyHIsnrgzHW3+EvBNM+a4pVoR6Ul0i3G+H5At4G26Em8ayIPLF02S7U 5VFQ== X-Forwarded-Encrypted: i=1; AFNElJ/U9/vWpmlYcMIbmrwu9OCDKfU2a85P6gi3aEstSmHWFU+nXHtWVRULp3m2g5HjuPwV8CV/hHd4JIHIVZ6G@lists.postgresql.org X-Gm-Message-State: AOJu0YwmiGrYQTE3Njxj9P2sfBTGmB0vUavxz4G4VxFIw4mdMEUoSCO1 9mIBjo0Sdj+jJ4BfYbm1qQZtptG7WHecel0uPmaXGR2JuUQv/fZZb130aL3YEz4pI561gK74wo5 IAHklsBJXgG1ThLwTS8rVIBXIW9cwpFk= X-Gm-Gg: AeBDieueZyQKaoWuU1IL58aXmo3JqPuafiaqBA6SsP+8Wgz18YjYecN/NoEUHYndfhC spI73Jr86J/fPIM1XRQmO1rCbt43DhJyIP5xJS9NhppeLfIYc3ffmjcUP5xwmt+Jr0HLuin9NRI DOON74wc8tX2LDUm+wx1eS8zFmTq4Cc+5Qv1kGAV1kZxoGBIeaDcsMhJJNsutORfINp5cRpLmE3 gbIhAciZlLmxAd95yIxeK6kWlr9KH9GCYwHR7VJinnldJ2nCfTQUeF8+Vp5nK41z1YvmutlBUJx 6IO6eXm7jXZw/LSaEqrzcNB3HNnNOl4BEW1FgwvQ7TH4t3+aG0LV7Oj2aiO8kw== X-Received: by 2002:a17:907:6ea7:b0:b8f:f08a:4b80 with SMTP id a640c23a62f3a-b9d724ee4f5mr1400780266b.3.1776303916836; Wed, 15 Apr 2026 18:45:16 -0700 (PDT) MIME-Version: 1.0 References: <3683430.1775173413@sss.pgh.pa.us> <3817825.1775240432@sss.pgh.pa.us> <3877210.1775272486@sss.pgh.pa.us> <2672940.1775599547@sss.pgh.pa.us> In-Reply-To: From: Tender Wang Date: Thu, 16 Apr 2026 09:45:05 +0800 X-Gm-Features: AQROBzDz_xX6NlrxRS_QC9AyFL_Jgp3sFjLoVj_cUEuoKhugpvqqlFp1ek0BYrs Message-ID: Subject: Re: pg_plan_advice To: Robert Haas Cc: Alexander Lakhin , Melanie Plageman , Nathan Bossart , Tom Lane , Lukas Fittl , PostgreSQL Hackers , "heikki.linnakangas" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk Robert Haas =E4=BA=8E2026=E5=B9=B44=E6=9C=8816=E6= =97=A5=E5=91=A8=E5=9B=9B 03:47=E5=86=99=E9=81=93=EF=BC=9A > > On Wed, Apr 15, 2026 at 6:30=E2=80=AFAM Tender Wang = wrote: > > In the plan_showdown phase, in pgpa_qf_add_plan_rtis(), we can add 7, > > 5, and 3 to qf->relids. > > It seems difficult to add "6" to qf->relids when walking through the > > plan tree.(Maybe have an easy way, I don't know too much > > pg_plan_advice related code). > > Thanks for looking through this. sj_unique_rtis is actually not set > from the plan tree walk, but based on the calls to > pgpa_join_path_setup that occur during planning, so it makes sense > that the join RTI crept in there. I'm guessing that this is another > place that needs a call to pgpa_filter_out_join_relids -- I've had a > few of those bugs already. I try a quick fix as follow: diff --git a/contrib/pg_plan_advice/pgpa_planner.c b/contrib/pg_plan_advice/pgpa_planner.c index 72ef3230abc..971f301e950 100644 --- a/contrib/pg_plan_advice/pgpa_planner.c +++ b/contrib/pg_plan_advice/pgpa_planner.c @@ -541,6 +541,7 @@ pgpa_join_path_setup(PlannerInfo *root, RelOptInfo *joi= nrel, { pgpa_planner_state *pps; RelOptInfo *uniquerel; + Bitmapset *relids; uniquerel =3D jointype =3D=3D JOIN_UNIQUE_OUTER ? outerrel = : innerrel; pps =3D GetPlannerGlobalExtensionState(root->glob, planner_extension_id); @@ -562,8 +563,11 @@ pgpa_join_path_setup(PlannerInfo *root, RelOptInfo *joinrel, oldcontext =3D MemoryContextSwitchTo(pps->mcxt); proot =3D pgpa_planner_get_proot(pps, root); if (!list_member(proot->sj_unique_rels, uniquerel->relids)) + { + relids =3D pgpa_filter_out_join_relids(uniquerel->relids, root->parse->rtable); proot->sj_unique_rels =3D lappend(proot->sj_unique_rels, - bms_copy(uniquerel->relids)); + bms_copy(relids)); + } MemoryContextSwitchTo(oldcontext); } } postgres=3D# LOAD 'pg_plan_advice'; LOAD postgres=3D# EXPLAIN (COSTS OFF, PLAN_ADVICE)SELECT 1 FROM t1 WHERE EXISTS (SELECT 1 FROM (SELECT 1 FROM (SELECT 1) LEFT JOIN t2 ON true), t2 WHERE a =3D b); QUERY PLAN --------------------------------------------------- Hash Join Hash Cond: (t1.a =3D t2.b) -> Seq Scan on t1 -> Hash -> HashAggregate Group Key: t2.b -> Nested Loop -> Nested Loop Left Join -> Result -> Seq Scan on t2 t2_1 -> Materialize -> Seq Scan on t2 Generated Plan Advice: JOIN_ORDER(t1 ("*RESULT*" t2#2 t2)) NESTED_LOOP_PLAIN(t2#2) NESTED_LOOP_MATERIALIZE(t2) HASH_JOIN((t2 t2#2 "*RESULT*")) SEQ_SCAN(t1 t2#2 t2) SEMIJOIN_UNIQUE((t2 t2#2 "*RESULT*")) NO_GATHER(t1 t2 t2#2 "*RESULT*") (20 rows) --=20 Thanks, Tender Wang