PSQL /copy :变量替换不起作用 |Postgresql 11

PSQL /copy :variable substitution not working | Postgresql 11

提问人:Debugger 提问时间:12/13/2021 最后编辑:Debugger 更新时间:12/22/2021 访问量:368

问:

我正在尝试读取CSV文件并将其写入表中,CSV文件位于我的本地计算机(客户端)中。我使用了 /copy 命令并实现了相同的效果。在这里,我在sql脚本中对文件路径进行了硬编码。我想参数化我的 csv 文件路径。

根据我的分析/复制不支持:变量替换,但不确定

我相信我们可以使用 shell 变量实现这一点,但我尝试了相同的方法,它没有按预期工作。

以下是我的示例脚本

命令:

psql  -U postgres -h localhost testdb  -a -f '/tmp/psql.sql' -v path='"/tmp/userData.csv"'

psql脚本:

  \copy test_user_table('username','dob') from :path DELIMITER ',' CSV HEADER;
  

我从shell执行此命令,但没有得到这样的文件未找到异常。但是相同的脚本正在使用硬编码路径。

任何能够就此向我提供建议的人。

参考:

psql \copy 中的变量替换

https://www.postgresql.org/docs/devel/app-psql.html

bash 变量参数 传递 psql

评论

0赞 jian 12/21/2021
到目前为止,你解决了你的问题吗?

答:

0赞 jian 12/22/2021 #1

我是 Bash 的新手。到目前为止,你的问题对我来说很难。
我可以在一个 shell 脚本中完成。也许以后我可以把它变成两个剧本。 下面是一个简单的脚本文件。

#!bin/bash
p=\'"/mnt/c/Users/JIAN HE/Desktop/test.csv"\'
c="copy emp from ${p}"

a=${c}
echo $a
psql -U postgres -d postgres  -c "${a}"