#navi(../)
* PostgreSQLのロケール設定の確認方法とロケール設定方法 [#i246495b]
PostgreSQLのデータベースクラスタのロケール設定値の確認方法とロケール設定方法を以下に記します。

#contents
#htmlinsertpcsp(db-top.html,db-sp.html)

* 関連資料 [#k87b56e1]
-[[PostgreSQLのtemplate0とtemplate1の違いについて>PostgreSQL/template0とtemplate1の違いについて]]

* 本資料で使用した環境 [#k7403cdf]
- OS~
CentOS6(X86_64)
#br
- 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

* データベースクラスタのロケール設定値の確認方法 [#jcb0f4ec]
以下の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でロケールなどを指定してみる [#m69e250a]
上記では、initdbで作成したデータベースクラスターの値を確認しました。~
以下、CREATE DATABASEでロケールを指定してみます。
+ encoding = eucjp, locale=ja_JP.eucjp
 createdb --encoding=eucjp --locale=ja_JP.eucjp --template=template0 db1
+ locale=C
 createdb --locale=C --template=template0 db2
+ 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

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

#htmlinsertpcsp(db-btm.html,db-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS