Debian での PostgreSQL の起動機序

Debian GNU/Linux 5.0「lenny」での PostgreSQL の自働起動(起動他)機序をみる、起動パラメータの与え方とか設定ファイル類の読まれ方なんかを確認するため。
ちなみに Debianインストール時に tasksel選択で「SQLデータベース」を選んでインストールされたのは (PostgreSQL) 8.3.9。

  1. /etc/rc3.d/S19postgresql-8.3
    1. ここからだとして、これは次の init.dスクリプト
  2. /etc/init.d/postgresql-8.3
    1. INIT情報普通に
    2. 環境変数について注意書き、ここに書いても無駄、/etc/postgresql/8.3//environment へ
      1. /etc/postgresql/8.3/main/environment
      • コメントのみ、特に値はない
    3. /usr/share/postgresql-common/init.d-functions を読む
    4. 第一引数で case 選択
    5. start なら「start $VERSION」($VERSION は 8.3)
    6. start()関数の定義は上記 init.d-functions にある
  3. /usr/share/postgresql-common/init.d-functions
    1. start()
      1. pid用のディレクトリの設定とか
      2. 「do_ctl_all start "$1" "Starting PostgreSQL $1 database server"」$1は 8.3 だよね
    2. do_ctl_all()
      1. $1、$2 あるよね、ここでは $1 は start、$2 はバージョン番号 8.3 で呼んでたよね
      2. その関係の etcファイルとか postmasterプログラムあるよね
      3. 「log_daemon_msg "$3"」さっき呼ばれたときの第3引数、スタートするよメッセージ
      4. /etc/postgresql/"$2"/* をぐるぐる回る、データベースクラスター全部ということ
      5. 夫々の postgresql.conf を見て
      6. 夫々の start,coof を見る、「auto」と書いてある
      7. 「auto」だと自働起動する
      8. クラスターの名前を log_daemon_msg へ
      9. stop や restart じゃなければ
      10. 「ERRMSG=$(pg_ctlcluster "$2" "$name" $1 2>&1)」$2 は 8.3、$name にはクラスターの名前が入ってる、$1 は start だったよね、最後 2>&1 とあるので標準エラーは標準出力にでてくる、そして ERRMSG に入る
      11. といことで pg_ctlcluster 8.3 main start と起動
      12. ステータスチェックしたりエラーならエラー出したりして、そしてステータス返して了

pg_ctlcluster 以降は PostgreSQL一般のことになる。

この起動機序をたどっていると、複数の PostgreSQLクラスターをいっぺんに起動(或いは他の操作)することに心を砕いているように感じる。起動時オプションとかつけるような感じではない、しかし、きちんとクラスター毎に postgresql.conf を読み分けるなどしている(当然ではある)ので、なんか設定あるならそこで(一時的なオプション指定でも)。