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 1w2fTH-000UPW-0r for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Mar 2026 01:13:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2fTF-006KxU-1x for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Mar 2026 01:13:13 +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 1w2fTF-006Kx0-0i for pgsql-bugs@lists.postgresql.org; Wed, 18 Mar 2026 01:13:13 +0000 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2fTC-00000000HH2-08er for pgsql-bugs@lists.postgresql.org; Wed, 18 Mar 2026 01:13:12 +0000 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-666ee394529so2981456a12.1 for ; Tue, 17 Mar 2026 18:13:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773796389; cv=none; d=google.com; s=arc-20240605; b=EF6yJTOHntzPrC0TNrd2Sjh74tYmML5WDdAoezJnGaYZJHKlv06c9Wi/Lnias35Lce TOT5o1M0O3m/YPCfUFqex/ZqVgEc/UV9hHSxhEBJcaXmdomTgk1rwaRWIuZ0w6wYx+5b dBNYXb9SaV7FB+z8qwjSQo0ftZ4UOsGMAd+yuFCvOIrQ4pfiu+ylwySCjclQCntExeKK 2hN3U14Fo9CRKhD/+anPh19Xi6o7WPfFMQliYvDFXUe4/dcYHuBOgSm4fqQXlgUCCKUH +Ttu7dgtpis4oA9csPUJTTY+7MGirpiA+D1xdBLc+pJlRpBQm+ylFFJFa9R4gdat6eqZ 5Pyw== 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=DvravLV2YVe7EviQP8hsJKA7yMBTvqW6XZdP3VPsd0Q=; fh=bRSDswkRdfxMR3hhwGRdax0Om7sutQ6EF9M7rWPwe54=; b=jk2X/IP6kRam9i8q5YXpEVZfmtdde15gzsGBUu1L1wQQjvqdhmecbZVQry/LZZPNDn j7k1ZvoLZIF5R5SvBlAWXtUEbVGArFUYdFDacTMmk6KpwTXCdz1evP6zFNEEl7KAPJ9k VbLvtmKDIK4HT2TrfndW1yCTl82wWj0xOC3ulajDYyA6FwjLScdA18kZP7u1h5dZp14x IIUontXcsuNAkgdWlHRA/2RqiCt1ayjtDzWzGAGywli6l8QhOs6IQdNrYDdw8uCMtJPp 91qlRwG6fLtK3Vn0xpnLtwHmQ9m0lC9VMnvEKersCW+N0pNIkdw9ppTaag0WF1s4hT/w E9MA==; 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=20230601; t=1773796389; x=1774401189; 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=DvravLV2YVe7EviQP8hsJKA7yMBTvqW6XZdP3VPsd0Q=; b=HH1ZiyqB+PvOqbAn6hmHhILWbSg0LqqMayKCLGoZY2DqDuRBZGGKKLqci+cPjUR48f pxOa2qZ75w73YrCQ9FOcLP2g/FhOBzaeT7Hh/g+IH0MnsJ3+RVXBQmDLmliQrq5HTWPP qbgGHzZva/NmkW6tVrrlEml9fYV3SJQ340uHLMtzOQJ6gLEa0JysatgRlJwzQj7pfyWN ytKVga0iGSzHkmWyubXuinR/C5Kb+NpfES7sjAbXU7DfivTRnHGvvKOhz0aUdr+AegmH vgEqFpFkEghxFowEx0jekvvodfesqgDJUZBaxM5qqMUt45ep0yjlQxXFn146CIPbl715 y4vA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773796389; x=1774401189; 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=DvravLV2YVe7EviQP8hsJKA7yMBTvqW6XZdP3VPsd0Q=; b=pe48JuvrKxwFsI2Sj0E1w3r9EGnBE2GcXObOKt+UltsdVcYnYWseBN8isDH/EccdyV aB2S68s7WDPGY5T7qo7vdhCfWjNGmi4Gh6LvKyJejtOfDarimCJhrk4LiVMfajjPa4XK JhWjoEkjjzYczQad2kdYrlPswHfeMTRCsJb4RPb6EY2VW79ngqw7yf+5lI+L83ss3tEO 6RgS/zG3EV5uILhsdlDSQkty3H32WYe8qybDUl2uk5Jx78JuBI5XtLGlkOHN//zBsJWm eLYnfct1Jp43mEw//P2WIP3NNvBrzfhZ0AnwduhBoXifLU8xb9PBilDFJ1TAysviSJwS 5LUw== X-Forwarded-Encrypted: i=1; AJvYcCXPG1KTPpDwbhk9ukysV6kjcHfIiMdeffk3NEnOGvQBkj2Fx3ezWAfEMOdkpRsFxqS5Gu9r2dj0oWG/@lists.postgresql.org X-Gm-Message-State: AOJu0Yx0wPIT6HHsCgcRhcewoO29704DkI8IRIiD7wicASNsT4dMEMJ2 JggbaZx9SW38AzQXNdlrPy8Db71Yad0LCB0vW2Q+YDa1HmcXrsAkQ5jpzCr/tXT6mjDBKORZ3Qx uTS+m4P050zKYUJaREb4CwKat4997XdENuCEikB/KjQ== X-Gm-Gg: ATEYQzwt4FzmzJGGGmof3o9dEQYBcfmXX2XeYqRMXA22bUN4nlNmaFBvqhcplzDfoR6 Fw8b8UfaXv+SCQFz54rYWeyitltXI1iMvFmPQWfGev66r+w3d9fAqQOtI60Pq9Hf5qn0/sSsltT K+mlWJA+yyf7eCgHovvr3+P5C6j6Z54DIlclDdl27O5sbAYgQw1hlZRapHUc9h6zga+jtoFFE6H mEL0nDkFrVTj9nRXg3sQugQ5eA3k9wbBOpvgJMNaArhFk3qZCSn36UY/jvpPQCPndZk7b8QnTOt msyyGzuC X-Received: by 2002:a17:907:97c6:b0:b8e:b366:58c1 with SMTP id a640c23a62f3a-b97f4afceb4mr68142566b.49.1773796388322; Tue, 17 Mar 2026 18:13:08 -0700 (PDT) MIME-Version: 1.0 References: <19435-3cc1a87f291129f1@postgresql.org> In-Reply-To: From: Tender Wang Date: Wed, 18 Mar 2026 09:12:57 +0800 X-Gm-Features: AaiRm53JorsxayuMsGLrVrLalpFBKzEtafY0HJ0DMnMmxg0zCkKh27k-SHLh1a4 Message-ID: Subject: Re: BUG #19435: Error: "No relation entry for relid 2" Triggered by Complex Join with Self-Referencing Tables To: Alexander Korotkov Cc: Kirill Reshke , Fujii Masao , ammmkilo@163.com, pgsql-bugs@lists.postgresql.org 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 Alexander Korotkov =E4=BA=8E2026=E5=B9=B43=E6=9C=881= 8=E6=97=A5=E5=91=A8=E4=B8=89 01:46=E5=86=99=E9=81=93=EF=BC=9A > > On Tue, Mar 17, 2026 at 3:30=E2=80=AFPM Tender Wang = wrote: > > Kirill Reshke =E4=BA=8E2026=E5=B9=B43=E6=9C=88= 17=E6=97=A5=E5=91=A8=E4=BA=8C 21:24=E5=86=99=E9=81=93=EF=BC=9A > > > > > > On Tue, 17 Mar 2026 at 18:20, Tender Wang wrote: > > > Yes, it looks like your analysis is valid. Will you share a patch for > > > updating `clause` ? > > > > > Sorry, it's already the middle of the night here, so I'm afraid I > > don't have much time to work on this right now. > > Thank you for your research. I've written a simple draft patch. It > fixes the reported case, but I doubt it is correct in general. I'll > continue the investigation. The cause of this bug is doing the following statement: ... ChangeVarNodesWalkExpression((Node *) rinfo->clause, context); ... in replace_relid_callback(). The rinfo->clause is only Var(tom1.col_bool), sorry I typoed it to " ON tom1.col_bool IS NOT NULL", in my first reply email. See expression_tree_walker_impl(), it does nothing if the node is just a Var node. So I think whether we can add logic in ChangeVarNodesWalkExpression() as be= low: ... if (node && IsA(node, Var)) { Var *var =3D (Var *) node; if (var->varlevelsup =3D=3D context->sublevels_up) { if (var->varno =3D=3D context->rt_index) var->varno =3D context->new_index; var->varnullingrels =3D adjust_relid_set(var->varnullingrels, context->rt_index, context->new_index); if (var->varnosyn =3D=3D context->rt_index) var->varnosyn =3D context->new_index; } return false; } else return expression_tree_walker(node, ChangeVarNodes_walker, (void *) context); ... I tried the above fix, no error again. But I got a plan like this: QUERY PLAN ---------------------------------------------------------------------------= ---------------- Nested Loop Left Join (cost=3D0.00..115164616.71 rows=3D7458350250 width= =3D4) -> Seq Scan on pg_table_a tom3 (cost=3D0.00..34.70 rows=3D2470 width= =3D0) -> Materialize (cost=3D0.00..99509.82 rows=3D3019575 width=3D0) -> Nested Loop Left Join (cost=3D0.00..75564.95 rows=3D3019575 w= idth=3D0) Join Filter: tom2.col_bool -> Seq Scan on pg_table_a tom2 (cost=3D0.00..34.70 rows=3D2445 width=3D5) Filter: ((col_bool IS NOT NULL) AND (col_bool IS NOT N= ULL)) -> Materialize (cost=3D0.00..47.05 rows=3D2470 width=3D0) -> Seq Scan on pg_table_a tom0 (cost=3D0.00..34.70 rows=3D2470 width=3D0) (9 rows) Filter: ((col_bool IS NOT NULL) AND (col_bool IS NOT NULL)) This makes me unhappy. Your patch gets the same plan. --=20 Thanks, Tender Wang