PostgreSQLの再起動
PostgreSQLの再起動で、5432ポートがつかめない現象が発生しました。再起動の手順は以下の通り。
$ pg_ctl stop $ pg_ctl start bash-2.05$ LOG: could not bind IPv6 socket: Cannot assign requested address HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry. LOG: could not bind socket for statistics collector: Cannot assign requested address LOG: database system was shut down at 2007-03-09 17:08:32 JST LOG: checkpoint record is at 1/D6CDC648 LOG: redo record is at 1/D6CDC648; undo record is at 0/0; shutdown TRUE LOG: next transaction ID: 2186724; next OID: 15942897 LOG: database system is ready
HINTで始まるところでTCP5432ポートがすでにグラブされていて、確保できないと言っています。pg_ctl stopを叩いた時点でpostmasterプロセスはいないことは確認すみ。
stopする前にどうやってpostmasterを起動していたかというと、/etc/rc2.d/pgsqlスクリプト経由で自動起動されています。こんな感じ。
/usr/bin/su - postgres -c "${PGSQL_HOME}/bin/pg_ctl -D ${PGDATA} -l $PG DATA/pgsql.log -o '-p ${PGPORT} -i' start"
ちょっと思いついて、su rootしてから/etc/rc2.d/pgsqlスクリプトを使って再起動してみました。
$ su - root # /etc/rc2.d/pgsql stop # /etc/rc2.d/pgsql start
こういう手順で再起動すると、5432ポートをちゃんとつかむことが出来ました。"su -c "で起動したプロセスはsuした先のユーザ(この場合postgresユーザ)で動作していると思うんだけど、ポートのコントロールはなぜかrootになっているみたい。全然納得いかないな。うーん、どうしてだろう。