NOBTAの気ままにITブログ

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

【第6回】基本から始める Azure Database for PostgreSQL 【シングルサーバー 日本語ロケール設定方法】


スポンサーリンク

第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」-「該当サーバー」-「設定」-「サーバー パラメータ」を選択します。

 

f:id:nobtak:20210912013901p:plain


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

 

f:id:nobtak:20210912015745p:plain

f:id:nobtak:20210912015624p:plain

 

※ 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
-------------+----------------------------+-----------
 lc_collate  | Japanese_Japan.932 | internal
 lc_ctype    | Japanese_Japan.932 | 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

 

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

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

  • lc_time : 「Japanese_Japan.932」(日付・時刻の書式設定)

<DB名>=> CREATE USER <ロール名 (ユーザー名)> WITH PASSWORD '<パスワード>';
<DB名>=> ALTER ROLE <ロール名 (ユーザー名)> SET lc_time = 'Japanese_Japan.932';
<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  | Japanese_Japan.932 | internal
 lc_ctype    | Japanese_Japan.932 | internal
 lc_messages | English_United States.1252 | superuser
 lc_monetary | Japanese_Japan.932  | user
 lc_numeric  | Japanese_Japan.932  | user
 lc_time     | Japanese_Japan.932 | user

 

[補足]

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 【フレキシブル サーバー : 既定のサーバー構成パラメータ、エンコーディング】 へ