[pgsql-jp: 26933] Re: postmasterをdaemontool から起動していますが、「createdb」ができません。
Shuhei Tomita
tomita @ zingy.or.jp
2002年 8月 6日 (火) 18:31:47 JST
冨田と申します。
> 現在、以下の環境でpostgresqlを使用しています。
>
> [環境]
> OS : FreeBSD4.4
> Postgresql : postgresql-7.2.1
> daemontool : daemontool-0.70
ぉぉ、奇特にもかなり近い環境の方がいらっしゃるとは。
ちょうど近い環境がありますので試してみました。
OS : FreeBSD 4.4-Release
Postgresql : postgresql-7.1.3
daemontool : daemontool-0.70
> /var/service/pgsql/runには以下のように設定しています。
> ----------------------------------------------------------------
> #!/bin/sh
> exec env - PATH="/usr/local/pgsql/bin:/usr/local/bin:/usr/bin:/usr/sbin" \
> PGDATESTYLE=ISO \
> setuidgid postgres \
> postmaster -i -D /usr/local/pgsql/data -p 5432
> ----------------------------------------------------------------
確かに、このrunスクリプトで起動してcreatedbしてみると、私の環境でも全く
同じエラーになります。
> NOTICE: database directory '/usr/local/pgsql/data/base/1046419' could not
> be removed
> ERROR: CREATE DATABASE: could not initialize database directory; delete
> failed as well
> createdb: database creation failed
そこで、postmasterの起動オプションにデバッグフラグ(-d 2)を追加して
multilogでログを取ってみると、createdb時のエラーメッセージの舞台裏を見る
ことができました。
| DEBUG: StartTransactionCommand
| DEBUG: query: CREATE DATABASE "test"
| DEBUG: ProcessUtility: CREATE DATABASE "test"
| cp: not found
| rm: not found
| NOTICE: database directory '/usr/local/pgsql/data/base/18725' could
| not be removed
| ERROR: CREATE DATABASE: could not initialize database directory;
| delete failed as well
| DEBUG: AbortCurrentTransaction
どうやら、cpとrmが見つからないと言っているようです。
そこで、runスクリプトの
PATH="/usr/local/pgsql/bin:/usr/local/bin:/usr/bin:/usr/sbin"に、
cpとrmの在処を追加して、
PATH="/usr/local/pgsql/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin"に
すると、createdbできるようになりませんか?
さて、ここで、内部構造に詳しい方にお尋ねしたいのですが、今回のcreatedbが
失敗する際の環境変数は、
1.postmaster起動時の環境変数PATHに/binが含まれない
2.createdb実行時の環境変数PATHに/binが含まれる
という条件でした。ということは、createdbがcpやrmを呼び出しているのではな
く、postmaster(postgres)がcpやrmを呼んでいるんでしょうか?
………………………………………………………………………………………………
冨田 修平(Shuhei Tomita) tomita @ zingy.or.jp
………………………………………………………………………………………………
pgsql-jp メーリングリストの案内