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 1w2nUb-000c8L-38 for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Mar 2026 09:47:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2nUZ-009DLI-2z for pgsql-bugs@arkaria.postgresql.org; Wed, 18 Mar 2026 09:47:07 +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 1w2nUZ-009DL2-1m for pgsql-bugs@lists.postgresql.org; Wed, 18 Mar 2026 09:47:07 +0000 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2nUW-00000000KoI-1Bid for pgsql-bugs@lists.postgresql.org; Wed, 18 Mar 2026 09:47:06 +0000 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-b932fe2e1a7so66828566b.1 for ; Wed, 18 Mar 2026 02:47:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773827223; cv=none; d=google.com; s=arc-20240605; b=O7496bgAkGS+hLEjEyMPfJJyg2j+S/WLezTQH7AFlaveWdkP8Itfu1wGnqTR3C+At/ 2ckrRdpi5UjWB2pmRO+4gGGoqJKBnXyiRI7GPEUAOwXDK35Lxi7nY34Tcv3t7O7mnC4/ T/aEWJeOY2TO6BaLRl/K3Lhp+sSbwZfsYJPVgN64mytOKHAnf0Fy/wPiZCCbNWzF2rQJ y11sSyYMfKw0Ckn9S5eiWbWPljVaWv0lAOWMiczFXK5nMa3511qForsKKACsMhoAQ1Af QarL1wmTiXKYfFosVIJXJk2esuMN1crN5hy/05sdTHt6FqnEarp4yKib6XTdOnD+2+em xmLQ== 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=FW/I1cHwaO/HL3GLJEeaPgBYN8ir1+c5MVEQQaPtAeE=; fh=B9JvPbdkwNJPyoeXfC9RN/BllB5wR39g09SZVebVc4s=; b=M4SDsp63g/Qu8rMhWowc9c4YVzIhBTjjQYJTSM9jAnMW5Ry4qYvyzY/sAJ03kYNMzH f/J3OrGLEwY8+6toz3zBGLZYKSQDDe7P9SLxng6nz2RGQySDV+Jgh2iIYKwW8mIIYpRT kSjafovqY8T3cIY9U4DgQQb2RflL2nz4vn2m1Tj+YOzClvzwzov+61Qt95c//Dh5JQgP U+twVxBCv2R+84T1Jbr/ZmnnDwLYuR4+k11acBJa/Qyg1HlU3eKCN8TKoKsESKkzeXv/ lbgb3ZXMcPJD+4W3tZoLk5cD/ZeRxAItcrdOa1BNbq4yLltnwLHiecEiOpVQCtM/DB8p q32A==; 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=1773827223; x=1774432023; 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=FW/I1cHwaO/HL3GLJEeaPgBYN8ir1+c5MVEQQaPtAeE=; b=hCvzOPoftMc/Neh1e85qJ4Ae76pDnr9S7wE5FOWpECO2RFlK1Ll9j3hvWpO5OTQBwU BFQ+AHL/Y0tRZQxiPaFkupiO4O8PbAwN3JYbU9H9qwS67unNhKtTkY2fiqJLKIwn71wU IlTcvPjet5yP0u0wNQlvsdINFkaOqLxuXQ18DVy+NK9EcT5Uvuv2Z1QxaNXzuFZ/NQR2 MiVGU/LYVye55tyuWudfW2+zU8tzynkt8fQLSP3kfP9WK8jYAns0SU8MCVPzV0czDByC CqzQMIXkIafJ5y8lrHfZyoj3oqYePNuvwMa7DIuyAIAFOVA9hVnmgb4H2trQc4nWx5r+ yIWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773827223; x=1774432023; 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=FW/I1cHwaO/HL3GLJEeaPgBYN8ir1+c5MVEQQaPtAeE=; b=IekT5+6/g462EneuHlN2Yk+gAEqQ54uCQLQrV+fzLLdMr7YsAAf/IMIo7KhKwF79aP UgRqBXY/wA8I6Vob1e6zg4/+cYeyQexU+GwJ9gd3xLPtIeyhrvadN+X7zgicAsHeNx9g j6PDyWroSbpjW4K/FOEoYEUQLlIVZDqjPUBQclfjU/25Q87Sqvw87kZVd8sPNjK66OIU XK5pSMP33b1rtu1L/oG+zFSzVqUsJy8xgt+prFF1seCz+a36AgYB9adT/pN7Gh5mWxrn AGE03M5BqoG+34g1OyJyECIsxy0bBh4f6odHaKbIMRiG/5KvgELyfHH2ayiVisxiCXeA 4dIg== X-Forwarded-Encrypted: i=1; AJvYcCUdp8s0wl2abBbYliRfgzSBiD7GoQnuoRM8jFS7Ti1bQIOl3jH/+1ibOUR2y/A+qV90CCPAm1vhoGcj@lists.postgresql.org X-Gm-Message-State: AOJu0YyTjaNRVJGnNIbVDQ9KC3XciLfChngrIUzgxhomRv1CjfwsuOl9 JyV7G6/1i1Pt0Ght6f7+aAD0ffdp+WnQfP7fI3bExc9fqPSHA9X3aRemthA1htfGixy/o3QzyZ1 6gdAiIepNJd1o6tJG5b5tCk56MzCPIsE= X-Gm-Gg: ATEYQzx3p0ao/XEXzDfxojYfJK8kqEI+BY5tkBSe8h9ote48d3H90wuASF4KW5MuLjQ 4eYStUg/mGVNgMsgpvm+yzh+ZE0KqMOYGVJN8+HEA+AehwXHb6Az5eLq/Q9p66RxAFUltFFQBd1 8zyPX8BsjqrcV9Hx2DDFOspUp49iifPY4Nv32fhu19WJs7HDJ4Ku3URalv4f3INTgroDbK0CciE 3DX9toOnyAgta+g+DarkWCI6n5da41G2/7cwvdRHCPt/8cYLpZmfqmjvuxMywN7vJygvHJJ2L/o XkM7VlwMMdJuR2g= X-Received: by 2002:a17:907:d12:b0:b94:1df4:3525 with SMTP id a640c23a62f3a-b97f48852dbmr155129466b.1.1773827222901; Wed, 18 Mar 2026 02:47:02 -0700 (PDT) MIME-Version: 1.0 References: <19435-3cc1a87f291129f1@postgresql.org> In-Reply-To: From: Tender Wang Date: Wed, 18 Mar 2026 17:46:51 +0800 X-Gm-Features: AaiRm513m6NoFU3VY32aDp8e4mN88uEoL5tZ4pZju2APw4tynblabdRTIkaAdUE 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 16:40=E5=86=99=E9=81=93=EF=BC=9A > > What about being more generic and call ChangeVarNodes_walker() for the > node in ChangeVarNodesWalkExpression()? It also works with out case > and avoids code duplication. Works for me. > > 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? (gdb) call nodeToString(binfo_candidates ) {RESTRICTINFO :clause {NULLTEST :arg {VAR :varno 3 :varattno 2 :vartype 16 :vartypmod -1 :varcollid 0 :varnullingrels (b) :varlevelsup 0 :varreturningtype 0 :varnosyn 3 :varattnosyn 2 :location -1} :nulltesttype 1 :argisrow false :location -1} :is_pushed_down true :can_join false :pseudoconstant false :has_clone false :is_clone false :leakproof false :has_volatile 0 :security_level 0 :num_base_rels 1 :clause_relids (b 3) :required_relids (b 3) :incompatible_relids (b) :outer_relids (b 5) :left_relids (b) :right_relids (b) :orclause <> :rinfo_serial 3 :eval_cost.startup -1 :eval_cost.per_tuple 0 :norm_selec -1 :outer_selec -1 :mergeopfamilies <> :left_em <> :right_em <> :outer_is_left false :hashjoinoperator 0 :left_bucketsize -1 :right_bucketsize -1 :left_mcvfreq -1 :right_mcvfreq -1 :left_hasheqoperator 0 :right_hasheqoperator 0} {RESTRICTINFO :clause {NULLTEST :arg {VAR :varno 3 :varattno 2 :vartype 16 :vartypmod -1 :varcollid 0 :varnullingrels (b) :varlevelsup 0 :varreturningtype 0 :varnosyn 3 :varattnosyn 2 :location -1} :nulltesttype 1 :argisrow false :location -1} :is_pushed_down true :can_join true :pseudoconstant false :has_clone false :is_clone false :leakproof false :has_volatile 2 :security_level 0 :num_base_rels 1 :clause_relids (b 3) :required_relids (b 3) :incompatible_relids (b) :outer_relids (b) :left_relids (b 3) :right_relids (b 3) :orclause <> :rinfo_serial 6 :eval_cost.startup -1 :eval_cost.per_tuple 0 :norm_selec -1 :outer_selec -1 :mergeopfamilies <> :left_em <> :right_em <> :outer_is_left true :hashjoinoperator 91 :left_bucketsize -1 :right_bucketsize -1 :left_mcvfreq -1 :right_mcvfreq -1 :left_hasheqoperator 91 :right_hasheqoperator 91})" The first is tom1.col_bool IS NOT NULL, its outer_relids (b 5) is not empty because it's in the nullable side. The second is added in replace_relid_callback(). Some fields do not match. In this case, tom1.col_bool IS NOT NULL becomes a filter clause, not a join clause, and is safe to only check rinfo->clause. I think it's better to add is_pushed_down =3D=3D true check, for example: ... - if (bms_membership(a->required_relids) =3D=3D BMS_SINGLETON) + if (bms_membership(a->required_relids) =3D=3D BMS_SINGLETON && + a->is_pushed_down && + b->is_pushed_down) ... Any thought? --=20 Thanks, Tender Wang