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


78

我是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:权限被拒绝

我使用Windows的Postgres Plus 8.3,默认的postgres用户。

编辑:

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

Answers:


105

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

\i somedir/script2.sql 

如果您需要完全合格的东西

\i c:/somedir/script2.sql

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

\i somedir\\script2.sql

7
反转斜杠就足够了,不需要逃脱。
戴夫

2
值得注意的是,正斜杠在Windows中完全有效并且本身受支持。因此,您几乎可以在Windows的所有位置使用正斜杠(编写不良的应用程序除外)。由于反斜杠通常用作转义符,因此其行为在应用程序之间甚至在单个应用程序内部使用时都是不一致的。
2015年

6

您是否尝试过使用Unix样式的斜杠(/代替\)?

\通常是转义字符或命令字符,并且可能引起混乱。我从未遇到过此问题,但我也没有Windows,因此无法对其进行测试。

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


3

试试这个,我自己努力做

\i 'somedir\\script2.sql'

0

我确实尝试过这种方法,并且它在Windows计算机中可以在特定模式下运行sql文件。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.