PostgresSQLの言語設定(locale)をja_JPにする

データ分析用PostgreSQLの言語設定したときの覚書。

環境: CentOS Stream 8, PostgreSQL 14.2

インストールは前の記事を参考に。

CentOSの言語設定を確認
# localectl status

   System Locale: LANG=en_US.UTF-8
       VC Keymap: jp106
      X11 Layout: jp,us
     X11 Variant: ,

OSは英語のままデータベースは日本語にする。
言語設定は照合順序に関係する。詳しくは下記公式サイトで。

OSで提供している言語設定一覧を確認
# locale -a

ja_JPがない場合はこの記事の下を参照してインストール。
今のPostgreSQLの設定を確認
# su - postgres

データベースのリストを表示
$ psql -l

既存のデータベースのCollate, Ctypeは変更できない。作り直す必要がある。

PostgreSQLの設定変更
$ cd 14/data/
$ less postgresql.conf

lc_messages = 'ja_JP.UTF-8' # メッセージの言語
lc_monetary = 'ja_JP.UTF-8' # 通貨書式
lc_numeric = 'ja_JP.UTF-8'  # 数字の書式
lc_time = 'ja_JP.UTF-8'     # 日付と時刻の書式

rootに戻ってPostgreSQL再起動して確認
# systemctl restart postgresql-14
# systemctl status postgresql-14

ログが日本語になっているのは気持ち悪いので英語に戻す
# less /var/lib/pgsql/14/data/postgresql.conf

lc_messages = 'en_US.UTF-8'

# systemctl restart postgresql-14
# systemctl status postgresql-14

データベース作成時のデフォルトをja_JPにする。
create databaseはtemplate1をコピーするのでtemplate1データベースを作り直す。

template1とtemplate0のデータベースはデフォルトのデータベースというだけで特別な役割はないらしい。なので削除して作り直してもシステムに影響はない。

postgresになる
# su - postgres

psqlからテンプレートフラグをfalseにしてデータベース削除
$ psql
# select * from pg_database;
# select datistemplate from pg_database where datname = 'template1';
# update pg_database set datistemplate = false where datname = 'template1';
# drop database template1;
# select * from pg_database;

データベース作成して確認
参考: PostgreSQL: Documentation: 14: CREATE DATABASE
# CREATE DATABASE template1 TEMPLATE=template0 LC_COLLATE="ja_JP.UTF-8" LC_CTYPE="ja_JP.UTF-8" IS_TEMPLATE=true;
# select * from pg_database;
# quit

DBeaverからデータベース作成してみて確認
$ psql -l

既存データベースをバックアップ
$ pg_dump recruit > ./backup.sql

データベースを削除、作成してリストア
$ psql -c 'drop database recruit;'
$ psql -c 'create database recruit;'
$ psql recruit < backup.sql

確認してバックアップ削除
$ psql -l
$ rm backup.sql


ja_JPをインストール

本番環境ではja_JPがなかったのでインストールした。

参考サイト

yum経由でインストール実行
# dnf search glibc-langpack-ja
# dnf info glibc-langpack-ja
# dnf install glibc-langpack-ja

確認
# locale -a


【関連記事】