NOBTAの気ままにITブログ

Azure全般 / SQL Serverに関する情報を発信していきます。

【第8回】基本から始める Azure Database for PostgreSQL 【フレキシブル サーバー 日本語ロケール設定方法】


スポンサーリンク

第7回では、Azure Database for PostgreSQL フレキシブル サーバーの説明、既定のサーバー構成パラメータ値、エンコーディング設定に関する内容をまとめてみました。

今回は、Azure Database for PostgreSQL フレキシブル サーバーを日本語ロケール設定に変更する方法について、自分の整理も兼ねて、まとめてみようと思います。

※ Azure Database for PostgreSQL フレキシブル サーバー バージョン 13.3 を使用して検証

 

 

 

日本語ロケール設定方法について

Azure Database for PostgreSQL フレキシブル サーバー のデプロイ直後の既定の設定は、「server_encoding」:「UTF8」, 「lc_*」:「en_US.utf8」になっています。 既定で作成されるデータベース「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     | 13.3   | internal
 server_version_num | 130003  | internal

 

postgres=> select name, setting, context from pg_settings where name like 'lc%';
    name     |          setting           |  context
-------------+----------------------------+-----------
 lc_collate  | en_US.utf8 | internal
 lc_ctype    | en_US.utf8 | internal
 lc_messages | en_US.utf-8 | superuser
 lc_monetary | en_US.utf-8  | user
 lc_numeric  | en_US.utf8  | user
 lc_time     | en_US.utf8 | user

 

サーバー パラメータ設定変更

Azure Database for PostgreSQL フレキシブル サーバー で 以下のように サーバー パラメータ を変更します。

  • lc_monetary : 「ja_JP.utf-8」(通貨書式設定)
  • lc_numeric :「ja_JP.utf-8」(数字の書式設定)
  • timezone : 「Asia/Tokyo」(タイムゾーン設定 (既定: UTC))

 

1) Azure ポータル から Azure Database for PostgreSQL サーバー (種類: フレキシブル サーバー) - 設定 - サーバー パラメータ を選択

f:id:nobtak:20210919194709p:plain

 

2) サーバー パラメータを変更し、「保存」を選択します。

f:id:nobtak:20210919203832p:plain

※ Azure Database for PostgreSQL フレキシブル サーバーの基盤OSは Linux のため、設定可能な日本語ロケールは「ja_JP.utf-8」になります。

※ 本手順実行後のロケール情報は以下の通りです。

postgres=> select name, setting, context from pg_settings where name like 'lc%';
    name     |          setting           |  context
-------------+----------------------------+-----------
  lc_collate  | en_US.utf8 | internal
 lc_ctype    | en_US.utf8 | internal
 lc_messages | en_US.utf-8 | superuser
 lc_monetary | ja_JP.utf-8  | user
 lc_numeric  | ja_JP.utf-8  | user
 lc_time     | en_US.utf8 | user

 

新規データベース作成 (lc_collate, lc_ctype パラメータ指定)

Azure Database for PostgreSQL フレキシブル サーバー に 管理者ユーザー で接続後、以下のパラメータで新規データベースを作成します。

  • lc_collate : 「ja_JP.utf-8」(照合順序(文字列のソート順)設定)
  • lc_ctype :「ja_JP.utf-8」(テキスト・データ文字のバイトの解釈(シングル バイト/マルチ バイト文字), 文字の種別 (数字など), 文字関数の文字処理規則の設定)

 

1) Azure Database for PostgreSQL フレキシブル サーバーに 管理者ユーザー で接続後、「CREATE DATABASE」コマンドに明示的に 「ENCODING」,「LC_COLLATE」,「LC_CTYPE」パラメータ値を指定して実行します。

postgres=> CREATE DATABASE <DB名> ENCODING='UTF8' LC_COLLATE='ja_JP.utf-8' LC_CTYPE='ja_JP.utf-8' TEMPLATE='template0';

※ LC_COLLATE, LC_CTYPE パラメータに「ja_JP.utf-8」を指定する場合、「TEMPLATE='template0'」を指定する必要がある。

 

※ 新規作成したデータベースにコンテキストを変更後のロケール情報は以下の通りです。

※ データベース単位で LC_COLLATE, LC_CTYPE パラメータ を指定することは可能ですが、データベース作成後に本パラメータ値を変更することはできません。

postgres=> \c <DB名>

<DB名>=> select name, setting, context from pg_settings where name like 'lc%';

    name     |          setting           |  context
-------------+----------------------------+-----------
 lc_collate  | ja_JP.utf-8 | internal
 lc_ctype    | ja_JP.utf-8 | internal
 lc_messages | English_United States.1252 | superuser
 lc_monetary | ja_JP.utf-8  | user
 lc_numeric  | ja_JP.utf-8  | user
 lc_time     | English_United States.1252 | user

 

新規ロール (ユーザー) 作成/設定変更

新規ロール (ユーザー) 作成後、以下のパラメータ値を「ALTER ROLE」を変更します。

  • lc_time : 「ja_JP.utf-8」(日付・時刻の書式設定)

<DB名>=> CREATE USER <ロール名 (ユーザー名)> WITH PASSWORD '<パスワード>';
<DB名>=> ALTER ROLE <ロール名 (ユーザー名)> SET lc_time = 'ja_JP.utf-8';
<DB名>=> GRANT azure_pg_admin TO <ロール名 (ユーザー名)>;

 

※ 新規作成したロール (ユーザー) で新規作成したデータベースに接続後のロケール情報は以下の通りです。

<DB名>=> \connect - <ロール名 (ユーザー名)>;

<DB名>=> select name, setting, context from pg_settings where name like 'lc%';

    name     |          setting           |  context
-------------+----------------------------+-----------
 lc_collate  | ja_JP.utf-8 | internal
 lc_ctype    | ja_JP.utf-8 | internal
 lc_messages | English_United States.1252 | superuser
 lc_monetary | ja_JP.utf-8  | user
 lc_numeric  | ja_JP.utf-8  | user
 lc_time     | ja_JP.utf-8 | user

 

[補足]

Azure Database for PostgreSQL フレキシブル サーバー では、変更可能な サーバー パラメータ が制限されており、「lc_time」,「lc_messages」パラメータについては変更できません。

なお、「lc_time」パラメータについては、 新規作成したロール (ユーザー) の既定の「lc_time」値で変更したり、ステートメントの中で「SET lc_time =  'ja_JP.utf-8' 」コマンドを実行することで動的に変更することもできます。

 

まとめ

今回は、Azure Database for PostgreSQL フレキシブル サーバーを日本語ロケール設定に変更する方法についてまとめてみました。次回は、Azure AD 認証により Azure Database for PostgreSQL フレキシブル サーバーへ接続する設定方法についてまとめてみようと思います。

 

【第9回】基本から始める Azure Database for PostgreSQL 【Azure AD認証による接続方法】