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 1wdnm9-004MFO-1S for pgsql-bugs@arkaria.postgresql.org; Sun, 28 Jun 2026 11:34:13 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wdnm7-00GPpb-1A for pgsql-bugs@arkaria.postgresql.org; Sun, 28 Jun 2026 11:34:11 +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 1wdnm7-00GPpS-08 for pgsql-bugs@lists.postgresql.org; Sun, 28 Jun 2026 11:34:11 +0000 Received: from mail-ed1-x536.google.com ([2a00:1450:4864:20::536]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wdnlz-00000000cTd-1a1y for pgsql-bugs@lists.postgresql.org; Sun, 28 Jun 2026 11:34:05 +0000 Received: by mail-ed1-x536.google.com with SMTP id 4fb4d7f45d1cf-6982e71dfb0so2546172a12.0 for ; Sun, 28 Jun 2026 04:34:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1782646442; cv=none; d=google.com; s=arc-20260327; b=dFzKNot3+TFxm/qVfiT2hlmgk360JaTnSdGG8ME1GKINUunwofCARK/wOqKQJYBRRD zVZEptt1et97AwHFaLRX1cR4m7fozoerHGBAdlnN1DqxgRpfDrQQVLQUYdgu3cdD4/K4 KUgKMCyhRDUoxnQAcGDmrlNsWoGMfT0rfSJ8t61w0asMi5LX+XZ50LF6msuediyZ82Ff KmhU7aWXf5r7Kefsxe+ZsXY5v0ZAlUKznEZ5xWp20oWZvV/vFosbS9RwTK7360fYXJXu MaxR6lfMd4UMgRvsyNoi9BvjfzJpeOvRgEtHje7a+2dWlqfwOxPpgNswMV6L8PvJUeDm QPBw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=ERoBRTSdec06FSoK4Y/qRQbVMNJWlJoddKJWanPqsec=; fh=J/UHoSo+vA17vfOkx5loN4uzgiMsC5org6ePHx5NQ+4=; b=PDtHyto/tDiHsqDCyMXS2Vjg+jthgKoSmHruWizMIXoWEkoxPPqKIzL9q+5r4Po6ji c0uj+9PpBE59utc6Yv1/1gw7fsnwXKtJ/WM1udAydZB7yt1ZmZ0QBTkKUiKDczkqVtpo EjofmzBBHffg0tvyhl1OUltc+Gv+A58TmPr37K6rgcRqCmQ900w6NENOT9NcFwU6T+Bi z048sI7BilaRGZDHsCjJMV41yvQ2xQJOaofzMKUK+68JLp00U4rUtUhIwqjUeO7cplJr 9O8x1iLQscNcas5lh5K8ilWSJNFxbglr0cjUUIDgVGCy/J35PanlXyEQI9udGZ04kPTy ucVQ==; 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=1782646442; x=1783251242; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=ERoBRTSdec06FSoK4Y/qRQbVMNJWlJoddKJWanPqsec=; b=nZ0xTno8Esp+378fqtohCqLQ8XGVqTvRjRMaxWUSB3sBxj5udR5HsipnAbhJS9CDWb w8GihxelGfdAwCzgrKpol8JCDNR3WXMvPSMuUDsejzqCJe3ICWJEJBdii2lX63R/N1pL Tpu68n4xUgMdE7s3Xk8357sNrxEk9mrBjJzmH3EXcGMLP90Pd2qaevnY/yga5/8EG1OP Y6NlsI88P3eoSyXEnMSrli+0Kw9TxbSoxiAxbN0RtnUvp07m6AJVrAQoe1Q9bqp0Bf6M E+2E5eBQcQsFoIakqLTj5JxKMnAyFLZOnEP4zoy/jolor2kmi8IFrRpX/AdOxXCnCn2q nv4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782646442; x=1783251242; h=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=ERoBRTSdec06FSoK4Y/qRQbVMNJWlJoddKJWanPqsec=; b=VyObllDpJ2U2h4t808oxbmeZgHZGrl3N5lAnmzPf0HNs0M2HQaofqkJuZCfqFwOXm9 CbhqOYht1/2pFNAKx6c2W1bPL9PwWMe3mJfpCaRN70F9avSdFtkpM1+1vyGJRpcLc/c/ QC39Jj3wISZXuZJNK32OPutx+PMNPR2wUxvmNb6bzss/FZVbNvP3l/xv+OxZz/3tJb5t ybdxKdy/LrFCwVZ18ZpQV0HTcETom7/kigNp+1KLOwdEP/p1qgXWKyJ2kIQRuerJ3NbO IqaxzE1l5iD6C+OD8jiySGKn8XOinollyJTNkmF45CbQiZKjQ0/Sgbl3kBMglgIK2RJG bGHw== X-Forwarded-Encrypted: i=1; AHgh+RpAus+TgQAhtIpGg1iWW6gpTTPREUWpCBmOVhnLj+f7vWrFUiLOS8lGPafGNTlM6jFXGL5vtipjn/qj@lists.postgresql.org X-Gm-Message-State: AOJu0Yw8Tnj4oqP4z8DlBNC7oUtGTQGjZbqEbw1ltharZhCXyWPHax00 2ekqy68O/5PK7Oay3OGIQpMQNzj8tZHrej7i/CTbNNkLdw9Sd5VxrkyeOuo01aqIdKQl+am/vAs GZXs5DbH94Cpnk9ZLXj0PBONOjfWm/OM= X-Gm-Gg: AfdE7ckmFrGd2oK+jjJBHdZCOH4ECs69pPrmQL9psrMoNXPgpxokTErLR/bnS+twA9x 3pMx5M4mR0/JtH5kWMoE9OrdKuyjYYjBz8+q2sE+P34+JcfHV61MNs+ycTIJD50folhMnI3MUaE enMP+2p7zK2tCWt4tuoYuws8E+n31uv+0ygNUBMQMRChyx0hs3UuPF/ma9OVyNVM+bBruM5AV+H xnSGxYm/E0pdnTo30WsNW5rltrwpzGSbSVQ19WEPx++NHi2EgH8KboW9nCqrh9LN4q3er+TwEIW L6n1o9C8RKcpKbvqvxjP0le78Vh8NfHlYXuAEjA= X-Received: by 2002:a05:6402:a291:20b0:698:3b7c:be65 with SMTP id 4fb4d7f45d1cf-6983b7cc7cfmr1846066a12.33.1782646441760; Sun, 28 Jun 2026 04:34:01 -0700 (PDT) MIME-Version: 1.0 References: <19534-9cdf4693c42033da@postgresql.org> In-Reply-To: <19534-9cdf4693c42033da@postgresql.org> From: Tender Wang Date: Sun, 28 Jun 2026 19:33:47 +0800 X-Gm-Features: AVVi8CfzMN3wcqQ_LXL-3NPfItMBexHPSR3mU-bh70P4OOzG5vPaS7KFWazf6B8 Message-ID: Subject: Re: BUG #19534: Qual pushdown across a window subquery is unsafe with nondeterministic partition collations To: imchifan@163.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000ec173906554eb755" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ec173906554eb755 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable PG Bug reporting form =E4=BA=8E2026=E5=B9=B46=E6= =9C=8827=E6=97=A5=E5=91=A8=E5=85=AD 20:55=E5=86=99=E9=81=93=EF=BC=9A > > The following bug has been logged on the website: > > Bug reference: 19534 > Logged by: Qifan Liu > Email address: imchifan@163.com > PostgreSQL version: 18.4 > Operating system: Ubuntu 20.04 x86-64, docker image postgres:18.4 > Description: > > ## Expected Behavior > > The window query should return the same result as the reference query. Si= nce > `'abc'` and `'ABC'` are in the same nondeterministic partition, the > partition sum for row `'abc'` should be `3`. > > ## Actual Behavior > > The window query returns `abc | 1 | 1`, while the reference query returns > `abc | 1 | 3`. `EXPLAIN` shows that the strict-collation filter is pushed > below `WindowAgg`, which changes the partition before the window sum is > computed. > Yes, I can reproduce this on HEAD. The whereClause was pushed down to the scan level of table t_window_ci. So the row with 'ABC' was ignored by the filter. In current logic, we have no logic to process a nondeterministic partition clause when considering whether the qual can be pushed down to the subquery. I try to fix this with the attached patch. I add a new flag UNSAFE_HAS_NONDETERMINITIC for pushdown_safety_info.unsafeFlags. If the var is in the partition clause and it is nondeterministic, we set this flag. In qual_is_pushdown_safe(), we check the qual's inputcollid; if it is deterministic, but the var in the partition clause is nondeterministic, it is PUSHDOWN_UNSAFE. Any thoughts? --=20 Thanks, Tender Wang --000000000000ec173906554eb755 Content-Type: application/octet-stream; name="0001-Fix-qual-pushdown-with-nondeterministic-partition-co.patch" Content-Disposition: attachment; filename="0001-Fix-qual-pushdown-with-nondeterministic-partition-co.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqxpeadq0 RnJvbSBjOTlkY2IzZGUzZDBlNDJkMDNhZjcxMDI3Y2E0YjFjZDZkMTMwMTI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBVYnVudHUgPHVidW50dUBsb2NhbGhvc3QubG9jYWxkb21haW4+ CkRhdGU6IFN1biwgMjggSnVuIDIwMjYgMTk6MjE6NDAgKzA4MDAKU3ViamVjdDogW1BBVENIXSBG aXggcXVhbCBwdXNoZG93biB3aXRoIG5vbmRldGVybWluaXN0aWMgcGFydGl0aW9uIGNvbGxhdGlv bnMKCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYyB8IDM3ICsrKysr KysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDM3IGluc2VydGlvbnMoKykK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwppbmRleCBjMTM0NTk0YTIxYS4uOTk1 OTcyZTE1ZGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYwpAQCAtNTcsNiAr NTcsNyBAQAogI2RlZmluZSBVTlNBRkVfTk9USU5fRElTVElOQ1RPTl9DTEFVU0UJKDEgPDwgMikK ICNkZWZpbmUgVU5TQUZFX05PVElOX1BBUlRJVElPTkJZX0NMQVVTRQkoMSA8PCAzKQogI2RlZmlu ZSBVTlNBRkVfVFlQRV9NSVNNQVRDSAkJCSgxIDw8IDQpCisjZGVmaW5lIFVOU0FGRV9IQVNfTk9O REVURVJNSU5JVElDCQkoMSA8PCA1KQogCiAvKiByZXN1bHRzIG9mIHN1YnF1ZXJ5X2lzX3B1c2hk b3duX3NhZmUgKi8KIHR5cGVkZWYgc3RydWN0IHB1c2hkb3duX3NhZmV0eV9pbmZvCkBAIC0xNTks NiArMTYwLDcgQEAgc3RhdGljIHZvaWQgY2hlY2tfb3V0cHV0X2V4cHJlc3Npb25zKFF1ZXJ5ICpz dWJxdWVyeSwKIHN0YXRpYyB2b2lkIGNvbXBhcmVfdGxpc3RfZGF0YXR5cGVzKExpc3QgKnRsaXN0 LCBMaXN0ICpjb2xUeXBlcywKIAkJCQkJCQkJCXB1c2hkb3duX3NhZmV0eV9pbmZvICpzYWZldHlJ bmZvKTsKIHN0YXRpYyBib29sIHRhcmdldElzSW5BbGxQYXJ0aXRpb25MaXN0cyhUYXJnZXRFbnRy eSAqdGxlLCBRdWVyeSAqcXVlcnkpOworc3RhdGljIGJvb2wgY29udGFpbl9ub25kZXRlcm1pbmlz dGljX3BhcnRpdGlvbl9jbGF1c2UoVGFyZ2V0RW50cnkgKnRsZSwgUXVlcnkgKnF1ZXJ5KTsKIHN0 YXRpYyBwdXNoZG93bl9zYWZlX3R5cGUgcXVhbF9pc19wdXNoZG93bl9zYWZlKFF1ZXJ5ICpzdWJx dWVyeSwgSW5kZXggcnRpLAogCQkJCQkJCQkJCQkJUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJCQkJ CQkJCQkJCXB1c2hkb3duX3NhZmV0eV9pbmZvICpzYWZldHlJbmZvKTsKQEAgLTQzNDUsNiArNDM0 NywxNiBAQCBjaGVja19vdXRwdXRfZXhwcmVzc2lvbnMoUXVlcnkgKnN1YnF1ZXJ5LCBwdXNoZG93 bl9zYWZldHlfaW5mbyAqc2FmZXR5SW5mbykKIAkJCXNhZmV0eUluZm8tPnVuc2FmZUZsYWdzW3Rs ZS0+cmVzbm9dIHw9IFVOU0FGRV9OT1RJTl9QQVJUSVRJT05CWV9DTEFVU0U7CiAJCQljb250aW51 ZTsKIAkJfQorCisJCWlmIChzdWJxdWVyeS0+aGFzV2luZG93RnVuY3MgJiYKKwkJCShzYWZldHlJ bmZvLT51bnNhZmVGbGFnc1t0bGUtPnJlc25vXSAmCisJCQkgVU5TQUZFX0hBU19OT05ERVRFUk1J TklUSUMpID09IDAgJiYKKwkJCWNvbnRhaW5fbm9uZGV0ZXJtaW5pc3RpY19wYXJ0aXRpb25fY2xh dXNlKHRsZSwgc3VicXVlcnkpKQorCQl7CisJCQkvKiBoYXMgbm9uZGV0ZXJtaW5pc3RpYyBwYXJ0 aXRpb24gY29sbGF0aW9ucyAqLworCQkJc2FmZXR5SW5mby0+dW5zYWZlRmxhZ3NbdGxlLT5yZXNu b10gfD0gVU5TQUZFX0hBU19OT05ERVRFUk1JTklUSUM7CisJCQljb250aW51ZTsKKwkJfQogCX0K IH0KIApAQCAtNDQxMyw2ICs0NDI1LDIyIEBAIHRhcmdldElzSW5BbGxQYXJ0aXRpb25MaXN0cyhU YXJnZXRFbnRyeSAqdGxlLCBRdWVyeSAqcXVlcnkpCiAJcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRp YyBib29sCitjb250YWluX25vbmRldGVybWluaXN0aWNfcGFydGl0aW9uX2NsYXVzZShUYXJnZXRF bnRyeSAqdGxlLCBRdWVyeSAqcXVlcnkpCit7CisJT2lkIGNvbGxpZDsKKworCWlmICghdGFyZ2V0 SXNJbkFsbFBhcnRpdGlvbkxpc3RzKHRsZSwgcXVlcnkpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlj b2xsaWQgPSBleHByQ29sbGF0aW9uKChOb2RlICopIHRsZS0+ZXhwcik7CisKKwlpZiAoT2lkSXNW YWxpZChjb2xsaWQpKQorCQlyZXR1cm4gIWdldF9jb2xsYXRpb25faXNkZXRlcm1pbmlzdGljKGNv bGxpZCk7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qCiAgKiBxdWFsX2lzX3B1c2hkb3duX3Nh ZmUgLSBpcyBhIHBhcnRpY3VsYXIgcmluZm8gc2FmZSB0byBwdXNoIGRvd24/CiAgKgpAQCAtNDUy NSw2ICs0NTUzLDE1IEBAIHF1YWxfaXNfcHVzaGRvd25fc2FmZShRdWVyeSAqc3VicXVlcnksIElu ZGV4IHJ0aSwgUmVzdHJpY3RJbmZvICpyaW5mbywKIAkJCQlzYWZlID0gUFVTSERPV05fVU5TQUZF OwogCQkJCWJyZWFrOwogCQkJfQorCQkJZWxzZSBpZiAoc2FmZXR5SW5mby0+dW5zYWZlRmxhZ3Nb dmFyLT52YXJhdHRub10gJgorCQkJCQkgVU5TQUZFX0hBU19OT05ERVRFUk1JTklUSUMpCisJCQl7 CisJCQkJaWYgKGdldF9jb2xsYXRpb25faXNkZXRlcm1pbmlzdGljKGV4cHJJbnB1dENvbGxhdGlv bihxdWFsKSkpCisJCQkJeworCQkJCQlzYWZlID0gUFVTSERPV05fVU5TQUZFOworCQkJCQlicmVh azsKKwkJCQl9CisJCQl9CiAJCQllbHNlCiAJCQl7CiAJCQkJLyogVU5TQUZFX05PVElOX1BBUlRJ VElPTkJZX0NMQVVTRSBpcyBvayBmb3IgcnVuIGNvbmRpdGlvbnMgKi8KLS0gCjIuMzQuMQoK --000000000000ec173906554eb755--