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 1w2jiB-000YIJ-0U for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Mar 2026 05:44:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2jiA-007i5d-0D for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Mar 2026 05:44:54 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w2ji9-007i5N-2V for pgsql-bugs@lists.postgresql.org; Wed, 18 Mar 2026 05:44:53 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2ji7-00000000sVN-1OKa for pgsql-bugs@lists.postgresql.org; Wed, 18 Mar 2026 05:44:53 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-b97cf8a73d8so312493066b.3 for ; Tue, 17 Mar 2026 22:44:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773812688; cv=none; d=google.com; s=arc-20240605; b=kdaYusNOs68OUl839gSVp+pBkIoIY2c8WdGx7ryzPLE6qZ+Yr4jPH9ZmqzjVYXOAOj rpNg0zjLGw6iv3UklWh7JOS/7cRnfE5MtARsvYTnS02OD0YOkDCoKsQt3ox3wGTEkNG/ tWnhwvsQf6Y8E3Bp78cSv6Wz1qJT0cP3nVT51AI35GuVL3BvLehpv5+pQbpq5zfaU1qe kKyurYR6SWBvtIIekw8VbjOX3mTwr1yWg5gBu1SFTULf1y0cCjHo2Ht4LEZZU0jkSqYh 8qB1mI36xwhMIyjb3wpdCNxW7fZB3I2FLHpgwSbyCojH+qho0/8VaJzVx2XFTstsoDPq H0TA== 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=aKKMzr8aj8DKO3F2x2x2cQKkMmRDvnCppFwi3rUm9k8=; fh=jZb+GuwLSMoR3S+UUIKo9D87XxCQg1ie9ub+uGmsHRA=; b=fu1DGOvsHZ5EhX++6y75WJmT7CWN/LycAzhjBXbsPE9Jtl+0ESIlaKb0qoAw0hsGzT emjvfO6/5HlYo6wf1g+qNQLobUIqttK/j6d9U5gCPKoPpxMBDSn3/X98bP2un6AZCl0+ cHYKA+QW7cCtnpdxKyxhctI/e6jzdchZuo0RbJWmYAD2bCsj5VwRDo/wVwPcb0gIX2LU ZQ/dfVcQdBNafsKGTiAUC1ebNrIzXLguc9ts1l8fG+jp91lRFaEgBHs5nvn90hksZatg WZwH0SXyGTBU8na2zCjd9+LgLKJYeAb2MQjsmgyl7tMpybzF+we2ZgY7fWZ3Esw2WtCe d5gg==; 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=1773812688; x=1774417488; 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=aKKMzr8aj8DKO3F2x2x2cQKkMmRDvnCppFwi3rUm9k8=; b=Lb/ZTh5RhesdDadCAyCke9YNoCC/p8PkfBbrs2Ko9UNIhTCsGbpKhRnRKTMjoABfDo kTWvAw0xpbpto8m0PTsrYhtQwu2sUdMcOMKla1CRnPDF1ZlIfUPEfeJS5eU5yYCjIJnS 9c6Z6mpMWBwn/9iNm38gUV2sJRSnYKPJc4sUeOHyU+bWXIYTlvSlPMm9KHlPqoVmFI3E J4vY6zAxWlCTB/1fplPD79EqfJMdXIH15gAUR6+4hdOvMUbJVn3WfI4dScMpMTv1KmS0 MHxlb5ZiIQtkmRDAEQ3gthLSaMkntR5oUJGYmgXMFrQAE7+zFanDMmiv50x2IE6xgrWD ohlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773812688; x=1774417488; 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=aKKMzr8aj8DKO3F2x2x2cQKkMmRDvnCppFwi3rUm9k8=; b=kyFbbACGPb0CyttIKWJ3/FSJv9mNzj4ArjWJCEf8YDtIGRKsoT9FS17NxnHM4IbT+I 9Ht0h/BfbTF2fahei06lUg8r8xYy+W7z9KHl4we1zNkXe0Tqqb4Cjj5mvRYYfX5Ye51m ZFLP49Hj0yBQLSumvcpFweauOAV2ftKHkzKPcfXbS+FtTKZqCpJ8NlwzuU5y+zFsdBm2 kC/tChPniDfHZl1Y82tNgHpgkB7UMh4Xz+TU/eK/TLnvKcqZ8I/aEM6LNSiKQEddmuNg 2lv1kIQDRVa8yL5CWfWRuRKqaYnAjwJAr+xmHqnxplw91kjvnGKMaE7BD31lx0IKg6rV IdIg== X-Forwarded-Encrypted: i=1; AJvYcCUIH/A1qlrjSQAdic1ddVMoYdgAqhsWPruLIw/nqBoRM5iw1Z9wKE3aAnjdXRNcInTjLa5ReroJpM+F@lists.postgresql.org X-Gm-Message-State: AOJu0YwLwaTpSdebW5FeG/AKarak8hTC/ReZEhCWwdX1vF8+sPe3XPBX ymq/cnyMMw8tFsq79auyGSO1riEu9Clu8oH30+e8Dq9rJNKVEwbmBvsqFPLCEa0dtqFZ3u9f6bS wAuV9JWk1c+b1VDRmeNZIBCM4pihqBiY= X-Gm-Gg: ATEYQzxiBoigR6XHS5irK9/+Mli4ZTgdQngyC7TCibroRsJe47H+v3xVV3l6O/lBecv Eo67zmZ4mTsBDHOqImQXjlFUfRYwgHCPIeGlyzwvKqy0iyqxIo3MV6umETDOvkQ1DvwFIehewZU HXbZ8Gxtdjo3SGciEN9T4/W2PLgQUf43eCfoPp2U5Y1yzt13SG5/Gf/dlj45CBgm7u6OQ3G72v/ Mfjq17dLmZyifF9cL1yqlLPcYnfkwQgIGHAY1j1OHJipkmZKRRgzSbKxusLacqBAIIHp/wPuFcZ nMG32g7H X-Received: by 2002:a17:907:960d:b0:b93:9407:ea62 with SMTP id a640c23a62f3a-b97f4a2eabemr112586066b.54.1773812687775; Tue, 17 Mar 2026 22:44:47 -0700 (PDT) MIME-Version: 1.0 References: <19435-3cc1a87f291129f1@postgresql.org> In-Reply-To: From: Tender Wang Date: Wed, 18 Mar 2026 13:44:36 +0800 X-Gm-Features: AaiRm53iWVtfOaRAHql2Ivffy1uYZdzTArbvLmV6clTboXjayUNiqnHOIKvJAdw 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: multipart/mixed; boundary="0000000000002758fa064d45f3c1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000002758fa064d45f3c1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 wrot= e: > > > > Yes, it looks like your analysis is valid. Will you share a patch f= or > > > > 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 widt= h=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= 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 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) > > 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 width= =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 w= idth=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. --=20 Thanks, Tender Wang --0000000000002758fa064d45f3c1 Content-Type: application/octet-stream; name="0001-Fix-sje-bug.patch" Content-Disposition: attachment; filename="0001-Fix-sje-bug.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmvm8mqq0 RnJvbSAxM2I3MjA0NzRmYjA0ZTkwMjdhYmI3MmFlNjNlYzY1MWQ2ZWQ4MGM4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUZW5kZXIgV2FuZyA8dG5kcndhbmdAZ21haWwuY29tPgpEYXRl OiBXZWQsIDE4IE1hciAyMDI2IDEzOjI5OjMzICswODAwClN1YmplY3Q6IFtQQVRDSF0gRml4IHNq ZSBidWcKCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vYW5hbHl6ZWpvaW5zLmMgfCAx MSArKysrKysrLS0tCiBzcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jICAgICAgICB8 IDI2ICsrKysrKysrKysrKysrKysrKysrLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDMxIGluc2VydGlv bnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vYW5hbHl6ZWpvaW5zLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXpl am9pbnMuYwppbmRleCAxMmU5ZWQwZDBjNy4uNGI5YjVkNTYzZjYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCkBAIC0xNjM1LDkgKzE2MzUsMTQgQEAgcmVzdHJp Y3RfaW5mb3NfbG9naWNhbGx5X2VxdWFsKFJlc3RyaWN0SW5mbyAqYSwgUmVzdHJpY3RJbmZvICpi KQogCWludAkJCXNhdmVkX3JpbmZvX3NlcmlhbCA9IGEtPnJpbmZvX3NlcmlhbDsKIAlib29sCQly ZXN1bHQ7CiAKLQlhLT5yaW5mb19zZXJpYWwgPSBiLT5yaW5mb19zZXJpYWw7Ci0JcmVzdWx0ID0g ZXF1YWwoYSwgYik7Ci0JYS0+cmluZm9fc2VyaWFsID0gc2F2ZWRfcmluZm9fc2VyaWFsOworCWlm IChibXNfbWVtYmVyc2hpcChhLT5yZXF1aXJlZF9yZWxpZHMpID09IEJNU19TSU5HTEVUT04pCisJ CXJlc3VsdCA9IGVxdWFsKGEtPmNsYXVzZSwgYi0+Y2xhdXNlKTsKKwllbHNlCisJeworCQlhLT5y aW5mb19zZXJpYWwgPSBiLT5yaW5mb19zZXJpYWw7CisJCXJlc3VsdCA9IGVxdWFsKGEsIGIpOwor CQlhLT5yaW5mb19zZXJpYWwgPSBzYXZlZF9yaW5mb19zZXJpYWw7CisJfQogCiAJcmV0dXJuIHJl c3VsdDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlwLmMg Yi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCmluZGV4IGZlODk3NTRhNzNjLi5m ZmY1NjZlZWIzYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAu YworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jCkBAIC03NDQsOSArNzQ0 LDI5IEBAIENoYW5nZVZhck5vZGVzKE5vZGUgKm5vZGUsIGludCBydF9pbmRleCwgaW50IG5ld19p bmRleCwgaW50IHN1YmxldmVsc191cCkKIGJvb2wKIENoYW5nZVZhck5vZGVzV2Fsa0V4cHJlc3Np b24oTm9kZSAqbm9kZSwgQ2hhbmdlVmFyTm9kZXNfY29udGV4dCAqY29udGV4dCkKIHsKLQlyZXR1 cm4gZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2RlLAotCQkJCQkJCQkgIENoYW5nZVZhck5vZGVz X3dhbGtlciwKLQkJCQkJCQkJICAodm9pZCAqKSBjb250ZXh0KTsKKwlpZiAobm9kZSA9PSBOVUxM KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKG5vZGUsIFZhcikpCisJeworCQlWYXIJCSAg ICp2YXIgPSAoVmFyICopIG5vZGU7CisKKwkJaWYgKHZhci0+dmFybGV2ZWxzdXAgPT0gY29udGV4 dC0+c3VibGV2ZWxzX3VwKQorCQl7CisJCQlpZiAodmFyLT52YXJubyA9PSBjb250ZXh0LT5ydF9p bmRleCkKKwkJCQl2YXItPnZhcm5vID0gY29udGV4dC0+bmV3X2luZGV4OworCQkJdmFyLT52YXJu dWxsaW5ncmVscyA9IGFkanVzdF9yZWxpZF9zZXQodmFyLT52YXJudWxsaW5ncmVscywKKwkJCQkJ CQkJCQkJCSAgIGNvbnRleHQtPnJ0X2luZGV4LAorCQkJCQkJCQkJCQkJICAgY29udGV4dC0+bmV3 X2luZGV4KTsKKwkJCWlmICh2YXItPnZhcm5vc3luID09IGNvbnRleHQtPnJ0X2luZGV4KQorCQkJ CXZhci0+dmFybm9zeW4gPSBjb250ZXh0LT5uZXdfaW5kZXg7CisJCX0KKwkJcmV0dXJuIGZhbHNl OworCX0KKwllbHNlCisJCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5vZGUsCisJCQkJ CQkJCQkgIENoYW5nZVZhck5vZGVzX3dhbGtlciwKKwkJCQkJCQkJCSAgKHZvaWQgKikgY29udGV4 dCk7CiB9CiAKIC8qCi0tIAoyLjM0LjEKCg== --0000000000002758fa064d45f3c1--