このエントリーをはてなブックマークに追加


PostgreSQLのロケール設定の確認方法とロケール設定方法

PostgreSQLのデータベースクラスタのロケール設定値の確認方法とロケール設定方法を以下に記します。

関連資料

本資料で使用した環境

  • OS
    CentOS6(X86_64)
     
  • PostgreSQL(CentOSのRPMパッケージを使用)
    PostgreSQL 8.4.13 on x86_64-redhat-linux-gnu, compiled by GCC gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4), 64-bit

データベースクラスタのロケール設定値の確認方法

以下のSQLを発行することによりデータベースクラスタのロケールを確認することができます。

SELECT name, setting, context FROM pg_settings WHERE name LIKE 'lc%';

実際にSQLを実行した時の出力結果です。

-bash-4.1$ psql
psql (8.4.13)
"help" でヘルプを表示します.

postgres=# 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 | ja_JP.UTF-8 | superuser
 lc_monetary | ja_JP.UTF-8 | user
 lc_numeric  | ja_JP.UTF-8 | user
 lc_time     | ja_JP.UTF-8 | user
(6 行)

上記で出力されたlc_%の各種情報ですが、lc_collateとlc_ctypeはcontextがinternalになっています。
これは変更できないことを意味しています。
上記のlc_messages, lc_monetary, lc_numeric, lc_timeに関してはpostgresql.confファイル内で指定することができます。
このlc_%の値はCREATE DATABASEをした時にデフォルトの値として使用されます。
CREATE DATABASEコマンドで他のロケールなどを指定すればinitdbコマンドで指定したロケールなどと異なるデータベースを作成することができます。
この件に関しては後述します。

  • lc_%の説明 以下、PostgreSQLのドキュメントから抜粋しました。
    LC_COLLATE文字列の並び換え順
    LC_CTYPE文字の分類(文字とはどんなもの?大文字小文字を区別しない?)
    LC_MESSAGESメッセージの言語
    LC_MONETARY通貨書式
    LC_NUMERIC数字の書式
    LC_TIME日付と時刻の書式

CREATE TABLEでロケールなどを指定してみる

上記では、initdbで作成したデータベースクラスターの値を確認しました。
以下、CREATE DATABASEでロケールを指定してみます。

  1. encoding = eucjp, locale=ja_JP.eucjp
    createdb --encoding=eucjp --locale=ja_JP.eucjp --template=template0 db1
  2. locale=C
    createdb --locale=C --template=template0 db2
  3. locale=C, encoding=SQL_ASCII
    createdb --locale=C --encoding=SQL_ASCII --template=template0 db3

上記のコマンドを実行した後の結果をpsql -lで確認しました。

-bash-4.1$ psql -l
                                         データベース一覧
   名前    |  所有者  | エンコーディング |  照合順序   | Ctype(変換演算子) |      アクセス権
-----------+----------+------------------+-------------+-------------------+-----------------------
 db1       | postgres | EUC_JP           | ja_JP.eucjp | ja_JP.eucjp       |
 db2       | postgres | UTF8             | C           | C                 |
 db3       | postgres | SQL_ASCII        | C           | C                 |
 postgres  | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       |
 template0 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                           : postgres=CTc/postgres
 template1 | postgres | UTF8             | ja_JP.UTF-8 | ja_JP.UTF-8       | =c/postgres
                                                                          : postgres=CTc/postgres

以上、ロケール確認と設定についての資料でした。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:08:00