2

Postgresクライアントを一度起動し、クライアントを介して複数のファイルを送信し、ファイルごとに個別に出力をキャプチャするPerlスクリプトを作成しようとしています。

私が次のようなことをした場合:

system ("cat $query1.sql | psql -p 2070 super &> $HOME/Results1.txt");
system ("cat $query2.sql | psql -p 2070 super &> $HOME/Results2.txt");

Perl はクエリごとにクライアントを起動します。数百、場合によっては数千のクエリを実行するので、最初のクライアント以外のすべてを起動するためのオーバーヘッドをスキップしたいと考えています。

Open2 経由で Postgres クライアントを立ち上げることができると思いますが、試してみるとハングします。Perl 5.10.0 を搭載した SUSE Linux マシンでこれを行っています。

これが私のコードです:

use IPC::Open2;

use IO::Handle;

our $pid = open2(*CHILDOUT, *CHILDINT, '../installdir/bin/psql -p 2070 super');
print STDOUT $pid;

print CHILDINT "cat $dumpR5KScript";
print STDOUT 'Sent the commands';

$output = <CHILDOUT>;

close(CHILDIN);
close(CHILDOUT);

pidが表示されないため、「open2」でハングしているようです。

私のopen2への呼び出しがハングしないように、誰かが私が間違っていることを指摘できますか?

そして、Postgres クライアントを立ち上げてクエリを実行するための最良の方法という、より大きな問題について誰かアドバイスがあれば、私は感謝します。

4

1 に答える 1