まーのすけRoom

忘れると後で困りそうなことをMemoしておきます…

PostgrSQLの50音ソートが変

2011-04-28 00:26:12 | Mac
MacPortsで入れたPostgreSQL 9の50音ソートが変なことに気付いた。
あめ
いか
あずき
うさぎ
かもめ
あらかわ
えのしま
の様に文字数の順番で並んでいる。

ロケールの設定がおかしいとこうなるらしい。
pg_controldataで調べるとLC_COLLATE、LC_TYPEがen_US.UTF-8になっているとネットには書かれていたが、
/opt/local/lib/postgresql90/bin/pg_controldata /opt/local/var/db/postgresql90/defaultdb
をしてもそんな項目は出て来なかった。PostgreSQL9で出力内容が変わったのか?
PostgreSQL 8.1.23のサーバーでpg_controldataをチェックしたら
LC_COLLATE: ja_JP.UTF-8
LC_CTYPE: ja_JP.UTF-8
と出た。

解決方法は --no-local を付けて initdb をすると良いそうで、pg_dumpall でDBをバックアップして、DBを停止させ、DBのデータフォルダ(ウチのMacは/opt/local/var/db/postgresql90/defaultdb)をリネームして、
initdb -D /opt/local/var/db/postgresql90/defaultdb --no-local
DBをスタートさせ
psql -f [pg_dumpallしたデータ] postgres
でDBデータを読込み、元通りに。

50音ソートの結果は
あずき
あめ
あらかわ
いか
うさぎ
えのしま
かもめ
と正しくなった!

【2011.4.26追記】
別のMacで上記の様にやっても50音ソートがうまくいかず、--no-locale の前に -E UTF8 を追加して、
initdb -D /opt/local/var/db/postgresql90/defaultdb -E UTF8 --no-locale
としたら50音ソートがうまくいく様になった。

【2011.4.27追記】
initdb --no-locale
とすると、templateが
Encoding:SQL_ASCII Collation:C Ctype:C
で作られる。
この場合はcreatedb時に
createdb -E UTF8 -T template0 [DB名]
とすると、新しいデータベースが
Encoding:UTF8 Collation:C Ctype:C
で作られる。

2011.4.26追記の様に
initdb -E UTF8 --no-locale
とすると、templateが
Encoding:UTF8 Collation:C Ctype:C
で作られるので、新しいデータベースは普通に
createdb -E UTF8

Encoding:UTF8 Collation:C Ctype:C
になる。

どちらにしても、Collation:C にならないと50音ソートが期待した通りにならないので、
とりあえずこのどちらかを使って様子見する事にします。

【2011.4.28追記】
initdb コマンドで --locale=C と --no-locale は同じ意味だそう。
http://lets.postgresql.jp/documents/technical/text-processing/2



MySQLでローカルファイルからインポート

2011-04-25 17:06:26 | Mac
MySQLにログインする際にmysql --local-infile=1を追加。
/opt/llocal/bin/mysql5 -u root -p --local-infile=1 [DB名]

mysql> load data local infile "[ファイルのパス]" into table [テーブル名] fields terminated by "\t";
これでpostgrSQLのcopyで吐き出したタブ区切りのデータをインポート出来た。

プログレッシブJPEGかどうかコマンドラインで判別

2011-04-15 22:05:51 | Mac
携帯サイトを納品したら、一部のJPEGがauで表示されないという現象に遭遇。
調べたところauではプログレッシブJPEGが表示出来ないと判明。
標準の(ベースライン)JPEGじゃないとダメだそう。

そこで、表示されなかった画像がプログレッシブJPEGなのかどうか調べようと思って探したら、コマンドラインでの判定法を発見!
プログレッシブJPEGやCMYKモードのJPEGをUnix環境で判別(判定)

[rdjpgcom]というコマンドだそうだが、試しにMacのターミナルでrdjpg[タブ]と打ったら、見事drjpgcomと出た!やったー!入ってたー!Macエライ!

さっそく表示されなかった画像をチェック

$ rdjpgcom -verbose [表示されなかった].jpg
~中略~
JPEG image is 148w * 99h, 3 color components, 8 bits per sample
JPEG process: Progressive

おお!やはりプログレッシブJPEGだった。
試しにPhotoshopでプログレッシブにチェック付けずにWeb用に保存した画像を見ると

$ rdjpgcom -verbose [プログレッシブでない画像].jpg
~中略~
JPEG image is 148w * 99h, 3 color components, 8 bits per sample
JPEG process: Baseline

ちゃんとBaselineと表示されました。
便利だけど、すぐ忘れてしまいそうなコマンドでした。