1
2

More than 1 year has passed since last update.

Oracle Linux上のPostgreSQLでデータベースを作成する際に発生するロケールエラーの対処法:invalid locale name: "ja_JP.utf8"

Last updated at Posted at 2023-02-27

アジェンダ

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ロケールをインストールしなければならないことに注意してください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2