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的主要内容,如果未能解决你的问题,请参考以下文章

为什么变量替换对我的情况不起作用?

如何使用 psql \copy 元命令忽略错误

错误:在 psql 中使用 \copy 时缺少列数据

psql备份csv文件

从另一个 Perl 脚本内部调用 Perl 搜索和替换命令时不起作用

批处理文件集变量不起作用[重复]