Подтвердить что ты не робот

PostgreSQL - psql\i: как выполнить script в заданном пути

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

Я пытаюсь создать простой script, который создает БД, поэтому я могу позже называть его следующим образом:

psql -f createDB.sql

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

\i script1.sql
\i script2.sql

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

Но если я переведу скрипт2 в каталог под именем createDB и модифицирую createDB, он выглядит так:

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

Я получаю сообщение об ошибке:

psql: createDB.sql: 2: somedir: Permission denied

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

EDIT:

Глупо меня, unix slashes решила проблему.

4b9b3361

Ответ 1

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

\i somedir/script2.sql 

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

\i c:/somedir/script2.sql

Если это не исправить, мое следующее предположение: вам нужно избежать обратного слэша.

\i somedir\\script2.sql

Ответ 2

Пробовали ли вы использовать слайсы в стиле Unix (/вместо \)?

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

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

Ответ 3

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

\i 'somedir\\script2.sql'

Ответ 4

Я попробовал это и его работу в Windows-машине для запуска sql файла на определенной схеме.

psql -h localhost -p 5432 -U имя пользователя -d имя_данных -v схема = schemaname < e:\Table.sql