小编man*_*geo的帖子

psql \copy 文件的相对路径?

我正在尝试创建一组脚本来修改 Postgres 9.6 数据库中的某些表。这些脚本存储在各种目录中,并依次从一个主协调器脚本调用。我正在 psql 中运行脚本。

在主脚本中,我用来\ir指定其他脚本的相对路径名。因此,我可以从任何地方运行 psql,并且主脚本将找到其他脚本。这按预期工作。

然而,在某些脚本中,我使用\copy命令从 CSV 文件加载数据。不幸的是,似乎输入文件名\copy始终被解释为相对于 psql 的当前工作目录,而不是相对于其脚本的目录,即使我\copy使用\ir.

例如,假设我从 开始psqlC:\并计划使用以下文件:

C:\
    dir1\
        script1.sql
        dir2\
            script2.sql
            input.csv
Run Code Online (Sandbox Code Playgroud)

我可以使用调用第一个脚本\ir dir1/script1.sql。效果很好。

此外,该脚本可以使用 调用第二个脚本\ir dir2/script2.sql。这也很好用。

问题是\copy第二个脚本中的命令:

\COPY foo.bar (col1) FROM 'input.csv' WITH (FORMAT CSV);
Run Code Online (Sandbox Code Playgroud)

input.csv除非存在于会话的当前目录中,否则此操作将失败psql。因此,我的问题是:

  • 有什么方法可以让我\COPY ... FROM从脚本内部调用命令,而不要求用户psql从相对于输入文件的特定目录运行会话?

我知道我可以使用绝对路径名,但在升级不同的部署时,我们将从各种不同的计算机/平台运行此脚本,因此在这种情况下没有可用的通用绝对路径。我正在寻找某种相对或可配置的路径解决方案。

先感谢您。

postgresql psql

6
推荐指数
1
解决办法
3万
查看次数

标签 统计

postgresql ×1

psql ×1