2011-09-30 64 views
6

我有具有線條狀如何在psql中包含相對於當前執行腳本的文件?

 
\i components/helper-functions.sql 

這包括優秀作品如果$ PWD是一樣的我的腳本(~/sql/)的目錄PostgreSQL的腳本(比如,MAIN.sql~/sql/),但如果是不是,它會查找與$ PWD相關的包含文件,而不是相對於MAIN.sql

所以如果我從~/調用腳本,它會尋找~/components/helper-functions.sql而不是~/sql/components/helper-functions.sql

我認爲一個新的\ir指令將被包含在9.2正是這個問題,但我跑8.3

+0

你說的是psql(客戶端),而不是PostgreSQL本身,對吧? –

+0

是的,這是正確的 –

回答

13

在爲PSQL變量傳遞的目錄名稱,並用它來裝配的絕對路徑包含的文件,例如,

$ cat ./tmp/foo.sql 
\echo 'This is foo.' 
\set abs_bar_sql :DIR '/bar.sql' 
\i :abs_bar_sql 

$ cat ./tmp/bar.sql 
\echo 'This is bar.' 

$ psql -f ./tmp/foo.sql -v DIR=$PWD/tmp 
This is foo. 
This is bar. 

這不是很漂亮,但是這就是爲什麼\ir被加入後的所有。

+0

這就是我最終做的,當包含20個以上組件時絕對不會很漂亮:/ –

相關問題