[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 メーリングリストの案内