Обсуждение: Possible bug in Postgres String comparison routines

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

Possible bug in Postgres String comparison routines

От
Peter Breton
Дата:
Hi,

On my Postgres system ( PostgreSQL 7.1.2 on i686-pc-linux-gnu, compiled
by GCC 2.96), I get the following odd behavior in string compares:

# Works -- e (ASCII code 101) is after comma (ASCII code 44)
select current_time where 'e' > ',';

# Works -- adding a k to the front of both strings
select current_time where 'ke' > 'k,';

# Works -- add some trailing characters. Note that since 'ke' > 'k,'
# we should be able to add whatever trailing characters we want
# and still get the same result
select current_time where 'ken' > 'k, ';

# Does not work!!!
select current_time where 'kens' > 'k, P';
# Also does not work
select current_time where 'ens' > ', P';

For "Works", I mean returns a result (the where expression evaluated
true); "Does not work" means no result was returned.

Is there something that I'm not understanding here, or is this a bug?

Peter

Re: Possible bug in Postgres String comparison routines

От
Tom Lane
Дата:
Peter Breton <pbreton@MIT.EDU> writes:
> Is there something that I'm not understanding here, or is this a bug?

What locale are you using?  Non-C locales have sorting rules more
complex than you seem to be expecting.

$ cat data
e
,
ke
k,
ken
k,
kens
k, P
ens
, P
$ LANG=C sort data
,
, P
e
ens
k,
k,
k, P
ke
ken
kens
$ LANG=en_US.iso88591 sort data
e
ens
ke
ken
kens
k,
k,
k, P
,
, P
$

            regards, tom lane