postgreSQL – psql \ i:如何在给定的path中执行脚本

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

我试图创build一个简单的脚本,创build一个数据库,所以我可以稍后调用它是这样的:

psql -f createDB.sql 

我想要脚本调用其他脚本(单独创build表,添加约束,function等),如下所示:

 \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斜杠解决了这个问题。

Postgres从Linux / Unix开始。 我怀疑反斜杠修复它。

 \i somedir/script2.sql 

如果你需要完全限定某些东西

 \ic:/somedir/script2.sql 

如果这不能解决它,我的下一个猜测将是你需要逃避反斜杠。

 \i somedir\\script2.sql 

你有没有尝试过使用Unix样式斜线(/而不是\)?

\常常是逃避或命令性质,可能是混淆的根源。 我从来没有这个问题,但我也没有Windows,所以我不能testing它。

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

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

 \i 'somedir\\script2.sql' 

我没有尝试这个,它在Windows机器上运行一个特定的架构上的SQL文件。

psql -h localhost -p 5432 -U username -d databasename -v schema = schemaname <e:\ Table.sql