postgreSQL-psql i: Как выполнить скрипт по заданному пути


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

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

psql -f createDB.sql

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

i script1.sql
i script2.sql

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

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

i script1.sql
i somedirscript2.sql

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

psql: createDB.sql: 2: somedir: отказано в разрешении

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

EDIT:

глупый я, Unix косые черты решили проблему.

4 73

4 ответа:

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

\i somedir/script2.sql 

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

\i c:/somedir/script2.sql

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

\i somedir\script2.sql

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

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

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

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

\i 'somedir\script2.sql'

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

команду psql-ч локальный -5432 п-U имя_пользователя -д имя_базы_данных -в схемы=имясхемы