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