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管理ユーザと同名 のユーザが自動的に用意される。





以上






inserted by FC2 system