2011-09-30 10 views
6

que tienen una secuencia de comandos de PostgreSQL (por ejemplo, MAIN.sql en ~/sql/), que tiene líneas como¿Cómo incluir archivos relativos a la secuencia de comandos actual en psql?

 
\i components/helper-functions.sql 

esto incluyen obras excelentes si los $ PWD es el mismo que el directorio de mi guión (~/sql/), pero si es no, busca el archivo incluido relativo a $ PWD en lugar de relativo a MAIN.sql.

Así que si llamo al script desde ~/, buscaría ~/components/helper-functions.sql y no para ~/sql/components/helper-functions.sql.

creo una nueva directiva \ir va a ser incluidos en 9,2 precisamente para este problema, pero me estoy quedando 8,3

+0

Usted está hablando de psql (el cliente), no de PostgreSQL per se, ¿verdad? –

+0

Sí, eso es correcto –

Respuesta

13

Pase el nombre del directorio en el que una variable de psql y usarlo para montar la ruta absoluta incluidos los archivos, por ejemplo,

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

no es bonito, pero por eso se añade \ir después de todo.

+0

Eso es lo que terminé haciendo, definitivamente no es bonito cuando se incluyen más de 20 componentes: / –

Cuestiones relacionadas