Charlie Clark <charlie@begeistert.org> writes:
> psytec=# show lc_collate;
> lc_collate
> -------------
> de_DE.UTF-8
> (1 row)
> psytec=# show server_encoding;
> server_encoding
> -----------------
> LATIN1
> (1 row)
There's your problem right there. The string comparison routines are
built on strcoll(), which is going to expect UTF8-encoded data because
of the LC_COLLATE setting. If there are any high-bit-set LATIN1
characters in the database, they will most likely look like invalid
encoding to strcoll(), and on most platforms that causes it to behave
very oddly. You need to keep lc_collate (and lc_ctype) in sync with
server_encoding.
regards, tom lane