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 решила проблему.
Ответы
Ответ 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