2011-09-30 4 views
6

私は、$ PWDが(~/sql/)私のスクリプトのディレクトリと同じであれば、それがある場合、これは細かい作品を含めpsqlに現在実行中のスクリプトに関連するファイルを含めるには?

 
\i components/helper-functions.sql 

のようなラインを持っているPostgreSQLのスクリプトを(たとえば、~/sql/MAIN.sql)持っていますそうでなければ、$ PWDに相対的なインクルードファイルを、MAIN.sqlに相対的なものではなく探します。

したがって、~/からスクリプトを呼び出すと、~/sql/components/helper-functions.sqlではなく、~/components/helper-functions.sqlが検索されます。

は、私は新しい \irディレクティブは、まさにこの問題のために9.2に含まれることになると思いますが、私はpsqlの変数としてディレクトリ名をパスし、絶対パスを組み立てるためにそれを使用

+0

あなたはPostgreSQL自体ではなく、psql(クライアント)について話しています。 –

+0

うん、それは正しいです –

答えて

13

8.3を実行していますよファイル、例えば、

$ 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以上のコンポーネントがあるとき: –

関連する問題