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 1vxNzw-00BRqR-1w for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 11:33:08 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxNzt-006fbs-2s for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 11:33:06 +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 1vxNzt-006fbk-1y for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 11:33:06 +0000 Received: from mail-pf1-x42f.google.com ([2607:f8b0:4864:20::42f]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxNzs-00000000AdN-1Cvv for pgsql-hackers@postgresql.org; Tue, 03 Mar 2026 11:33:05 +0000 Received: by mail-pf1-x42f.google.com with SMTP id d2e1a72fcca58-823c56765fdso2774084b3a.1 for ; Tue, 03 Mar 2026 03:33:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772537583; cv=none; d=google.com; s=arc-20240605; b=KgAo/gXD+si9d4dQXbPhfE4yiW5e3kWxkMZ6CDn8wt/clcisy4BdpeAbGN7SMW/AqP qSQpbViRDKsSXSsjDTqyCNSWW71gvxevNWP7AnklshHZ7Fot661h07QbuzP3n7nfZ1SI kVLXrJ6fV8QfaJOUIOLvGUXe7DQRgc/YI8tlZGCoTSZVe0iR3/KWrxhzYcU1NwTPqzrq RN26oqYagnCnRDULvmcu7tOWzdN0+Ajub2XkzFKQBQ9slKxQt4fmUndgZ1x7rcw0s+ru YS15gX8Ee+XjDIFvp+X6srITBaoAKGFvfv3P7f6f8pIkThbp8jDz/2C9faQTVhwpyvH/ 3vDg== 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:reply-to:in-reply-to:references :mime-version:dkim-signature; bh=CRaeiwANFXWKC+3pjqd+PTnxoLqZiCcBbrijkR/YOqs=; fh=p1p+XWvmF6dnzi7vG+zxAy69bmZDexuKqewZAtbAMxA=; b=W5VVnADJQ8Ab7vIUzxTj582gLcn/tf68KSarfKuHIbdO2t/o21XtVZvapCXzAua4sX yRKx6oYxY/cC7UPdwJxXzRMOY9kXIXtq1g62KLSEwjnj7PklYy/xx3/irS8kUdhOqkFO 11VxWz8vfZYN7pK6FO7dJ6rY/FOROg5E6Xe+5pyCXfnlOAbuqtXSGOK9TR87ARaN237/ yFA2hzmEjwn7TvcSSDDZ/DAK3fkCNUjO+wAl1OxepPk/eEIsbp0u22FpASkU25bQHJjs FksFw2HdRC8qfTAIXFoK7oF10EfQxo7RxuHfPPreik0AFOg8wTFyCKuO3bfeibl0gqXF 1slA==; darn=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=1772537583; x=1773142383; darn=postgresql.org; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=CRaeiwANFXWKC+3pjqd+PTnxoLqZiCcBbrijkR/YOqs=; b=i9sOpJqSt4LvXmpuwOVj4sJ/TToaLLBxNCrxzXKhotxVriepOe5o5ixGmWM1atLvkp AIr/t74rTWwXLH9BCOqzFWz+iaZgfZgF3CPgbTaxK/mBh6Dxns9At9JtIS+gGEy2Vvz8 +9nNzBbX82fCFC8jIbdsWirC+A+cVfUY8fjLx2CmZRoqBYYVLhN9wDHxolrAYF/HLkVx NWRRQYCKEglXM+yySR+p7gQMImuXJ9k58BzRhm/FkHEWR54m1oUeyesmLiBKlVz49Xff mdLHhm2OgkOBz1jpRuF1GEuRCaHCdSybGM6CHR++X5L0eK6ArA/736FY8lakuaYYlx4v 4pwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772537583; x=1773142383; h=cc:to:subject:message-id:date:from:reply-to:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=CRaeiwANFXWKC+3pjqd+PTnxoLqZiCcBbrijkR/YOqs=; b=clFUMA2WrjjsHDtjPf68xtGIg1wX5O9VdH75eGLCqr0kjxVuo5TlSY45a6sMBFiyyQ AbgaBTfkmr1DivVtWkEb05kQi5OkbtzlqNa3CrWFHUTzJZi8QbOp77d3pYArESEl2m09 wHp2xGKtC9c5s3JrmBrZTOrVW+8/9KRXOYbxGcdju2vYoL3Hcseu3uzaqdR4+d98ZLsM JDMK6x7xxPPnveWnSyjGbGytVaY/Bw5juSIw2NdOe5gAjxJgm11FyvQiZVqDxXKP6Xu5 yuzoSjybGlWOo78mfh/7q5/XIJ708N7CH8WK7fKADQTwa7yuQVbu2i3hontvDzhODO5u kmXw== X-Forwarded-Encrypted: i=1; AJvYcCUPdpk+tBKzXHYCBSAwuFkBy6GhUu+XLqLeDdxn8sfaNbGzCDNzPnFhZ36U8Tn8PcvRZo0Gf7JrENRGVumP@postgresql.org X-Gm-Message-State: AOJu0Yzpv1rnb3r7WNcpIFPcsBA08/QEiwG/jcKCnVkrY9HYO+xwBSl4 kQqUshiBcjTCFUF9ZuoyGBGnbAAmnVDOILkce9pW8QBb6nBEZ1TPZIJaNrrYU+3OCd5o+gPVy4t anzxN+JYDOy5qAnbiTV/BoZry3IQERO8= X-Gm-Gg: ATEYQzzzYOrNaKeWlN3VOrqStvoXFGJuUjGbg7mh4bcVEzE6DiHYIVg8ntgJKkt/BFS BR/474etIwfcilcunpcfsI77qic4RF/fPHKzx6URhWoKEmcv8/CSwpwF3I+vyktbBt1hCW0cV2I DBsmgVkC2CCyA8hezyp1w/VUzcL4LS7yBZQ0ITBezyFd6DM6xAlTCnxkb2wmAp20NX1ObZxpuEy fKkQv1A6nIQ04bIc5AME+6wyrf0aFpftc4E4baMe69wXeCNUhuxivByTrZJoTOHqbVVQAwIWuAE t2kuvEexAs6nG9Xscdl036yN+xy1iO2LrPUfYX//eo1jqRd7ZG4= X-Received: by 2002:a17:90a:fc4d:b0:359:1821:b4d5 with SMTP id 98e67ed59e1d1-35965c386e3mr11897732a91.5.1772537583367; Tue, 03 Mar 2026 03:33:03 -0800 (PST) MIME-Version: 1.0 References: <20260302.094632.1950837561737687899.ishii@postgresql.org> <20260302.141823.129040280886273031.ishii@postgresql.org> In-Reply-To: <20260302.141823.129040280886273031.ishii@postgresql.org> Reply-To: assam258@gmail.com From: Henson Choi Date: Tue, 3 Mar 2026 20:32:51 +0900 X-Gm-Features: AaiRm53yxc0flNqcLkf5GpDNT5ho3XNuq09fhi7s4nEPjjZ3k9_mjFPqr5jqmwk Message-ID: Subject: Re: Row pattern recognition To: Tatsuo Ishii Cc: vik@postgresfriends.org, er@xs4all.nl, jacob.champion@enterprisedb.com, david.g.johnston@gmail.com, peter@eisentraut.org, pgsql-hackers@postgresql.org Content-Type: multipart/alternative; boundary="00000000000001f9ee064c1d11b6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000001f9ee064c1d11b6 Content-Type: text/plain; charset="UTF-8" Hi,Tatsuo While reviewing the RPR test cases, I noticed that a subquery filter on RPR window function results silently returns wrong results. For example, given this query: SELECT * FROM ( SELECT id, val, COUNT(*) OVER w as cnt FROM rpr_copy WINDOW w AS ( ORDER BY id ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING PATTERN (A B?) DEFINE A AS val > 10, B AS val > 20 ) ) sub WHERE cnt > 0 ORDER BY id; This should return 2 rows, but returns 0 rows instead. The EXPLAIN plan shows that "cnt > 0" is pushed down into the WindowAgg node as a Run Condition: WindowAgg Run Condition: (count(*) OVER w > 0) <-- pushed down -> Sort -> Seq Scan on rpr_copy I will investigate the cause and work on a fix. Best regards, Henson --00000000000001f9ee064c1d11b6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,Tatsuo

While reviewing the RPR test cases, I not= iced that a subquery filter
on RPR window function results silently retu= rns wrong results.

For example, given this query:

=C2=A0 SELECT * FROM (
=C2=A0 =C2=A0 =C2=A0 SELECT id, va= l, COUNT(*) OVER w as cnt
=C2=A0 =C2=A0 =C2=A0 FROM rpr_copy
=C2=A0 = =C2=A0 =C2=A0 WINDOW w AS (
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ORDER BY = id
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ROWS BETWEEN CURRENT ROW AND UNBOU= NDED FOLLOWING
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 PATTERN (A B?)
=C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 DEFINE A AS val > 10, B AS val > 20=C2=A0 =C2=A0 =C2=A0 )
=C2=A0 ) sub
=C2=A0 WHERE cnt > 0
=C2= =A0 ORDER BY id;


This should return 2 rows, but returns 0 row= s instead.

The EXPLAIN plan shows that "cnt > 0" is pus= hed down into the
WindowAgg node as a Run Condition:

=C2=A0 WindowAgg
=C2=A0 =C2=A0 Run Condition: (count(*) O= VER w > 0) =C2=A0 =C2=A0<-- pushed down
=C2=A0 =C2=A0 -> =C2=A0= Sort
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 -> =C2=A0Seq Scan on rpr_copy=


I will investigate the cause and work on a fix.

Best = regards,
Henson
--00000000000001f9ee064c1d11b6--