79

我是 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 for windows,默认 postgres 用户。

编辑:

愚蠢的我,unix斜线解决了这个问题。

4

4 回答 4

105

Postgres 在 Linux/Unix 上启动。我怀疑用修复它来反转斜线。

\i somedir/script2.sql 

如果您需要完全限定某事

\i c:/somedir/script2.sql

如果这不能解决问题,我的下一个猜测是您需要转义反斜杠。

\i somedir\\script2.sql
于 2008-09-24T19:58:52.387 回答
6

您是否尝试过使用 Unix 风格的斜杠(/ 而不是 \)?

\ 通常是转义字符或命令字符,可能是混淆的根源。我从来没有遇到过这个问题,但我也没有 Windows,所以我无法测试它。

此外,权限可能基于运行 psql 的用户,或者可能基于执行 postmaster 服务的用户,检查两者是否已读取该目录中的该文件。

于 2008-09-24T20:03:23.110 回答
3

试试这个,我自己努力这样做

\i 'somedir\\script2.sql'
于 2013-03-14T16:55:37.187 回答
0

我确实尝试过这个及其在 Windows 机器上的工作以在特定模式上运行 sql 文件。

psql -h localhost -p 5432 -U 用户名 -d 数据库名 -v schema=schemaname < e:\Table.sql

于 2017-02-23T07:11:03.930 回答