[pgsql-jp: 36771] Re: initdbとcreatedb の文字コード指定

HOTTA Michihide hotta @ net-newbie.com
2006年 2月 24日 (金) 20:48:07 JST


堀田@長崎市です。

On Fri, 24 Feb 2006 20:02:59 +0900 
Subject: [pgsql-jp: 36770] initdbとcreatedb の文字コード指定
"Naosuke MORITA" <nmorita @ quarkcat.com> wrote:

> もりたと申します。
> 
> 次のAとBの方法で作成されたデータベースtestdbがあったとします。
> PostgeSQLバージョンは7.4.8です。
> 
> A.
>   $ initdb
>   $ createdb -E EUC_JP testdb
(snip)
> B.
>   $ initdb -E EUC_JP --no-locale
>   $ createdb -E EUC_JP testdb
(snip)
> 上記AとBの testdbは完全に同一と私は思うのですが、いかがでしょう
> か?実はAのtestdbは、日本語がインデックスの場合にインデックスが
> 異常となり、Bに再作成せざると得ない状況になりました。createdbコ
> マンドに encodingオプションがあるのだから、AとBは同一、と考え
> たのですがそうではなかったです。
> 
> ちなみに「インデックスが異常」とは、存在するはずのレコードが存
> 在しない、また異なるキーのはずが同一と見なされる、という現象です。
> 
> ここで、原因は次のどれでしょうか?
> (1)これは7.4.8のバグである。
> (2)initdbとcreatedbのencoding指定は必ず同一でなければならない。
> Aは同一ではなかったので異常が発生した。
> (3)Aのinitdbにおいて、--no-locale 指定を追加する必要があった。

環境にもよるのかもしれませんが、一般的には(3)みたいです。

http://www.postgresql.jp/document/pg732doc/admin/release.html#AEN6062

ここの

> A.1.2. バージョン 7.3 への移行
> A.1.3. 変更点
> A.1.3.9. 国際化
(snip)
> Enable locale support by default (Peter)
> Always enable multibyte in compile, 
>   remove --enable-multibyte option (Tatsuo)
> Always enable locale in compile, 
>   remove --enable-locale option (Peter)

このあたりから、こういう動作になったんじゃなかったかと思います。
たしか、本家でかなり抵抗したけど受け入れられなかったようなことを
石井御大が以前おっしゃっていたような。

入門者のトラブルを減らすために、Vine Linux の postgresql RPM パッ
ケージでは、apt-get でインストールしてから最初に起動する時に、自
動的に

# initdb -E EUC_JP --no-locale 

相当のことをやってからサーバを起動するようにしています(おせっか
いすぎ?)。

postgresqlの公式マニュアルでも、日本語を使うユーザに対して一言あ
ってもいいような気もするのですが、ひょっとしたら locale をつけて
も正しく動作する環境もあるのかもしれませんので、難しいのかもしれ
ませんね。

-- 
〒851-2195 長崎県西彼杵郡長与町まなび野1-1-1
県立長崎シーボルト大学 情報センター 堀田 倫英 <hotta @ sun.ac.jp>
TEL/FAX 095-813-5162  内線:4212




pgsql-jp メーリングリストの案内