PostgreSQLのデータベースクラスタのロケール設定値の確認方法とロケール設定方法を以下に記します。
以下の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_COLLATE | 文字列の並び換え順 |
LC_CTYPE | 文字の分類(文字とはどんなもの?大文字小文字を区別しない?) |
LC_MESSAGES | メッセージの言語 |
LC_MONETARY | 通貨書式 |
LC_NUMERIC | 数字の書式 |
LC_TIME | 日付と時刻の書式 |
上記では、initdbで作成したデータベースクラスターの値を確認しました。
以下、CREATE DATABASEでロケールを指定してみます。
createdb --encoding=eucjp --locale=ja_JP.eucjp --template=template0 db1
createdb --locale=C --template=template0 db2
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
以上、ロケール確認と設定についての資料でした。