S-JIS[2003-07-19/2003-09-07]
PostgreSQL7.2のインストールのメモ。
PostgreSQLのインストールには、普通postgresというユーザーを作り、それを使うらしい。
インストールの手順は、普通のUNIXのインストール手順と同じ。
オプション | 説明 | 備考 |
---|---|---|
--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
オプション | 説明 |
---|---|
--pgdata=ディレクトリ -D ディレクトリ |
DBの実体を格納する場所を指定する。 環境変数PGDATAを設定していれば省略可能。 |
--pglib=/usr/local/pgsql/lib | 省略可能。何でしょうね? |
DBクラスタ作成後、コンフィグファイルに対して設定を行う。
設定 | 説明 |
---|---|
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
オプション | 説明 |
---|---|
start | postmasterの起動。 |
reload | pg_hba.confの再読み込み。 |
stop | postmasterの停止。 |
ちなみに、postmasterが起動すると$PGDATA/confの下に以下のようなファイルが作られる。
ファイル名 | 説明 |
---|---|
postgresql.pid | 実行中のpostmasterのプロセスIDが入っている。 DBクラスタごとバックアップをとる場合は注意。 |
postgresql.opts | postmaster起動時のオプションが入っている。 |
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を行う。 |
なお、PGCLIENTENCODINGという環境変数にエンコードを指定しておくと、psql起動時のエンコードになるので\encodingが不要になって便利。
ただし、PGCLIENTENCODINGはpostmaster起動時にも読まれるらしく、JDBCで使う場合は注意が必要。
DBのバックアップには、pg_dumpを使うのが分かりやすい。SQL文の形でテキストで出力されるので加工することもできる。
その他、DBの実体があるディレクトリをそのままコピーしても大丈夫。
ただし、postgresql.pidが在る場合は消しておいた方がいい。このファイルの内容は実行中のpostmasterのプロセスIDなので、postmasterを起動する度に変わる。この値が実行中のプロセスIDと一致していないと、postmasterの終了が出来なくなったりする。てゆーか、postmaster実行中にDBクラスタ単位でバックアップとるってのもどうかと思うけど…。