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

postgreSQL-psql\i:如何在给定路径中执行脚本,postgresql,Postgresql,我是postgreSQL的新手,我有一个简单的问题: 我正在尝试创建一个简单的脚本来创建DB,以便以后可以这样调用它: psql -f createDB.sql \i script1.sql \i script2.sql \i script1.sql \i somedir\script2.sql 我希望脚本调用其他脚本(用于创建表、添加约束、函数等的单独脚本),如下所示: psql -f createDB.sql \i script1.sql \i script2.sql \i scr

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

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

psql -f createDB.sql
\i script1.sql
\i script2.sql
\i script1.sql
\i somedir\script2.sql
我希望脚本调用其他脚本(用于创建表、添加约束、函数等的单独脚本),如下所示:

psql -f createDB.sql
\i script1.sql
\i script2.sql
\i script1.sql
\i somedir\script2.sql
只要createDB.sql位于同一目录中,它就可以正常工作

但是,如果我将script2移动到createDB目录下的目录,并修改createDB,使其如下所示:

psql -f createDB.sql
\i script1.sql
\i script2.sql
\i script1.sql
\i somedir\script2.sql
我得到一个错误:

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

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

编辑:


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

Postgres是在Linux/unix上启动的。我怀疑用修好它来反转斜杠

\i somedir/script2.sql 
如果你需要完全限定某件事

\i c:/somedir/script2.sql
如果这不能解决问题,我的下一个猜测是你需要避开反斜杠

\i somedir\\script2.sql

您是否尝试过使用Unix样式的斜杠(/而不是\)

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


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

试试这个,我自己就是这么做的

\i 'somedir\\script2.sql'

我确实尝试了这个方法,并在windows机器上运行了一个特定模式的sql文件

psql-h localhost-p 5432-U username-d databasename-v schema=schemaname
反转斜杠就足够了,不需要转义。值得注意的是,正向斜杠在Windows中完全有效,并且本机支持。因此,在Windows中几乎任何地方都可以使用正斜杠(除了编写糟糕的应用程序)。由于反斜杠通常用作转义字符,因此其行为在应用程序之间不一致,甚至在单个应用程序中使用。