Как включить файлы относительно текущего исполняемого скрипта в psql? - PullRequest
6 голосов
/ 30 сентября 2011

У меня есть скрипт PostgreSQL (скажем, MAIN.sql в ~/sql/), в котором есть строки типа

\i components/helper-functions.sql

Это включение работает нормально, если $ PWD совпадает с каталогом моего скрипта (~/sql/), но если это не так, он ищет включенный файл относительно $ PWD вместо MAIN.sql .

Так что, если я вызову скрипт из ~/, он будет искать ~/components/helper-functions.sql, а не ~/sql/components/helper-functions.sql.

Я думаю, что новая директива \ir будет включена в 9.2 именно для этой проблемы, но я использую 8.3

1 Ответ

13 голосов
/ 02 октября 2011

Передайте имя каталога как переменную 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 добавляется после всех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...