さて、昨日届いた「恐るべきさぬきうどん」の「松家」うどん、 今日は細麺の方を食べてみました。 麺も美味しいけど、何と言ってもこのスープがいいな〜。 ごちそうさまでした。
ところで、FreeBSD の ports からインストールした PostgreSQL に関するメモ。 (今まで諸事情で ports から入れていないものを使うことが多かったので)
pg_hba.conf で、次のように指定した場合 (というか、これが標準であるわけだが…)、 一般ユーザであっても「% psql DBNAME pgsql」としてしまうと、 簡単に DB のスーパーユーザーが握れてしまいます。
local all all trust
さすがにこれでは、DB 専用の隔離マシンを作れるリッチな環境ならともかく、 そうでもない環境では実用に難があります。 そこで普通は、次のような感じにして、 DB スーパーユーザーのパスワードを入力させるようにするわけですが、 このまま再起動すると、起動時に「Password:」と聞いてきて、 自動で再起動が完了しなくなってしまいます。
リモートから再起動した場合などは、もはやおしまいです。 永遠にそのマシンにアクセスできなくなる可能性が高いです。
local all all password
これは、なぜか /usr/local/etc/rc.d/010.pgsql.sh の start 処理部分の、 pg_ctl の起動オプション内に、次のように -w オプション (PostgreSQL が起動するまで待つ) が入っているためです。 どうも起動確認のために pgsql ユーザで接続を試みてしまうらしい。 man pg_ctl によると、-w オプション自体は、 PostgreSQL のデーモンが起動しなかった場合に 60 秒でタイムアウトするものの、 パスワードの入力はなぜかタイムアウトしてくれないようです。
start) touch ${logfile} chmod 600 ${logfile} chown pgsql:pgsql ${logfile} [ -x ${PGBIN}/pg_ctl ] && { su -l pgsql -c \ "[ -d \${PGDATA} ] && exec ${PREFIX}/bin/pg_ctl start -s -w -l ${logfile}" echo -n ' pgsql' } ;;
このオプションをはずせば単純に起動してくるわけですが、 それにしても何でこのオプションが標準でついているのでしょう? ああ、そうか、 PostgreSQL に依存するアプリケーションが /usr/local/etc/rc.d/*.sh から起動されるものにあった場合、 DB 呼び出しに失敗してしまうためですね。
………そんなの失敗してもいいじゃん。 DB 接続に失敗したら普通何らかのメッセージの表示とかエラー処理をするだろうに。 それで問題を起こすようなアプリを書く方が悪い! (個人的意見)
うーん、痛し痒しだけれども、 やはり何とかならないものかな〜。 リモートでしか触れないマシンでこれやられると大変です。 パッチ書いて send-pr するかな〜。