アジェンダ
1 はじめに
2 環境説明及び前提条件
3 エラーの確認:invalid locale name: "ja_JP.utf8"
4 エラーの対処法
5 まとめ
1 はじめに
こんにちは、NTTデータ先端技術の陰です。
今回は、Oracle Linux上のPostgreSQL(PSQL)で日本語の入力ができるデータベースを作成する際に発生するロケールエラー(invalid locale name: "ja_JP.utf8")の対処法について紹介します。
2 環境説明及び前提条件
今回、作業を実施する環境情報及び前提条件は以下の通りです。
環境情報
OSイメージ:Oracle-Linux-8.7
リージョン:ap-tokyo-1 (日本東部(東京))
データベース:PostgreSQL 13.9
前提条件
①シェル・ターミナル・コンソールがセットアップされていること
②インスタンスが作成されていること
③インスタンスにSSH接続できること
④インスタンスからインタネットにアクセスできること
⑤PostgreSQLがインストールされデータベースが初期化されていること
3 エラーの確認:invalid locale name: "ja_JP.utf8"
PSQL上で日本語の入力ができるようにja_JP.UTF-8ロケールを指定しデータベースを作成するとエラーが発生する場合があります。
postgres=# CREATE DATABASE pgtest WITH ENCODING='UTF8' LC_COLLATE='ja_JP.utf8' LCC_CTYPE='ja_JP.utf8' OWNER=pgtest TEMPLATE=template0;
ERROR: invalid locale name: "ja_JP.utf8"
上記のエラーはOS上にja_JP.UTF-8ロケールがインストールされてないことが原因で発生するエラーになります。
OS上で現在使用可能なロケールを確認するとja_JP.utf8がインストールされてないことがわかります。
$ locale -a
C
C.utf8
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE@euro
en_IE.utf8
en_IL
en_IN
en_NG
en_NZ
en_NZ.utf8
en_PH
en_PH.utf8
en_SC.utf8
en_SG
en_SG.utf8
en_US
en_US@ampm
en_US.iso885915
en_US.utf8
en_US.utf8@ampm
en_ZA
en_ZA.utf8
en_ZM
en_ZW
en_ZW.utf8
POSIX
4 エラーの対処法
エラーを解決しデータベースを作成するためにはOS上にja_JP.UTF-8ロケールをインストールする必要があります。
まず、ja_JP.UTF-8ロケールをインストールする前に必要なパッケージをインストールします。
$ sudo yum -y install glibc-locale-source
パッケージのインストール後、ja_JP.UTF-8ロケールをインストールします。
$ sudo localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ja_JP.UTF-8ロケールがインストールされていることを確認します。
$ locale -a
C
C.utf8
en_AG
en_AU
en_AU.utf8
en_BW
en_BW.utf8
en_CA
en_CA.utf8
en_DK
en_DK.utf8
en_GB
en_GB.iso885915
en_GB.utf8
en_HK
en_HK.utf8
en_IE
en_IE@euro
en_IE.utf8
en_IL
en_IN
en_NG
en_NZ
en_NZ.utf8
en_PH
en_PH.utf8
en_SC.utf8
en_SG
en_SG.utf8
en_US
en_US@ampm
en_US.iso885915
en_US.utf8
en_US.utf8@ampm
en_ZA
en_ZA.utf8
en_ZM
en_ZW
en_ZW.utf8
ja_JP.utf8
POSIX
インストール完了後、追加したja_JP.utf8ロケールがPSQLに反映されるためにPSQLを再起動します。
$ sudo systemctl restart postgresql-13
PSQLの再起動まで完了した状態であればPSQLでのデータベース作成は成功します。
postgres=# CREATE DATABASE pgtest WITH ENCODING='UTF8' LC_COLLATE='ja_JP.utf8' LCC_CTYPE='ja_JP.utf8' OWNER=pgtest TEMPLATE=template0;
CREATE DATABASE
postgres=#
postgres=#
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+------------------
-----
pgtest | pgtest | UTF8 | ja_JP.utf8 | ja_JP.utf8 |
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres
5 まとめ
今回は、Oracle Linux上のPSQLで日本語の入力ができるデータベースを作成する際に発生するロケールエラー(invalid locale name: "ja_JP.utf8")の対処法について紹介しました。
Oracle-Linux-8.7の初期状態ではja_JP.utf8ロケールがインストールされてないのでPSQLで日本語の入力ができるデータベースを作成するためには追加でja_JP.utf8ロケールをインストールしなければならないことに注意してください。