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

dah*_*gan 76 postgresql

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

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

psql -f createDB.sql
Run Code Online (Sandbox Code Playgroud)

我希望脚本调用其他脚本(用于创建表,添加约束,函数等的单独脚本),如下所示:

\i script1.sql
\i script2.sql
Run Code Online (Sandbox Code Playgroud)

只要createDB.sql位于同一个目录中,它就可以正常工作.

但是如果我将script2移动到createDB下的目录下,并修改createDB,它看起来像这样:

\i script1.sql
\i somedir\script2.sql
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

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

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

编辑:

傻傻的,unix斜线解决了这个问题.

Ste*_*e K 102

Postgres从Linux/Unix开始.我怀疑用斜线来扭转斜线.

\i somedir/script2.sql 
Run Code Online (Sandbox Code Playgroud)

如果你需要完全符合条件

\i c:/somedir/script2.sql
Run Code Online (Sandbox Code Playgroud)

如果这没有解决它,我的下一个猜测是你需要逃避反斜杠.

\i somedir\\script2.sql
Run Code Online (Sandbox Code Playgroud)

  • 扭转斜线就足够了,没有必要逃脱. (7认同)
  • 值得注意的是,正斜杠在Windows中完全有效并且本机支持.所以你几乎可以在Windows的任何地方使用正斜杠(除了写得不好的应用程序).由于反斜杠通常用作转义字符,因此它的行为在应用程序之间不一致,甚至在单个应用程序中使用. (2认同)

Gra*_*son 6

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

\往往是逃避或命令角色,可能是混乱的根源.我从未遇到过这方面的问题,但我也没有Windows,所以我无法测试它.

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