#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)