Thread: BUG #3438: Problem selecting backslash from a byte array

BUG #3438: Problem selecting backslash from a byte array

From
"radoslav hodnicak"
Date:
The following bug has been logged online:

Bug reference:      3438
Logged by:          radoslav hodnicak
Email address:      rh@4096.sk
PostgreSQL version: 8.2.4
Operating system:   Windows XP SP2
Description:        Problem selecting backslash from a byte array
Details:

I create a table with a byte array column and insert a row with the byte 92
into it (which is backslash). Then I want to select the row.

Steps to reproduce:

create table backslashtest (test bytea null);

insert into backslashtest values (E'\\134'::bytea);

select * from backslashtest where test like E'\\134'::bytea;

Result:
select returns no rows

Expected result:
select should return the row I've inserted

Other remarks:
select * from backslashtest where test like E'\\134\\134'::bytea;

does what I expected from the original select, but that's wrong because I
don't want two backslashes, only one

Re: BUG #3438: Problem selecting backslash from a byte array

From
"Pavel Stehule"
Date:
it's not bug. You didn't use any wild char. And like predicate isn't
defined for bytea. There is another strange behave




postgres=# select position(E'\\134\\134'::bytea in test) from backslashtest ;
 position
----------
        0
(1 row)


Regards
Pavel Stehule
>
> I create a table with a byte array column and insert a row with the byte 92
> into it (which is backslash). Then I want to select the row.
>
> Steps to reproduce:
>
> create table backslashtest (test bytea null);
>
> insert into backslashtest values (E'\\134'::bytea);
>
> select * from backslashtest where test like E'\\134'::bytea;
>
> Result:
> select returns no rows

>
> Expected result:
> select should return the row I've inserted
>
> Other remarks:
> select * from backslashtest where test like E'\\134\\134'::bytea;
>
> does what I expected from the original select, but that's wrong because I
> don't want two backslashes, only one
>
> ---------------------------(end of broadcast)---------------------------
> TIP 1: if posting/reading through Usenet, please send an appropriate
>        subscribe-nomail command to majordomo@postgresql.org so that your
>        message can get through to the mailing list cleanly
>

Re: BUG #3438: Problem selecting backslash from a byte array

From
Tom Lane
Date:
"radoslav hodnicak" <rh@4096.sk> writes:
> create table backslashtest (test bytea null);
> insert into backslashtest values (E'\\134'::bytea);
> select * from backslashtest where test like E'\\134'::bytea;

Backslash is a special character to LIKE.  Perhaps you would prefer
to specify another escape character, or none at all:

select * from backslashtest where test like E'\\134'::bytea escape '';

If you don't want any special pattern characters, why are you using
LIKE rather than plain = ?

            regards, tom lane