第5回では、Azure Database for PostgreSQL デプロイ後の既定のサーバー構成パラメータ値、エンコーディング設定に関する内容をまとめてみました。
今回は、Azure Database for PostgreSQL シングル サーバーを日本語ロケール設定に変更する方法について、自分の整理も兼ねて、まとめてみようと思います。
※ Azure Database for PostgreSQL シングル サーバー バージョン 11.11 を使用して検証
日本語ロケール設定方法について
Azure Database for PostgreSQL (シングルサーバー) のデプロイ直後の既定の設定は、「server_encoding」:「UTF8」, 「lc_*」:「English_United States.1252」になっています。 既定で作成されるデータベース「postgres」を日本語ロケールに変更することはできない (lc_collate, lc_ctype は変更不可 ) ため、新規作成するデータベースを日本語ロケールとして作成方法についてまとめてみようと思います。
※ Azure Database for PostgreSQL (シングルサーバー) への接続には、「psql」ツールを使用しています。
postgres=> select name, setting, context from pg_settings where name like 'server_%'; name | setting | context --------------------+---------+---------- server_encoding | UTF8 | internal server_version | 11.11 | internal server_version_num | 110011 | internal |
postgres=> select name, setting, context from pg_settings where name like 'lc%'; name | setting | context -------------+----------------------------+----------- lc_collate | English_United States.1252 | internal lc_ctype | English_United States.1252 | internal lc_messages | English_United States.1252 | superuser lc_monetary | English_United States.1252 | user lc_numeric | English_United States.1252 | user lc_time | English_United States.1252 | user |
サーバー パラメータ設定変更
Azure Database for PostgreSQL で 以下のように サーバー パラメータ を変更します。
- lc_monetary : 「Japanese_Japan.932」(通貨書式設定)
- lc_numeric :「Japanese_Japan.932」(数字の書式設定)
- timezone : 「Asia/Tokyo」(タイムゾーン設定 (既定: UTC))
1) Azure ポータル -「Azure Database for PostgreSQL」-「該当サーバー」-「設定」-「サーバー パラメータ」を選択します。
2) サーバー パラメータを変更し、「保存」を選択します。
※ Azure Database for PostgreSQL シングル サーバーの基盤OSは Windows Server のため、設定可能な日本語ロケールは「Japanese_Japan.932」になります。
※ 本手順実行後のロケール情報は以下の通りです。
postgres=> select name, setting, context from pg_settings where name like 'lc%'; name | setting | context -------------+----------------------------+----------- lc_collate | English_United States.1252 | internal lc_ctype | English_United States.1252 | internal lc_messages | English_United States.1252 | superuser lc_monetary | Japanese_Japan.932 | user lc_numeric | Japanese_Japan.932 | user lc_time | English_United States.1252 | user |
新規データベース作成 (lc_collate, lc_ctype パラメータ指定)
Azure Database for PostgreSQL に 管理者ユーザー で接続後、以下のパラメータで新規データベースを作成します。
- lc_collate : 「Japanese_Japan.932」(照合順序(文字列のソート順)設定)
- lc_ctype :「Japanese_Japan.932」(テキスト・データ文字のバイトの解釈(シングル バイト/マルチ バイト文字), 文字の種別 (数字など), 文字関数の文字処理規則の設定)
1) Azure Database for PostgreSQL に 管理者ユーザー で接続後、「CREATE DATABASE」コマンドに明示的に 「ENCODING」,「LC_COLLATE」,「LC_CTYPE」パラメータ値を指定して実行します。
postgres=> CREATE DATABASE <DB名> ENCODING='UTF8' LC_COLLATE='Japanese_Japan.932' LC_CTYPE='Japanese_Japan.932' TEMPLATE='template0'; |
※ LC_COLLATE, LC_CTYPE パラメータに「Japanese_Japan.932」を指定する場合、「TEMPLATE='template0'」を指定する必要がある。
※ 新規作成したデータベースにコンテキストを変更後のロケール情報は以下の通りです。
※ データベース単位で LC_COLLATE, LC_CTYPE パラメータ を指定することは可能ですが、データベース作成後に本パラメータ値を変更することはできません。
postgres=> \c <DB名> <DB名>=> select name, setting, context from pg_settings where name like 'lc%'; name | setting | context |
新規ロール (ユーザー) 作成/設定変更
新規ロール (ユーザー) 作成後、以下のパラメータ値を「ALTER ROLE」を変更します。
- lc_time : 「Japanese_Japan.932」(日付・時刻の書式設定)
<DB名>=> CREATE USER <ロール名 (ユーザー名)> WITH PASSWORD '<パスワード>'; |
※ 新規作成したロール (ユーザー) で新規作成したデータベースに接続後のロケール情報は以下の通りです。
<DB名>=> \connect - <ロール名 (ユーザー名)>; <DB名>=> select name, setting, context from pg_settings where name like 'lc%'; name | setting | context |
[補足]
Azure Database for PostgreSQL (シングルサーバー) では、変更可能な サーバー パラメータ が制限されており、「lc_time」,「lc_messages」パラメータについては変更できません。
なお、「lc_time」パラメータについては、 新規作成したロール (ユーザー) の既定の「lc_time」値で変更したり、ステートメントの中で「SET lc_time = 'Japanese_Japan.932' 」コマンドを実行することで動的に変更することもできます。
まとめ
今回は、Azure Database for PostgreSQL シングル サーバーを日本語ロケール設定に変更する方法についてまとめてみました。次回は、Azure AD 認証により Azure Database for PostgreSQL へ接続する設定方法についてまとめてみようと思います。
【第7回】基本から始める Azure Database for PostgreSQL 【フレキシブル サーバー : 既定のサーバー構成パラメータ、エンコーディング】 へ