2012-05-05 12 views
1

Linuxで古くなった在庫管理アプリケーションを使用しています。他のソフトウェアと通信するためにテキストファイルにしか印刷できません。 PostgreSQLデータベースのテーブルを更新する必要がある場合、私はpsql -f text_fileを使用しています(text_fileは以前のアプリケーションで生成されたSQLコマンドのファイルです)。これはうまく動作しますが、各テキストファイルを完了した後でpsqlセッションが終了すると遅くなります。私は、入力を待って終了しないバックグラウンドプロセスとしてpsqlセッションを呼び出す方法があるのだろうかと思っていました。PostgreSQLのバックグラウンドセッション

答えて

1

私はあなたが何を望んでいるのか正確にはわかりません。あなただけの処理、使用を必要とするファイルの束がある場合:あなただけ継続的にpsqlを実行するために欠けていると、それはファイルの変更を実行している場合は

cat *.sql | psql -f - 

を、このような何かが働く可能性があります

( 
while sleep 5; do 
    print "\i sql_file.sql;" 
    cat /dev/null > sql_file.sql 
done 
) | psql --file - 

私はこれがどれほど推奨されているか分かりません。

+0

+1ファイルの束を特定の順番で実行したいのであれば、その間に結果をチェックしたくない場合は、 'cat'ルートが最も簡単な解決策になります。 –

+0

おかげでティム、私はアプリケーションのSQLステートメントを生成し、それらを擬似プリンタpsql -fに配管することができます。これによりオーバーヘッドが大幅に削減されます。 – WoodWork

3

あなたのデータベース、次々に対してSQLファイルの束を実行したい場合は、私はインタラクティブコンソールとしてpsqlを起動します:

psql mydatabase 

そしてthe \i commandで他の後に一つのファイルを実行します。

\i text_file 

スクリプト/物事を自動化したい場合は、FIFOは何が必要かもしれません。私はmore about that hereと書いた。

コプロセッサのようなCraig Ringer describes hereに興味があるかもしれません。

+0

ちょっと不思議なことに、すべてのファイルを 'psql -f -'に一度にキャッチするだけの方がいいのはなぜですか? –

+1

@TimPote:続行する前に各ファイルの結果をチェックしたり、ファイルを特定の順序で実行する必要がある場合、またはそれらのすべてが同時に使用可能でない場合、または同じファイル(内容が変更されている)が繰り返し使用されます。私はそれを参照するために私のイントロで "次々と"を書きました。 –

+0

+1名前付きパイプ –