postgreSQL - psql \i:如何在指定路径下执行脚本

79

我是postgreSQL的新手,有一个简单的问题:

我正在尝试创建一个简单的脚本来创建一个数据库,以便我以后可以像这样调用它:

psql -f createDB.sql

我希望这个脚本能够调用其他脚本(分别用于创建表、添加约束、函数等),就像这样:

\i script1.sql
\i script2.sql

只要createDB.sql文件在同一目录下,它就可以正常工作。

但是如果我将script2移动到一个子目录中,并修改createDB文件使其如下所示:

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

我遇到一个错误:

psql:createDB.sql:2: somedir: 权限被拒绝

我正在使用默认的Postgres Plus 8.3 for windows,postgres用户。

编辑:

我犯了一个愚蠢的错误,使用unix斜杠解决了这个问题。

4个回答

108

Postgres 在 Linux/Unix 上启动。我怀疑将斜杠反转将解决这个问题。

\i somedir/script2.sql 

如果您需要完全确定某个事物

\i c:/somedir/script2.sql

如果那不起作用,我的下一个猜测就是你需要转义反斜杠。

\i somedir\\script2.sql

7
反转斜杠就足够了,不需要转义。 - Dave
2
值得注意的是,正斜杠在Windows中是完全有效且本地支持的。因此,在Windows中几乎可以在任何地方使用正斜杠(除了编写不良应用程序的情况)。由于反斜杠通常用作转义字符,它的行为在应用程序之间甚至在单个应用程序内部的使用中也会不一致。 - Kat

6

您尝试过使用Unix风格的斜杠(/)吗?

\通常是转义或命令字符,并可能导致混淆。我从未遇到过此问题,但我也没有Windows,因此无法测试。

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


3

试试这个,我自己也在努力实践

\i 'somedir\\script2.sql'

0

我尝试过这个方法,可以在Windows机器上运行一个特定模式下的SQL文件。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接