2012-05-05 35 views
1

我在Linux上一個古老的庫存控制應用程序。它只能打印到文本文件與其他軟件進行通信。當我需要在我們的PostgreSQL數據庫更新表我一直在使用psql -f text_file(其中text_file是我們的舊的應用程序生成的SQL命令的文件)這工作得很好,但作爲PSQL會議之前完成每個文本文件後終止相當緩慢。我想知道是否有方法調用一個psql會話作爲後臺進程,等待輸入並不會終止。PostgreSQL的背景會話

回答

1

我不能完全確定你想要什麼。如果你只是有一堆需要處理的,使用的文件:

cat *.sql | psql -f - 

如果你只是想繼續運行的psql並讓它運行在一個文件中的任何改變,這樣的事情可能工作:

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

我不知道如何明智,這是,我從來沒有做過它自己。

+0

+1'cat'路徑應該是最簡單的解決方案,如果你只是想在沒有特定的順序執行了一堆文件,不想檢查的結果之間。 –

+0

感謝Tim,允許我在應用程序中生成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對於命名管道 –