2008-09-24 92 views
70

我是新来PostgreSQL和我有一个简单的问题:PostgreSQL的 - PSQL 我:如何在给定路径中执行脚本

我试图创建,创建一个数据库,所以我可以一个简单的脚本后来这样称呼它:

psql -f createDB.sql 

我希望脚本调用其他脚本(独立的人创建表,添加约束,功能等),就像这样:

\i script1.sql 
\i script2.sql 

它工作正常规定,创建B.sql在相同目录

但是,如果我移动SCRIPT2到一个目录下的一个具有CREATEDB下,并修改CREATEDB,所以它看起来是这样的:

\i script1.sql 
\i somedir\script2.sql 

我得到一个错误:

psql:createDB.sql:2: somedir: Permission denied

我使用Postgres Plus 8.3 for windows,默认postgres用户。

编辑:

我傻,UNIX斜线解决了这个问题。

回答

91

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

\i somedir/script2.sql 

如果您需要完全限定的东西

\i c:/somedir/script2.sql 

如果不解决这个问题,我的下一个猜测是,你需要转义反斜线。

\i somedir\\script2.sql 
+4

颠倒斜杠就足够了,逃生是没有必要的。 – 2013-09-30 20:29:40

6

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

\往往是一个逃跑或命令字符,并可能是混淆的来源。我从来没有问题,但我也没有Windows,所以我无法测试它。

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

3

试试这个,我的工作我自己这样做

\i 'somedir\\script2.sql' 
0

我曾尝试这一点,其工作在Windows机器上一个特定的模式运行的SQL文件。

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

相关问题