2006/11/11
PostgreSQLを使用したデータベースで、7.2.3 で稼動しているシステムを 7.4.3 にアップグレードする事になった。
このシステムは、日本語、英語、中国語、各語混在の4種類のデータベースが動作しており、それらをすべてアップグレードする必要がある。
各データベースは、どれも姑息な構成にはなっていないので、7.2.3 で pg_dump し、7.4.3 で psql を使ってリストアすればいい。
…はずだったのだが、うまくいかない。
日本語、英語は EUC_JP、中国語はEUC_CN でデータベースが生成してあるのだが、これらについては問題なくリストアができた。
各語混在はUNICODEでデータベースを生成してあるのだが、なぜかうまくいかない。
こんな現象が発生する。
たとえば、以下のようなテーブルがあったとして…。
-----
CREATE TABLE HOGE
(
VALUE TEXT PRIMARY KEY
);
-----
このように INSERT してみる。
-----
INSERT INTO HOGE VALUES ('あいうえお');
INSERT INTO HOGE VALUES ('かきくけこ');
-----
すると、こんなエラーが発生する。
# 実際に、この文字列の INSERT でエラーが発生するということではない。
# こういう現象が発生するという意味。
-----
ERROR: duplicate key violates unique constraint "value_pkey"
-----
VALUE列に同じ文字列を挿入するなら、もちろん、このエラーが発生するが、上記データで発生するわけがない。
なぜだ?
ググってみる。
あった。
PostgreSQL7.3インストール編
「UNICODEでのみ問題が出る」という記載ではないが、日本語を正しく処理させるためには、ロケールの設定をオフにしないといけないようだが、7.3 以降はデフォルトでオンになっているらしい。
initdb --no-locale してから、同様の操作を行ってみると、エラーも出ずにすんなり INSERT する事ができた。
う~ん、こんな落とし穴があったとは…。
投稿者 zunbe : 2006/11/11 00:09:41
トラックバック
|
〔http://blog.zunbe.com/mt/mt-tb.cgi/505〕
|
|