Обсуждение: BUG #15084: Invalid LIKE pattern not always reported

Поиск
Список
Период
Сортировка

BUG #15084: Invalid LIKE pattern not always reported

От
PG Bug reporting form
Дата:
The following bug has been logged on the website:

Bug reference:      15084
Logged by:          Tudor Bosman
Email address:      tudorb@gmail.com
PostgreSQL version: 9.5.11
Operating system:   Ubuntu 16.04
Description:

PostgreSQL will not always detect an invalid LIKE pattern (one that ends
with a backslash).

Example:

tudor=# select 'foo' like 'foo\';
 ?column?
----------
 f
(1 row)

tudor=# select 'foobar' like 'foo\';
ERROR:  LIKE pattern must not end with escape character

This probably happens because the pattern is only parsed lazily (as needed);
if PostgreSQL detects that a match is impossible, it doesn't even look at
the rest of the pattern.

Still, it would be nice for error reporting to be consistent.

Thanks,
-Tudor.


Re: BUG #15084: Invalid LIKE pattern not always reported

От
"David G. Johnston"
Дата:
On Fri, Feb 23, 2018 at 1:29 PM, PG Bug reporting form <noreply@postgresql.org> wrote:
The following bug has been logged on the website:

Bug reference:      15084
Logged by:          Tudor Bosman
Email address:      tudorb@gmail.com
PostgreSQL version: 9.5.11
Operating system:   Ubuntu 16.04
Description:

PostgreSQL will not always detect an invalid LIKE pattern (one that ends
with a backslash).

Example:

tudor=# select 'foo' like 'foo\';
 ?column?
----------
 f
(1 row)

tudor=# select 'foobar' like 'foo\';
ERROR:  LIKE pattern must not end with escape character

This probably happens because the pattern is only parsed lazily (as needed);
if PostgreSQL detects that a match is impossible, it doesn't even look at
the rest of the pattern.

Still, it would be nice for error reporting to be consistent.

​Last March (Bug# 14512) Tom Lane thought a performant solution was possible though it was never committed.


I'm still +1 if it can be done without hurting performance on patterns that do match - a compile-time failure here is desirable.

Full thread here:


David J.

Re: BUG #15084: Invalid LIKE pattern not always reported

От
Tom Lane
Дата:
=?utf-8?q?PG_Bug_reporting_form?= <noreply@postgresql.org> writes:
> PostgreSQL will not always detect an invalid LIKE pattern (one that ends
> with a backslash).
> This probably happens because the pattern is only parsed lazily (as needed);
> if PostgreSQL detects that a match is impossible, it doesn't even look at
> the rest of the pattern.

Yeah, exactly.

> Still, it would be nice for error reporting to be consistent.

This has been discussed before, but nobody could see how to do it without
taking a performance hit (ie, doing a full scan of the pattern before
doing any actual work).  It didn't seem worth that.

It occurs to me that we could make the behavior more consistent by
redefining a trailing backslash as something we silently ignore, instead
of raising an error.  Not sure if that's an improvement, though.

            regards, tom lane