2011-09-30 6 views
6

Ho uno script PostgreSQL (diciamo, MAIN.sql in ~/sql/) che ha linee comeCome includere i file relativi allo script corrente in esecuzione in psql?

 
\i components/helper-functions.sql 

Questo include pregevoli opere se il $ PWD è la stessa directory del mio script (~/sql/), ma se si tratta di no, cerca il file incluso relativo a $ PWD anziché relativo a MAIN.sql.

Quindi, se chiamo lo script da ~/, cercherei ~/components/helper-functions.sql e non per ~/sql/components/helper-functions.sql.

Credo che una nuova direttiva \ir sta per essere incluso nel 9.2 proprio per questo problema, ma sto correndo 8.3

+0

Stai parlando di psql (il client), non di PostgreSQL di per sé, giusto? –

+0

Sì, è corretto –

risposta

13

Passare il nome della directory in una variabile psql e l'uso che per assemblare il percorso assoluto inclusi i file, ad esempio,

$ 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. 

non è bello, ma è per questo \ir che viene aggiunto dopo tutto.

+0

Questo è quello che ho finito per fare, decisamente non bello quando ci sono più di 20 componenti inclusi: / –

Problemi correlati