| From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
|---|---|
| To: | Gilles Darold <gillesdarold(at)gmail(dot)com> |
| Cc: | pgsql-hackers(at)lists(dot)postgresql(dot)org |
| Subject: | Re: different result of regexp_instr than on Oracle |
| Date: | 2026-09-18 09:06:13 |
| Message-ID: | CAFj8pRA3TXThpv-rn5Jqmnxj7swkbcBQx90CxM29Bj7w9omJCQ@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
pá 18. 9. 2026 v 9:57 odesílatel Gilles Darold <gillesdarold(at)gmail(dot)com>
napsal:
> Le 18/09/2026 à 07:21, Pavel Stehule a écrit :
> > Hi
> >
> > I got an error report for regexp_instr in Orafce.
> >
> > SELECT REGEXP_INSTR('ABC', 'A', 1, 1, 0, '', 1) AS SUBEXPR_1
> >
> > Oracle returns 0, Postgres 1.
> >
> > Because Orafce now share this functionality with Postgres, there
> > should be same problem
> >
> > Is this behaviour expected?
>
> Hi Pavel,
>
> That's a good catch. I have tested orafce with your commit 546ee72 it
> now works as expected for Oracle compatibility. About PostgreSQL
> regexp_instr() behavior, I think it is expected that it returns 1, per
> the documentation:
>
> "the subexpr is an integer indicating which subexpression is of
> interest: the result identifies the position of the substring matching
> that subexpression. Subexpressions are numbered in the order of their
> leading parentheses. When subexpr is omitted or zero, the result
> identifies the position of the whole match regardless of parenthesized
> subexpressions".
>
> When no capture group are defined in the pattern, there's an implicit
> capture group for the whole match when subexpr is 0 or 1.
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B', 1, 1, 0, '', 0) AS
> SUBEXPR_0;
> subexpr_0
> -----------
> 2
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B', 1, 1, 0, '', 1) AS
> SUBEXPR_1;
> subexpr_1
> -----------
> 2
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B', 1, 1, 0, '', 2) AS
> SUBEXPR_2;
> subexpr_2
> -----------
> 0
>
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B(C)', 1, 1, 0, '', 0)
> AS SUBEXPR_0;
> subexpr_0
> -----------
> 2
> (1 ligne)
>
> contrib_regression=# SELECT REGEXP_INSTR('ABC', 'B(C)', 1, 1, 0, '', 1)
> AS SUBEXPR_1;
> subexpr_1
> -----------
> 3
>
> Best regards,
> --
> Gilles
>
>
>
ok
thank you for explanation
Regards
Pavel
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Etsuro Fujita | 2026-09-18 09:15:14 | Re: [PG19][PATCH] Make postgres_fdw statistics import atomic |
| Previous Message | shveta malik | 2026-09-18 08:48:19 | Re: Proposal: Conflict log history table for Logical Replication |