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

Naosuke MORITA nmorita @ quarkcat.com
2006年 2月 24日 (金) 20:02:59 JST


もりたと申します。

次のAとBの方法で作成されたデータベースtestdbがあったとします。
PostgeSQLバージョンは7.4.8です。

A.
  $ initdb
  $ createdb -E EUC_JP testdb

 このとき、psqlの \l コマンドの結果は次のとおりです。
    template0   SQL_ASCII
    template1   SQL_ASCII
    testdb      EUC_JP

B.
  $ initdb -E EUC_JP --no-locale
  $ createdb -E EUC_JP testdb

 このとき、psqlの \l コマンドの結果は次のとおりです。
    template0   EUC_JP
    template1   EUC_JP
    testdb      EUC_JP

上記AとBの testdbは完全に同一と私は思うのですが、いかがでしょうか?実は
Aのtestdbは、日本語がインデックスの場合にインデックスが異常となり、Bに再
作成せざると得ない状況になりました。createdbコマンドに encodingオプショ
ンがあるのだから、AとBは同一、と考えたのですがそうではなかったです。

ちなみに「インデックスが異常」とは、存在するはずのレコードが存在しない、
また異なるキーのはずが同一と見なされる、という現象です。

ここで、原因は次のどれでしょうか?
(1)これは7.4.8のバグである。
(2)initdbとcreatedbのencoding指定は必ず同一でなければならない。Aは同一で
はなかったので異常が発生した。
(3)Aのinitdbにおいて、--no-locale 指定を追加する必要があった。

以上、ご助言いただければありがたく、よろしくお願い申し上げます。

--------------------
もりた
nmorita @ quarkcat.com



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