Re: Row pattern recognition

From: 장성준 <sjjang112233(at)gmail(dot)com>
To: Tatsuo Ishii <ishii(at)postgresql(dot)org>, assam258(at)gmail(dot)com
Cc: vik(at)postgresfriends(dot)org, er(at)xs4all(dot)nl, jacob(dot)champion(at)enterprisedb(dot)com, david(dot)g(dot)johnston(at)gmail(dot)com, peter(at)eisentraut(dot)org, pgsql-hackers(at)postgresql(dot)org
Subject: Re: Row pattern recognition
Date: 2026-03-05 04:16:21
Message-ID: CAE+cgNiUbKeH1A0PoxV2QjpsoxJLe+pJcGz_gdxwOwu_9zqchw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi hackers

I converted PostgreSQL RPR regression test queries to Oracle
MATCH_RECOGNIZE syntax and executed them on both systems to perform
cross-validation.

The tests were based on the following PostgreSQL regression test files:

rpr_base.sql
rpr_nfa.sql

PostgreSQL bug: zero-min reluctant quantifier

During cross-validation a PostgreSQL bug was discovered involving
reluctant quantifiers whose minimum repetition is 0.

Example pattern:

PATTERN (A*?)
DEFINE A AS val > 0

Result comparison:

pattern PostgreSQL (cnt) Oracle (cnt)
A*? 1,1,1 0,0,0
A?? 1,1,1 0,0,0
A+? 1,1,1 1,1,1

For reluctant quantifiers with min=0 (such as *? and ??), PostgreSQL
always consumes at least one row, while Oracle allows a zero-length
match. When min>=1 (e.g., A+?), both systems behave the same.

This behavior was consistently observed across the converted tests.

Design difference: unused DEFINE variables

Example:

PATTERN (A+)
DEFINE A AS id > 0, B AS id > 5

PostgreSQL executes the query successfully and ignores the unused
variable B.

Oracle raises:

ORA-62503: illegal variable definition

Oracle limitations observed

Bounded quantifier limit

A{200} -> works
A{201} -> ORA-62518

Oracle appears to limit the upper bound of bounded quantifiers to 200,
while PostgreSQL does not impose this restriction.

Nested nullable quantifiers

Examples:

(A*)*
(A*)+
(((A)*)*)*

(A?|B){1,2}
((A?){2,3}){2,3}
(A?){n,m}
(A? B?){2,3}

Oracle raises:

ORA-62513

when a nullable subpattern is wrapped by an outer quantifier, while
PostgreSQL executes these patterns successfully.

These results come from running the converted PostgreSQL RPR regression
tests on Oracle for comparison.

Best regards,
SugJun

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David Steele 2026-03-05 04:21:16 Re: Improve checks for GUC recovery_target_xid
Previous Message shveta malik 2026-03-05 04:05:21 Re: [PATCH] Support automatic sequence replication