如何在psql中包含相对于当前执行脚本的文件?

时间:2011-09-30 01:35:41

标签: postgresql

我有一个PostgreSQL脚本(比如MAIN.sql中的~/sql/),其中包含类似

的行
\i components/helper-functions.sql

如果$ PWD与我的脚本目录(~/sql/)相同,则此包含正常,但如果不是,则查找相对于$ PWD而不是相对{的相关文件。 {1}}。

因此,如果我从MAIN.sql调用该脚本,则会查找~/而不是~/components/helper-functions.sql

我认为新的~/sql/components/helper-functions.sql指令将包含在9.2中以解决这个问题,但我正在运行8.3

1 个答案:

答案 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被添加的原因。