[pgsql-jp: 36567] Re: psqlコマンドの"-d"オプションについて
NAKANO Yoshihisa
nakano.yosihisa @ jp.fujitsu.com
2005年 12月 16日 (金) 20:27:41 JST
はじめまして。中野です。
> psqlのコマンドラインでは"-d"オプションは省略可能なはずなのに、
> 省略するとエラーになるケースがあるのはなぜでしょうか?
> また、OSによってこのように動作が違ってしまうのはなぜでしょうか?
プログラムに指定された引数を解析するgetopt関数の仕様がOSごとに異なるため
です。
> testuser @ linuxhost 22: psql testDB -ftest.sql
Linuxのgetopt関数は、引数をスキャンする際に、オプション以外の要素(-から
始まっていない文字列。この場合、testDB)を最後に移動します。
HP-UXのgetopt関数は、オプション以外の要素に遭遇した段階で、引数の解析処
理を打ち切ります。
psqlコマンドが受け付けるコマンド書式は、psql [options] [dbname [user]]
なので、Linuxの場合は、-ftest.sqlがオプション、testDBがデータベース名と
して処理されますが、HP-UXの場合は、testDBがデータベース名、-ftest.sqlが
ユーザ名として処理されます。
> testuser @ hpuxhost 23: psql -dtestDB -ftest.sql
上の説明から、この場合には、正しく動くこともお分かりいただけるかと思いま
す。
OSの違いによらず、同じ結果を得るためには、上記のpsqlの書式に合せたオプ
ションの記述をするのが良いでしょう。
Yumiko Izumi wrote:
> お世話になっております。Izumiです。
>
> psqlコマンドの"-d"オプションについて質問です。
>
> PostgreSQLのバージョンは7.3.8です。
> Linux、Solaris、HP-UX、AIXで使用しています。
>
> 以下コマンドラインはどのOSで実行しても正しく実行できます。
> psql testDB
>
> 以下コマンドラインは、Linuxでは正しく実行できますが、Linux以外のOSではエラーになります。
> <Linux>
> testuser @ linuxhost 22: psql testDB -ftest.sql
> <Linux以外>
> testuser @ hpuxhost 22: psql testDB -ftest.sql
> psql: FATAL: user "-ftest.sql" does not exist
>
> 以下のように"-d"をつけると、Linux以外のOSでもエラーにならずに実行できます。
> testuser @ hpuxhost 23: psql -dtestDB -ftest.sql
>
> psqlのコマンドラインでは"-d"オプションは省略可能なはずなのに、
> 省略するとエラーになるケースがあるのはなぜでしょうか?
> また、OSによってこのように動作が違ってしまうのはなぜでしょうか?
>
> 回答よろしくお願いします。
pgsql-jp メーリングリストの案内