PostgreSQLスキルアップノート(自己啓発のための個人サイト)
データベースクラスタ関連の補足
【一覧に戻る】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■■■■ PostgreSQL スキルアップノート
■■■■
■◆■■ データベースクラスタ関連の補足
■■■■
■■■■
■■■■ 2013/01/23
■■■■ 使用環境:PostgreSQL9.1.7 (CentOS6.2)
(C) 2013 ohdb
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★自己都合により実機確認は9.1、マニュアルへのリンクは9.2としています。ご了承下さい。
【マニュアル】
initdbコマンド→●[マニュアル]
■■【参考】PostgreSQLで可能な格納文字コードは?(データベースエンコーディング)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
第22章多言語対応→●[マニュアル]
に書かれている。
日本語の環境として使えるものを整理すると以下の通り
データベース クライアント
エンコーディング エンコーディング
(=サーバ?欄)
-----------------------------------------------------
EUC_JP ○ ○
EUC_JIS_2004 ○ ○
SJIS × ○
SHIFT_JIS_2004 × ○
UTF8 ○ ○
この表の中で、「サーバ?」という欄
「サーバ?」欄が「はい」となっている文字セットが、データベースエンコーディングに使用できるもの。
「いいえ」となっているものはクライアントエンコーディングでしか使えないので、DB格納文字コードにはできない。
例)「SJIS」
古いシステムを更改するときには使いたいケースもあるが、
「サーバ?」欄が「いいえ」なのでDBの格納文字コードとしてSJISは使えない。
ただしクライアントエンコーディングとしての使用は可能。
したがってPostgreSQLでSJISのデータを扱うこと自体は可能。
格納する際には、データベースエンコーディングで指定されたものに変換されることになる。
なお、SHIFT_JIS_2004などのクライアントエンコーディングもある。
ShiftJISの上位互換として2バイトで表現できるメリットが大きいものの、
JIS2004が必要な場合は一般的にはUnicodeで扱うことが多いのではないだろうか?
■■【参考】initdbで作成される3つのデータベース
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
initdbによりデータベースクラスタが作成され、その中に3個の
データベース(うち2個はテンプレートデータベース)が作成される。
(1)initdbとは
initdbはデータベースの初期化。=データベースクラスタの作成。
データベースを1個つくるのではなく、最初から3個用意される。
場所は指定したディレクトリ。
(2)データベースクラスタとは
データベースの格納領域(データベースは複数個)
環境変数名から「$PGDATA」と呼ばれる。
データベースクラスタ内に最初に作成されるデータベース
-------------------------------------------
template0 テンプレートデータベース
template1 テンプレートデータベース
postgres 標準付属ツールがデフォルトの接続先として使うDB
通常のDBと同様に使える。
(3)テンプレートデータベースとは?
新しいデータベースを作る際のコピー元となるもの。
★なぜ2個あるのか? 【重要】
--->本当の原本template0とカスタマイズできる原本template1
・デフォルトではtemplate1がコピー元として使われる。
・新しいDBを作る前にtemplate1になにかオブジェクトを登録しておくと
それも一緒にコピーしてくれる。
・ただし、template0には作成は不可(こちらは原本のようなもの)
本当のオリジナルをコピーしたい場合にはtemplate0を指定してDBを作る。
■■【参考】initdb実行時に指定するもの
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★エンコーディングとロケール、ディレクトリを指定する。
initdb --encoding=UTF8 --no-locale /home/postgres/data
---------------- ----------- ------------------------
@ A B
@ エンコーディング
例)--encoding=UTF8 など
-E UTF8も同じであるがあまり見かけない(?)
A ロケール
例)
initdb -D --no-locale /home/postgres/data
initdb -D /home/postgres/data
initdb --encoding=UTF8 --no-locale /home/postgres/data
ロケールを指定しない場合はOSユーザのロケールが引き継がれる。
意識して実施する分にはよいが指定の省略には注意が必要である。
・・・明示して作成した方が無難。
PostgreSQLでは、このロケールを主にデータのソート処理に使用する。
が、英語や日本語のデータを扱う場合には特に指定する必要はない。
反対にロケールを設定するとソート処理などが遅くなるため注意が必要と言われている。
B データベースクラスタを作成するディレクトリ
・ディレクトリの指定は-Dや-pgdata=を使った書き方も同じ意味
・未指定の場合は、環境変数PGDATAが使われる。★
・権限のない場所の場合はrootで作成してディレクトリの所有者を変更してから実施のこと。
その他補足
・initdbを実行したユーザ(この場合postgres)がPostgreSQLの管理ユーザとなる。
データベースクラスタの管理(停止起動など)はこのユーザのみ。
・initdbで作られる初期ユーザ(データベースユーザ)として
postgresSQl管理ユーザと同名 のユーザが自動的に用意される。
以上