Обсуждение: restored database locale problem
Hi folks. I've just FUBAR'd one of my databases so I dropped it and and then recreated it from a pg_dump taken at 1am today. Everything went fine with no errors or warning while recreating everything, but now one of my selects doesn't work. A quick google and scan of the postgresql hasn't helped. My other databases within the same server are all working fine. Gary goole=# select r_id as key, * from new_request_details where (upper(r_registration) like upper('%D55D4473%') or upper(r_chassis) like upper('%D55D4473%') or upper(r_pack_mats) like upper('%D55D4473%') or upper(c_des) like upper('%D55D4473%') ) order by r_delivery, r_delivery, r_created goole-# ; ERROR: invalid multibyte character for locale HINT: The server's LC_CTYPE locale is probably incompatible with the database encoding. goole=# -- Gary Stainburn This email does not contain private or confidential material as it may be snooped on by interested government parties for unknown and undisclosed purposes - Regulation of Investigatory Powers Act, 2000
Gary Stainburn <gary.stainburn@ringways.co.uk> writes: > ERROR: invalid multibyte character for locale > HINT: The server's LC_CTYPE locale is probably incompatible with the database encoding. The HINT seems straightforward enough to me ;-). What do "show lc_ctype" and "show server_encoding" say? regards, tom lane
On Wednesday 28 December 2005 15:58, Tom Lane wrote: > Gary Stainburn <gary.stainburn@ringways.co.uk> writes: > > ERROR: invalid multibyte character for locale > > HINT: The server's LC_CTYPE locale is probably incompatible with the > > database encoding. > > The HINT seems straightforward enough to me ;-). What do "show > lc_ctype" and "show server_encoding" say? > > regards, tom lane goole=# show lc_ctype; lc_ctype ------------- en_US.UTF-8 (1 row) goole=# show server_encoding; server_encoding ----------------- UNICODE (1 row) goole=# The documentation I read all related to installing and configuring the server. This has arisen from reading back into an existing server config a pg_dump that was taken from the same server. Gary -- Gary Stainburn This email does not contain private or confidential material as it may be snooped on by interested government parties for unknown and undisclosed purposes - Regulation of Investigatory Powers Act, 2000
Gary Stainburn <gary.stainburn@ringways.co.uk> writes: > goole=# show lc_ctype; > lc_ctype > ------------- > en_US.UTF-8 > (1 row) > goole=# show server_encoding; > server_encoding > ----------------- > UNICODE > (1 row) Hm. Well, the error message implies that there's some data in the database that we think is valid but mbstowcs() doesn't agree. If this is a pre-8.1 release then you could be getting burnt by the bugs we previously had with more-than-two-byte UTF8 sequences. > This has arisen from reading back into an existing server config a pg_dump > that was taken from the same server. Do you see the error if you just EXPLAIN the problem query, without executing it? If so, the failure is probably happening because a bogus data value happens to show up in the pg_stats statistics for one of the columns used in the query. Since these entries come from a random sample, re-ANALYZE-ing the table will probably make the EXPLAIN error come and go. Which leaves you needing to grovel through the whole table to find the bad data :-( regards, tom lane
On Wednesday 28 December 2005 16:22, Tom Lane wrote: > Gary Stainburn <gary.stainburn@ringways.co.uk> writes: > > goole=# show lc_ctype; > > lc_ctype > > ------------- > > en_US.UTF-8 > > (1 row) > > > > goole=# show server_encoding; > > server_encoding > > ----------------- > > UNICODE > > (1 row) > > Hm. Well, the error message implies that there's some data in the > database that we think is valid but mbstowcs() doesn't agree. If this > is a pre-8.1 release then you could be getting burnt by the bugs we > previously had with more-than-two-byte UTF8 sequences. I'm using the Fedora 4 RPMs version 8.0.4-2. 8.0.5-1 are the latest, which I'm going to upgrade to using yum. > > > This has arisen from reading back into an existing server config a > > pg_dump that was taken from the same server. > > Do you see the error if you just EXPLAIN the problem query, without > executing it? Running explain does not generate any errors. > If so, the failure is probably happening because a bogus > data value happens to show up in the pg_stats statistics for one of the > columns used in the query. Since these entries come from a random > sample, re-ANALYZE-ing the table will probably make the EXPLAIN error > come and go. Which leaves you needing to grovel through the whole table > to find the bad data :-( > > regards, tom lane analyze requests; seems to have fixed it. Thanks. Gary -- Gary Stainburn This email does not contain private or confidential material as it may be snooped on by interested government parties for unknown and undisclosed purposes - Regulation of Investigatory Powers Act, 2000