[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 メーリングリストの案内