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 1w2mSA-000b7t-2T for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Mar 2026 08:40:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2mS8-008woU-1Y for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Mar 2026 08:40:32 +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 1w2mS8-008woL-0K for pgsql-bugs@lists.postgresql.org; Wed, 18 Mar 2026 08:40:32 +0000 Received: from mail-oo1-xc36.google.com ([2607:f8b0:4864:20::c36]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2mS4-00000000KMo-3OeE for pgsql-bugs@lists.postgresql.org; Wed, 18 Mar 2026 08:40:31 +0000 Received: by mail-oo1-xc36.google.com with SMTP id 006d021491bc7-67baf20e8c2so2107573eaf.3 for ; Wed, 18 Mar 2026 01:40:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773823230; cv=none; d=google.com; s=arc-20240605; b=dKNUzn1SgZuRVc7fgZxzB9DIAzedVY6oscUUuNj7ZDES2HOCJSF32YQooM2lYg/LKG o+mgvXhxqoLYHbve/oiCJy40WSGgtnuD5A2TX/Tdc4nZuE8iL9m795dP/qGNgNTopHY8 eqSN2cPw6GrLTHGUGmPn0vE1GoAWFlnuf2lIVybTQg8d+ECT4YScjKFoIaKAQoaxPmCW nf5iN6w2PYsT2xyjeahu/c4Z3hDmmeeilwjwbeLPgcdn7OY6U+974wG93lnb49wGNoT5 XpP+j94+ou04VL0utAmC14v9SylFpJ62DTv+G2AKKQ/0A6ClDqgPXYec/fjQo4VS0uMp hgqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=74m3atRmbltd0Fa6JLfogmElrHilBhiZoPBYOfFzPG0=; fh=pvwbIRxQitmwKA1zUd+VNaY4v6Ix+N4Aqk33is/KYyA=; b=IOxAhNtPhB6wG5ZtTspGjUdpYMQ7Vzayjzi5pxUDce2Td6p3RAqSXi1G2c73HPK/Ma KwZifEkJfTyu4eTIuFIPd4F2gapshQI+hJc0O7Kdm3OXuwJUtrYth6NdKjqoyY467Ve0 zVoof/Vwl2OaE17QL/xXMaCfTdy2sdPxfsBfkgpnY1V8eKuE1Fo4DX3Dr70xvIHto6jD Yilwj7CFMqzSnivzj/NqOdHdN+exFrHRCU2kuHkp/ty95BDuV0Thj3e4Vi7SeTJwsx5K BQbYHVPK2FIFP+OlT6MyNgH4glAisAV6fz2B1nSu2CuhEsFTtxeXYMMM1Xp7S9qYq39p CExw==; 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=1773823230; x=1774428030; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=74m3atRmbltd0Fa6JLfogmElrHilBhiZoPBYOfFzPG0=; b=er6m1mCeOWMd5gcs0ol8+u6dWf2Msmr2BKc+JIh3xnK9xdSh+dV+pSu6y92kS4Zv97 SDUFF+YE9Ca4/XsEzyBTyFQruU7ffNouZojiw8wjWJO6DtLDT3DMnZa0NiiySVkm+Wwg pdmEjZDANCFB9FpIERU7Nz2mefUInyMPTR6Og4XKzZwuiFfxEexCHsVG9fCm4rc5C+mz DmKaaYQGs0Sn4dx2x8xFqUuIvKjKLng31uRY1j2vEx1uYqXK2TXRkxtZD0BrhaQLmpcv e2y5rLRCSHnw1ZYw9c8yKEKXX2NpRYcYEpmoRthc8XIKOnn6Mj77zx4wpP2DfbL+JaTf x/2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773823230; x=1774428030; h=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=74m3atRmbltd0Fa6JLfogmElrHilBhiZoPBYOfFzPG0=; b=Kt83N14o+ta8LV5fHvdWrCgiiYefms34FMlL6Q1/yjrl1SiV12WVnnsJRDYzh910iV oafELRk+6PEnJapBedUpG9mOk50rmt1ekFf+xqfQWZvhQ0MY/KQyvbFtdrwFSIbHWY8Y tZGtkwoEpVVywJCxRJPnAGMkUW2dIbSs2Y/HUGi0u/4R4bUhPB6z5sCXTgiHzuVAeydk WH1WBIsBrE5cdhU9yE7n0sKqLlBuCqBk80fOgsePC414JgHdRA8SCrCDWGLt4zMnIP+L cHiLZrYhp0eG6+QTMgO3e7ko3rrSazHoWIdhudA83LWVk22auL+AMwndiYQ00UKuNuO/ W8Lw== X-Forwarded-Encrypted: i=1; AJvYcCWWWmLaszth5gTWM/PEbYsCaOLn15dWlEMJdHHhxQwZOTW0EMYpXiQrKwz+Nvb+a+yi2xPNZ3phT0oW@lists.postgresql.org X-Gm-Message-State: AOJu0YzP3ijEstL1AKsjGp8s0r2iNEe9oocMlFBPA2s/8dTHSitNDvPk hQiRiMj1GwJNBlohRCpku+tX2T6N1wfBmnwJBSBOjvKLOeUihe4DdDgiiVVpU9SChpe8y+MJ7oe g/Cb9BdUw6Wnnk7mI634E/Mty1tJe8Vw= X-Gm-Gg: ATEYQzwOZrRHFqFpUaz2G7piN0nv0Q4YpoRU/SXedqMZ0Fqc+8c8/Gpel1A9F91Ywvq LrvKytfxmWpotjiFVoiONLQEmxyZkRD1ExTxGVzBxoMOOU72aOZhOTKIuQUTA10cPwGqFKwLRTS 3rfKqHgwQaVjNn4kx+xLPDZHxY24gI2AYzImHl4BrDbLVfI2Kn94ElOmq5rNNmS2aLyWwrQFP+Q ehfaEdLXNda0TzGYktBIyCKuHPI1yhejEVBJB1pb9gbeobpfyqeSflKge1nYQnJkn/HhzSJP36v cyqKCc/c5AhAdLRig3dn3KA7JGnAl3IsuffB2lgCefcaMbzKYVI6aeBSDOLwvkD4YMT0ksq4jt2 FyDcUPpEmFcpljFgZ X-Received: by 2002:a05:6820:1518:b0:67b:f14c:9e4 with SMTP id 006d021491bc7-67c0db37770mr1550469eaf.67.1773823229719; Wed, 18 Mar 2026 01:40:29 -0700 (PDT) MIME-Version: 1.0 References: <19435-3cc1a87f291129f1@postgresql.org> In-Reply-To: From: Alexander Korotkov Date: Wed, 18 Mar 2026 10:40:17 +0200 X-Gm-Features: AaiRm53xRkpAueHLV6sEZ3_A8DilRZNywCij-xeKS5PMHHvj3k8NYGulPGlYA7U Message-ID: Subject: Re: BUG #19435: Error: "No relation entry for relid 2" Triggered by Complex Join with Self-Referencing Tables To: Tender Wang Cc: Kirill Reshke , Fujii Masao , ammmkilo@163.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000809b27064d486732" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000809b27064d486732 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Tender! On Wed, Mar 18, 2026 at 7:44=E2=80=AFAM Tender Wang wr= ote: > > Tender Wang =E4=BA=8E2026=E5=B9=B43=E6=9C=8818=E6=97= =A5=E5=91=A8=E4=B8=89 09:12=E5=86=99=E9=81=93=EF=BC=9A > > > > Alexander Korotkov =E4=BA=8E2026=E5=B9=B43=E6=9C= =8818=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=8817=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 wr= ote: > > > > > 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. > > 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 wi= dth=3D4) > > -> Seq Scan on pg_table_a tom3 (cost=3D0.00..34.70 rows=3D2470 wid= th=3D0) > > -> Materialize (cost=3D0.00..99509.82 rows=3D3019575 width=3D0) > > -> Nested Loop Left Join (cost=3D0.00..75564.95 rows=3D30195= 75 width=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 N= OT NULL)) > > -> 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. > > > In replace_relid_callback(), we add NullTest to rinfo, but it is not a > logical equal check by restrict_infos_logically_equal(). > I think for baserestrictinfo, we can just use rinfo->clause, no need > to check the equality of RestrictInfo. > > I tried this way, the plan looks as follows: > QUERY PLAN > -------------------------------------------------------------------------= ------------------ > Nested Loop Left Join (cost=3D0.00..115776846.35 rows=3D7498006100 widt= h=3D4) > -> Seq Scan on pg_table_a tom3 (cost=3D0.00..34.70 rows=3D2470 width= =3D0) > -> Materialize (cost=3D0.00..100038.47 rows=3D3035630 width=3D0) > -> Nested Loop Left Join (cost=3D0.00..75966.32 rows=3D3035630= width=3D0) > Join Filter: tom2.col_bool > -> Seq Scan on pg_table_a tom2 (cost=3D0.00..34.70 > rows=3D2458 width=3D5) > Filter: (col_bool IS NOT NULL) > -> 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) > > No redundant filter anymore. > > Please see the attached patch. What about being more generic and call ChangeVarNodes_walker() for the node in ChangeVarNodesWalkExpression()? It also works with out case and avoids code duplication. Changes in restrict_infos_logically_equal() makes me a bit uneasy. I see, restictinfo's are different by their outer_relids. Why outer_relids doesn't matter when required_relids is singleton? More general when do outer_relids matter for add_non_redundant_clauses() if we're putting restictinfo's into a single list anyway? ------ Regards, Alexander Korotkov Supabase --000000000000809b27064d486732 Content-Type: application/octet-stream; name="0001-Fix-sje-bug-v2.patch" Content-Disposition: attachment; filename="0001-Fix-sje-bug-v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvs0w6t0 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMKaW5kZXggMTJlOWVkMGQw YzcuLjRiOWI1ZDU2M2Y2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9h bmFseXplam9pbnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9p bnMuYwpAQCAtMTYzNSw5ICsxNjM1LDE0IEBAIHJlc3RyaWN0X2luZm9zX2xvZ2ljYWxseV9lcXVh bChSZXN0cmljdEluZm8gKmEsIFJlc3RyaWN0SW5mbyAqYikKIAlpbnQJCQlzYXZlZF9yaW5mb19z ZXJpYWwgPSBhLT5yaW5mb19zZXJpYWw7CiAJYm9vbAkJcmVzdWx0OwogCi0JYS0+cmluZm9fc2Vy aWFsID0gYi0+cmluZm9fc2VyaWFsOwotCXJlc3VsdCA9IGVxdWFsKGEsIGIpOwotCWEtPnJpbmZv X3NlcmlhbCA9IHNhdmVkX3JpbmZvX3NlcmlhbDsKKwlpZiAoYm1zX21lbWJlcnNoaXAoYS0+cmVx dWlyZWRfcmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKQorCQlyZXN1bHQgPSBlcXVhbChhLT5jbGF1 c2UsIGItPmNsYXVzZSk7CisJZWxzZQorCXsKKwkJYS0+cmluZm9fc2VyaWFsID0gYi0+cmluZm9f c2VyaWFsOworCQlyZXN1bHQgPSBlcXVhbChhLCBiKTsKKwkJYS0+cmluZm9fc2VyaWFsID0gc2F2 ZWRfcmluZm9fc2VyaWFsOworCX0KIAogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jIGIvc3JjL2JhY2tlbmQvcmV3cml0ZS9y ZXdyaXRlTWFuaXAuYwppbmRleCBmZTg5NzU0YTczYy4uMmFkNjYzYzk1MmEgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMKKysrIGIvc3JjL2JhY2tlbmQvcmV3 cml0ZS9yZXdyaXRlTWFuaXAuYwpAQCAtNzQ0LDYgKzc0NCwxMiBAQCBDaGFuZ2VWYXJOb2RlcyhO b2RlICpub2RlLCBpbnQgcnRfaW5kZXgsIGludCBuZXdfaW5kZXgsIGludCBzdWJsZXZlbHNfdXAp CiBib29sCiBDaGFuZ2VWYXJOb2Rlc1dhbGtFeHByZXNzaW9uKE5vZGUgKm5vZGUsIENoYW5nZVZh ck5vZGVzX2NvbnRleHQgKmNvbnRleHQpCiB7CisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJu IGZhbHNlOworCisJaWYgKENoYW5nZVZhck5vZGVzX3dhbGtlcihub2RlLCBjb250ZXh0KSkKKwkJ cmV0dXJuIHRydWU7CisKIAlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLAogCQkJ CQkJCQkgIENoYW5nZVZhck5vZGVzX3dhbGtlciwKIAkJCQkJCQkJICAodm9pZCAqKSBjb250ZXh0 KTsK --000000000000809b27064d486732--