postgreSQL - psql \ i: как выполнить скрипт по заданному пути - PullRequest
76 голосов
/ 24 сентября 2008

Я новичок в postgreSQL и у меня простой вопрос:

Я пытаюсь создать простой скрипт, который создает БД, чтобы потом я мог назвать его так:

psql -f createDB.sql

Я хочу, чтобы скрипт вызывал другие скрипты (отдельные для создания таблиц, добавления ограничений, функций и т. Д.), Например:

\i script1.sql
\i script2.sql

Работает нормально при условии, что createDB.sql находится в том же каталоге .

Но если я переместлю script2 в каталог под каталогом с createDB и изменим createDB, он будет выглядеть так:

\i script1.sql
\i somedir\script2.sql

Я получаю ошибку:

psql: createDB.sql: 2: somedir: В доступе отказано

Я использую Postgres Plus 8.3 для Windows, по умолчанию пользователь postgres.

EDIT:

Глупый я, unix-косые черты решили проблему.

Ответы [ 4 ]

102 голосов
/ 24 сентября 2008

Postgres запущен в Linux / Unix. Я подозреваю, что обратный слеш с исправлением.

\i somedir/script2.sql 

Если вам нужно что-то полностью квалифицировать

\i c:/somedir/script2.sql

Если это не исправит, мое следующее предположение, что вам нужно избежать обратной косой черты.

\i somedir\\script2.sql
6 голосов
/ 25 сентября 2008

Вы пытались использовать косые черты в стиле Unix (/ вместо \)?

\ часто является побегом или командным персонажем и может быть источником путаницы. У меня никогда не было проблем с этим, но у меня также нет Windows, поэтому я не могу проверить это.

Кроме того, разрешения могут основываться на пользователе, выполняющем psql, или на пользователе, выполняющем службу postmaster, проверьте, что оба читали этот файл в этом каталоге.

3 голосов
/ 14 марта 2013

Попробуйте, я работаю сам, чтобы сделать это

\i 'somedir\\script2.sql'
0 голосов
/ 23 февраля 2017

Я попробовал это, и он работал в Windows-машине, чтобы запустить файл SQL по определенной схеме.

psql -h localhost -p 5432 -U имя пользователя -d имя-базы данных -v схема = имя-схемы

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