IT技術で仕事を減らしたい!

ITエンジニアのメモ+α

PostgreSQL 日本語言語設定(jp_JP.UTF-8)

どうも、nippaです。

今回はPostgreSQLに日本語入力できるように設定したいと思います。

個人的には、日本語にすると文字のバイト数等が変化するので、SQLに影響があるのかなと思っています。

致し方ない時以外は、C.UTF-8で良いのかなと思っています。

1. OSのlocaleの確認

localeについては、arch Linuxのページがわかりやすいです。

localeは、テキストのレンダリング、日時表現、地域通貨の表示方法、アルファベットなどの決まり事を設定します。

localeの設定は、[言語]_[地域].[コードセット]で記載されます。コードセットはここでは、エンコーディングとしての理解で良いです。

OS側で日本語用のlocaleでが生成されていない場合は、Databaseで指定することができません。

現在のlocaleの確認は、

locale

で行います。localeで日本語を指定しなくともDatabase上では指定できます。

利用可能なlocaleは

locale -a

で確認できます。

既に生成されているlocaleは

localedef --list-archive

# または、
localectl list-locales

で確認することができます。

localeが生成されていな場合は、生成されているが利用できない場合は、

/etc/locale.genの利用するlocaleのコメントアウトを外します。

vim /etc/locale.gen

# ja_JP.UTF-8 のコメントアウトを外す
...
# ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
# ka_GE GEORGIAN-PS
# ka_GE.UTF-8 UTF-8
...

localeを有効にするために、

locale-gen

を実行し、生成します。

生成した、localeをpostgreSQLで有効化するために、postgreSQLを再起動します。

2. Database作成時での設定

Database作成時に、localeとctypeを指定することができます。

LC_CTYPEでは、文字の分類および大文字/小文字の変換のルールを指定します。

CREATE DATABASE test01 OWNER = postgres TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'ja_JP.UTF-8' LC_CTYPE = 'ja_JP.UTF-8';

3. 既存のDatabaseのlocaleを変更する

既存のDatabaseではソート順に影響があるため、locale、ctypeを変更することができません。

そのため、Databaseをダンプし、Databaseを作成し直して、データをrestoreする必要があります。

3.1 Databaseのダンプ

pg_dumpallコマンドを使って、Databaseをすべてダンプすることができます。

pg_dumpall -f [file name]

変更するDatabaseのみdumpする場合は、pg_dumpコマンドを利用します。

pg_dump [Database名] -C -f [file name]

3.2 Databaseのlocaleを変更

-CでCreate DatabaseのSQLも含まれる。SQLのCreate Database文を

ENCODING = 'UTF8' LC_COLLATE = 'ja_JP.UTF-8' LC_CTYPE = 'ja_JP.UTF-8';

に変更します。

3.3 Databaseのリストア

pg_restoreコマンドを使って、Databaseをリストアします。

pg_restore -d [database] -c [file name]

-dはリストア前に、DatabaseをDropするオプションになります。

感想

既存のDatabaseのLocaleの変更はかなりめんどくさいです。

なので、構築時にしっかり設計することをオススメします。

ではでは、また次回。