S-JIS[2003-07-19/2003-09-07]

PostgreSQL7.2インストール・起動・初期設定

PostgreSQL7.2のインストールのメモ。


Linuxへのインストール

PostgreSQLのインストールには、普通postgresというユーザーを作り、それを使うらしい。
インストールの手順は、普通のUNIXのインストール手順と同じ。

configureのオプション
オプション 説明 備考
--enable-multibyte〔=エンコード〕 DB内で日本語を扱う場合に必要。 「--enable-multibyte=UNICODE」とやると、DB作成時のデフォルトコードがUNICODEになる。
ただ、EUC_JPは指定できてもSJISは指定できないようだ(psqlの\encodingはOK)。
--enable-unicode-conversion UNICODEとクライアントの文字コードの自動変換を行わせたい場合に必要。 PostgreSQL7.2以降では、このオプションをわざわざ指定する必要はないらしい。
--with-java JDBCのjarファイルも作られるらしい。  

普通にやれば、/usr/local/pgsqlにインストールされる。
日本語を使いたい場合は、/usr/local/pgsql/binにpg_encodingが出来ていることを確認する。

環境変数 設定値 説明
PATH /usr/local/pgsql/binを追加 PostgreSQLを実行するコマンド類。
PGDATA DBクラスタのディレクトリ名 以降に出てくる様々なコマンドのオプションに「-D」「--pgdata」を書かなかった場合、この環境変数の設定値が使われる。
PGCLIENTENCODING エンコード psqlで表示される文字コードのデフォルト。postmaster起動時にも使われるので注意。

JDBCで使いたい場合は、jdbc〜.jarファイルはこのインストールとは別に必要(configureに--with-javaを付ければよい?)。


データベースクラスタの作成

PostgreSQLのDBの実体を格納するディレクトリを作成する。この中に複数のDBを作ることが可能。
DBクラスタは複数作ることが出来るが、同時に稼動させる場合は、接続する為のポートは別にしなければならない。

$ initdb --pgdata=/usr/local/pgsql/data
initdbのオプション
オプション 説明
--pgdata=ディレクトリ
-D ディレクトリ
DBの実体を格納する場所を指定する。
環境変数PGDATAを設定していれば省略可能。
--pglib=/usr/local/pgsql/lib 省略可能。何でしょうね?

DBクラスタ作成後、コンフィグファイルに対して設定を行う。

$PGDATA/conf/postgresql.conf
設定 説明
tcpip_socket = true TCP/IP経由で接続する場合に必要。
port = 5432 TCP/IPで接続するポートを指定する。5432は、PostgreSQLのデフォルトポート。
virtual_host = '192.168.xx.xx' 自分(サーバー)として認識できるIPアドレス。
これを設定しておくと、自分(サーバー)に複数(仮想)IPが割り当てられていても、ここで指定したIPアドレスでしか接続できなくなる。
逆にこの指定が無いと、複数IPのうち どのアドレスでも接続可能。
max_connections = n 接続できるコネクション数。ここを増やすなら、ファイルディスクリプタ―の数も増やしておいた方がいいかも。
password_encryption = true パスワードをpg_shadowに格納する際にMD5形式に暗号化するかどうかを指定する。
PostgreSQL7.2のデフォルトはfalse、7.3のデフォルトはtrueらしい。
MD5形式を使う場合、pg_hba.confもMD5を指定しなければDBにアクセスできなくなる。

DBに接続するユーザーの情報を$PGDATA/conf/pg_hba.confに設定する。
pg_hba.confは、postmasterの起動時かSIGHUPシグナルが来た時に読み込まれる。

# TYPE     DATABASE    IP_ADDRESS    MASK               AUTH_TYPE  AUTH_ARGUMENT

local      all                                          trust                   ←ローカルからは全DBにアクセス可能
host       all         127.0.0.1     255.255.255.255    trust                   ←ローカルにTCP/IP経由で全DBにアクセス可能
host       db1         192.168.xx.0  255.255.255.0      password                ←192.168.xx.*からdb1にパスワードを入れればアクセス可能
host       all         192.168.xx.xx 255.255.255.255    password                ←192.168.xx.xxから全DBにパスワードを入れればアクセス可能
host       all         192.168.xx.xx 255.255.255.255    md5                     ←192.168.xx.xxから全DBにパスワードを入れればアクセス可能
設定 説明
TYPE local ネットワークを介さず直接DBにアクセスする。
host TCP/IP経由でDBにアクセスする。
DATABASE all 対象は全DB。
DB名 対象は指定したDB。
IP_ADDRESS   TCP/IPでの接続を許可するIPアドレス。
MASK   TCP/IPでの接続を許可するIPアドレスのマスク。
マスクが0の部分は任意の数値のIP_ADDRESSが接続可能。
逆に255.255.255.255はIP_ADDRESSで指定された1つのアドレスのみ接続可能となる。
AUTH_TYPE trust 無条件に接続可能。
password 入力されたパスワードが正しい時のみ接続可能。

