UbuntuでPostgreSQLを使ってみよう (3)
NTT オープンソースソフトウェアセンタ 鈴木 幸市
5. 高度な設定
前のページでは、ubuntu でインストールしたPostgreSQLの使い方を説明しました。このページでは、インストールした主な内容を紹介し、少し設定の変更をしてみることにします。
実際に行うのは、
- データベースサーバを手動で開始、終了する。
- データベースサーバの運転状況やエラーログをデフォルトとは別な場所に保存する。
の2つです。では、まず、インストールした内容を紹介しましょう。
5.1 これまででインストールされたもの
- (1) PostgreSQLのバージョン
- 執筆時点では、インストールされるPostgerSQLのバージョンは 8.3.6 です。コミュニティの最新版の一つ前ということで、かなり新しい版がインストールされています。
- postgres ユーザのホームディレクトリは /var/lib/postgresql に設定されています。
- (2) 設定ファイル
- 設定ファイルは、/etc/postgresql ディレクトリ配下にあります。いくつかのファイルがありますが、今回変更するのはpostgresql.conf ファイルです。それ以外のファイルの内容と設定方法は、PostgreSQLのマニュアルを参照してください。
- (3) データベースクラスタ
- 実際のデータベースは/var/lib/postgresql/8.3/main ディレクトリに置かれています。
- (4) その他の主要なファイル
- /usr/share/postgresql/8.3 postgerSQLコマンドのマニュアルページ、設定ファイルの例などがあります。
- /usr/share/doc/postgresql/8.3 PostgreSQLの全体の記述などがあります。
5.2 データベースサーバの起動と終了
次に述べるデータベースサーバの設定の変更などを行った後ではデータベースサーバを再起動する必要があることがあります。
このためのシェルコマンドが /etc/init.d/postgresql-8.3 です。このシェルコマンドは、他のシステムプロセスの起動終了と同じインタフェースで動作します。
postgresql-8.3 start で、データベースサーバの動作が開始されます。
postgresql-8.3 stop でデータベースサーバの動作が終了します。
postgresql-8.3 restart でデータベースの設定ファイルを読み直し、サーバを再起動します。
postgresql-8.3 status でデータベースサーバが運転中かどうかを問い合わせます。
5.3 設定ファイルの編集とサーバログの可視化
デフォルトの設定ではサーバログは捨てられてしまいます。これを残すには、postgresql の設定ファイルを編集して運転ログをファイルに残すようにし、サーバを再起動する必要があります。
postgresql サーバの設定情報は /etc/postgresql/8.3/main/postgresql.conf ファイルで指定します。これがサーバの全設定情報のもとになっています。
一方、運転ログは上記の /etc/init.d/postgresql-8.3 コマンドで指定されていて、デフォルトでは /var/log/postgresql-8.3-main.log に出力されます。
これを任意のファイルに出力し、かつ、毎日、あるいはログの量が一定量を超えた場合には運転ログを別のファイルに切り替えて出力するようにしてみましょう。
/etc/postgresql/8.3/main/postgresql.conf ファイルを編集します。編集に使えるツールはたくさんありますが、システムファイルの編集には vi を使う場合が多いようです。
ファイルの編集を誤って内容が元に戻せないと困りますので、このファイルのバックアップを作ります。単純にこのファイルのコピーを別な名前で作るだけです。/etc/ostgresql/8.3/mainディレクトリの所有者はroot ユーザです。このディレクトリにファイルのコピーを作るにはroot の資格が必要です。そこで、以前に使った sudo コマンドを使って root ユーザの資格で postgresql.conf のバックアップを作ることにします。コピー先のファイルの名前は postgresql.conf.org とします。コマンドは次のようにします。
$ sudo cp postgresql.conf postgresql.conf.org
面倒ですが、設定のままでは、postgres ユーザは sudo コマンドで root の資格でコマンドを実行することができないようになっています。そこで、このコマンドを入力する前に、sudo コマンドで root になれるユーザの資格 (この例ではkoichi) が必要です。上記のコマンドを入力する前に、su コマンドで koichi の資格になっていてください。多少複雑です。postgresql で sudo コマンドを使えるようにする方法や、su コマンドで root になれるようにする方法は、ネット上でもいろいろ公開されていますので、検索してみてください。
この後 postgresql.cof ファイルを編集します。このファイルの持ち主は postgres ユーザです。したがって、上記の方法でバックアップを作った後は、元の postgres ユーザに戻る必要があります。su コマンドであれば、「exit」コマンドで元の postgres ユーザに戻ることができます。
5.4 PostgreSQLファイルの編集
慣れた方であれば、vi エディタが便利ですが、初心者の方は GUI のテキストファイルである gedit を使います。postgreSQLファイルは postgres ユーザの持ち物です。そこで、postgres ユーザになって gedit を動かします。GUIツールを使うには、まずkoichiをログアウトして、postgres ユーザでログインしなおします。
postgresユーザでログインしたら、アプリケーション→アクセサリ→テキスト・エディタでメニューを選択します(図24)。すると、gedit が起動されます(図25)。
図24 gedit テキストエディタの起動
図25 gedit エディタの画面
この画面で「開く」をクリックして、/etc/postgresql/8.3/main/postgresql.confファイルを開きます。このとき開く画面の左側で「ファイルシステム」を選択すると、ディレクトリの最初からファイルを指定していくことができます(図26)。
図26 ファイルを開くためにまずファイルシステムを選択する
すると、図27のような画面が現れます。これで設定ファイルが編集できます。慣れたユーザなら、ここまで手間をかけずに前のページで使った端末から
gedit /etc/postgresql/8.3/main/postgresql.conf
コマンドをタイプしても同じ画面になります。
図27 gedit エディタで設定ファイルを開く
この設定ファイルを編集してPostgreSQLの運転ログを /var/lib/psotgresql/8.3/main/pg_log ディレクトリに出力するようにします。
設定ファイルは1行でひとつの設定パラメータ (GUC といいます) を指定するようになっています。行頭が # で始まる行はコメントです。最初が空白で最初に現れる文字が # である行もコメント行です。
設定パラメータは、
パラメータ名 = パラメータ値
の形式で指定します。パラメータ値が文字列の場合はクォートで囲みます。数値の場合はクォートは不要です。パラメータ値を on/off で示す場合もありますし、1d のように時間や時刻で示す場合もあります。このような場合もクォートで囲む必要はありません。パラメータの指定の後、さらに # に続けてコメントを書くことができます。詳しくは、PostgreSQLのマニュアルページをご覧ください。
図27を見てみると、設定ファイルのほとんどはコメントであることがわかります。設定ファイルはとても重要な情報が入っているので、誤った編集を防止するために、各パラメータの設定方法や意味が細かに書かれているのです。
運転ログの出力先を指定する行が、「ERROR REPORTING AND LOGGING」のセクションにまとめて書いてあります。ちょうど設定ファイルの真ん中くらいです。図28にその様子を示します。これから編集する行もあわせて示しています。
図28 postgresql.conf ファイルのここを編集する
それぞれのパラメータの設定方法は次の通りです。ほとんどはコメントを取っただけです。
- log_destination パラメータ: 'stderr’ を指定します。
- log_collector パラメータ: on に設定します。
- log_directory パラメータ: 'pg_log' に設定します。これはログを格納するディレクトリ名で、他の名前でも構いません。/var/lib/psotgresql/8.3/main からの相対パス名で指定します。
- log_filename パラメータ: 'postgresql-%Y-%m-%d_%H%M%S.log' を指定します。%の次の文字は、ログファイルを生成した日付、時刻を埋め込むためのものです。
- log_truncate_on_rotation パラメータ: off に設定し、同じファイル名のログがあったらそれに追加して書き込むようにします。
- log_rotation_age: 1d に設定します。これで、毎日運転ログが別のファイルに書き出されるようになります。
- log_rotation_size: 10MBに設定します。これで、6.の設定にもかかわらずログファイルのサイズが10MBを超えると新たなログファイルが作られるようになります。
編集に際しては、元の状態がわかるように、編集前の行はそのまま残し、新たに編集後の行を追加するようにしましょう。すると、編集後のファイルは図29のようになっています。
図29 編集後の potgresql.conf ファイル
ここで定義したパラメータの詳細は、PostgreSQLのマニュアルページをご覧ください。
次いで、pg_log ディレクトリを作成します。ls -F コマンドを使って、きちんとディレクトリが生成できていることを確認します。(図30)
図30 pg_log ディレクトリの作成
これで準備は完了です。あとはpostgresql のサーバを再起動するだけです。このやり方は図31のとおりです。これは、root ユーザ権限で行ってください。
図31 postgresql サーバの再起動
これで終わりです。postgres ユーザに戻って /var/lib/psotgresql/8.3/main/pg_log ディレクトリに運転ログのファイルができていることを確認していみましょう(図32)。
図32 運転ログが作成されていることを確認
6. おわりに
この記事では、WIndows-XP が動作しているPCにVirtualBox を用いてubuntuを同居させ、ubuntu の提供している postgresql バイナリをインストールして動作させるまでの手順を順を追って解説しました。ここでインストールしたものは完全な PostgreSQL サーバです。手順は長いようですが、実際にはubuntu を導入してしまえばその後のステップは数分で完了します。
PostgreSQL の導入や学習のお役に立てば幸いです。
(2009年4月27日公開)