PSQL /copy : 变量替换不起作用 | PostgreSQL 11
Posted
技术标签:
【中文标题】PSQL /copy : 变量替换不起作用 | PostgreSQL 11【英文标题】:PSQL /copy :variable substitution not working | Postgresql 11 【发布时间】:2022-01-17 01:06:59 【问题描述】:我正在尝试读取 CSV 文件并将其写入表中,CSV 文件位于我的本地计算机(客户端)中。我使用 /copy 命令并实现了相同的效果。在这里,我在 sql 脚本中硬编码了我的文件路径。我想参数化我的 csv 文件路径。
根据我的分析 /copy 不支持:变量替换,但不确定
我相信我们可以使用 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 执行此命令,但没有收到未找到此类文件的异常。但同样的脚本正在使用硬编码路径。
谁能给我建议。
参考:
Variable substitution in psql \copy
https://www.postgresql.org/docs/devel/app-psql.html
【问题讨论】:
到目前为止你的问题解决了吗? 【参考方案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"
【讨论】:
以上是关于PSQL /copy : 变量替换不起作用 | PostgreSQL 11的主要内容,如果未能解决你的问题,请参考以下文章