Обсуждение: BUG #3438: Problem selecting backslash from a byte array
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
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
>
"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