Thread: regcomp failed with error empty (sub)expression?

regcomp failed with error empty (sub)expression?

From
"Michael Miyabara-McCaskey"
Date:
Hello all,

I just discovered the regex (regular expression matching in PGSQL 7.0.3...
However, after trying to run my first query I got the following:

regcomp failed with error empty (sub)expression

Anys thoughts as to what this means?

The following SQL statement generated the error.

INSERT INTO table3(table1.oid,table2.oid) SELECT table1.oid, table2.oid FROM table1, table2 WHERE table1.field1 ~*
table2.field1      table1.field2 ~* table2.field2       table1.field3 = table2.field3       table1.field4 =
table2.field4;

Field 1 - 4 on both table 1 and table 2 are all "text", and table1 field1 &
2 are in Upper/Lower vs table2 field1 & 2 are in all UPPER.

I'm basically trying to do a simply comparison between table1 and table2 to
find duplicates, but the case differences are stopping me, and as the 7.0.3
version of "upper()" has memory leaks, and the Plperl verion of uc() that I
created takes A LONG time to run (I have a LOT of records)... here I am
trying to match strings with CASE differences.

Any help would be appreciated, as to what caused this error.

Michael Miyabara-McCaskey
Email: mykarz@miyabara.com
Web: http://www.miyabara.com/mykarz/
Mobile: +1 408 504 9014



Re: regcomp failed with error empty (sub)expression?

From
Tom Lane
Date:
"Michael Miyabara-McCaskey" <mykarz@miyabara.com> writes:
> regcomp failed with error empty (sub)expression
> Anys thoughts as to what this means?

I'd say it means the regexp code doesn't like your pattern.  For
example, I can trigger that with

regression=# select 'abc' ~ '|33';
ERROR:  regcomp failed with error empty (sub)expression

'|33' is a bogus pattern because one side of the alternative
construct is empty.  ('|' is the OR pattern operator.)

> The following SQL statement generated the error.

> INSERT INTO table3(table1.oid,table2.oid)
>   SELECT table1.oid, table2.oid
>   FROM table1, table2
>   WHERE table1.field1 ~* table2.field1
>         table1.field2 ~* table2.field2
>         table1.field3 = table2.field3
>         table1.field4 = table2.field4;

Not very helpful when we don't know what's in the table2.field1 and
table2.field2 columns.

> I'm basically trying to do a simply comparison between table1 and table2 to
> find duplicates, but the case differences are stopping me, and as the 7.0.3
> version of "upper()" has memory leaks, and the Plperl verion of uc() that I
> created takes A LONG time to run (I have a LOT of records)... here I am
> trying to match strings with CASE differences.

If you are just trying to match without regard to case, the thing to do
is something like "upper(col1) = upper(col2)".  Using data as a regexp
or LIKE pattern is sheer folly, unless you are *certain* that it can
never contain pattern-operator characters.
        regards, tom lane