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

时间:2020-03-06 14:41:08  来源:igfitidea点击:

我是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: Permission denied

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

编辑:

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

解决方案

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

\i somedir/script2.sql

如果我们需要完全合格的东西

\i c:/somedir/script2.sql

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

\i somedir\script2.sql

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

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

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