データベースサーバーの起動

DBサーバーを起動して、それに対して接続してDB操作を行う。
PostgreSQLの場合、DBサーバーはpostmasterと呼ばれる。起動のコマンド名もpostmaster。 また、pg_ctlというシェルも使える。

postmaster -D /usr/local/pgsql/data -S -i

オプション 説明
-D ディレクトリ名 データディレクトリの場所を指定する。
環境変数PGDATAを設定していれば省略可能。
-S 静かなモード。標準出力等にメッセージを表示しない。
-i TCP/IP経由で接続したい場合に指定する。pg_ctlでは指定できない…
$ pg_ctl start -D /usr/local/pgsql/data
pg_ctlのオプション
オプション 説明
start postmasterの起動。
reload pg_hba.confの再読み込み。
stop postmasterの停止。

ちなみに、postmasterが起動すると$PGDATA/confの下に以下のようなファイルが作られる。

ファイル名 説明
postgresql.pid 実行中のpostmasterのプロセスIDが入っている。
DBクラスタごとバックアップをとる場合は注意。
postgresql.opts postmaster起動時のオプションが入っている。

ユーザー作成・DB作成

postmasterに対してSQLを実行することによりDBアクセスを行う。
PostgreSQLの場合、psqlというコマンドが用意されている。
その他にユーザー作成やDB作成等を行うコマンドがある。これらのコマンドは結局はpsqlを使ってSQLを発行している(らしい)為、postmasterが起動している必要がある。

クライアントアプリケーション
コマンド名 説明
psql SQLを発行するツール。以下、各コマンドで共通のオプション。
-h ホスト 接続するpostmasterのホスト名(あるいはIPアドレス)を指定する。
-p ポート 接続するpostmasterのポートを指定する。
-U ユーザー名 接続するユーザーを指定する。
createuser ユーザー名 ユーザー作成を行う。Oracleと違い、DBとユーザーには密接な関係は無い。
dropuser ユーザー名 ユーザーの削除を行う。
createdb DB名 DBの作成を行う。
-E エンコード デフォルトの文字コードを指定する。
dropdb DB名 DBの削除を行う。
createlang 言語DB名 例えばトリガー関数pgsqlを使いたい場合、このコマンドでplpgsqlを指定してやる必要がある。
pg_dump DB名 > ファイル名 バックアップを作成する。復元はpsql -fで行う。
-a データのみを出力し、テーブル等の定義は出力しない。
-s テーブル等の定義のみを出力し、データを出力しない。
-t テーブル名 指定されたテーブルのみを対象とする。
-d copy文ではなく、insert文で出力する。分かりやすいが遅くなるらしい
vacuumdb 不要領域の回収統計情報の更新(VACUUM)を行う。
-d DB名 指定されたDBが対象。
-a 全DBが対象。
-t テーブル名 指定されたテーブルが対象。さらに項目も指定可能。
-f
--full
VACUUM FULLを行う。
-z
--analyze
VACUUM ANALYZEを行う。

TCP/IP経由で接続するための手順のまとめ

  1. postgresql.confに、TCP/IPの設定を行う。
  2. pg_hba.confに、ネットワーク接続するユーザーの設定を行う。
  3. (必要があれば)ユーザーのパスワードを設定する。
  4. postmasterをTCP/IPで接続可能なオプション付きで起動する。

日本語を使う為の手順のまとめ

  1. PostgreSQLをインストールする際にマルチバイトを指定する。
  2. (デフォルトを指定したければ)DB作成時にエンコードを指定する。
    DBに指定したエンコードが知りたい場合はpsqlで-l\lを使用。
  3. psqlで使う場合は、表示したいエンコードを\encodingで指定する。

なお、PGCLIENTENCODINGという環境変数にエンコードを指定しておくと、psql起動時のエンコードになるので\encodingが不要になって便利。
ただし、PGCLIENTENCODINGはpostmaster起動時にも読まれるらしく、JDBCで使う場合は注意が必要。


バックアップ

DBのバックアップには、pg_dumpを使うのが分かりやすい。SQL文の形でテキストで出力されるので加工することもできる。

その他、DBの実体があるディレクトリをそのままコピーしても大丈夫。
ただし、postgresql.pidが在る場合は消しておいた方がいい。このファイルの内容は実行中のpostmasterのプロセスIDなので、postmasterを起動する度に変わる。この値が実行中のプロセスIDと一致していないと、postmasterの終了が出来なくなったりする。てゆーか、postmaster実行中にDBクラスタ単位でバックアップとるってのもどうかと思うけど…。


インストールへ戻る / PostgreSQLへ戻る / 技術メモへ戻る
メールの送信先:ひしだま