【问题标题】:postgreSQL - psql \i : how to execute script in a given pathpostgreSQL - psql \i:如何在给定路径中执行脚本
【发布时间】:2008-09-24 19:49:48
【问题描述】:

我是 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: 权限被拒绝

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

编辑:

真傻,unix 斜线解决了这个问题。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

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

    \i somedir/script2.sql 
    

    如果您需要完全限定某事

    \i c:/somedir/script2.sql
    

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

    \i somedir\\script2.sql
    

    【讨论】:

    • 反转斜线就足够了,不需要转义。
    • 值得注意的是,正斜杠在 Windows 中完全有效并且本机支持。因此,您几乎可以在 Windows 中的任何地方使用正斜杠(编写不佳的应用程序除外)。由于反斜杠经常被用作转义字符,它的行为会在应用程序之间甚至在单个应用程序中使用不一致。
    【解决方案2】:

    您是否尝试过使用 Unix 风格的斜杠(/ 而不是 \)?

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

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

    【讨论】:

      【解决方案3】:

      试试这个,我自己努力这样做

      \i 'somedir\\script2.sql'
      

      【讨论】:

        【解决方案4】:

        我确实尝试过这个及其在 Windows 机器上的工作以在特定架构上运行 sql 文件。

        psql -h localhost -p 5432 -U 用户名 -d 数据库名 -v schema=schemaname

        【讨论】:

          猜你喜欢
          • 2015-09-23
          • 2014-10-04
          • 1970-01-01
          • 2011-09-25
          • 2010-12-21
          相关资源
          最近更新 更多