我试图通过linux脚本运行Postgresql命令,该命令读取CSV并用它更新表。
我面临的困难是,这个shell脚本必须将一个参数传递给SQL程序,这个参数包含存储CSV的路径。
我就是赶不上..。
我的shell脚本中的PSQL命令是:
PSQL -f ${UNXSQLPATH}/new_nomenclature.sql - v v1=${UNXDATAPATH}new_nomenclature.sql程序包含以下行:
COPY nomenclature FROM :v1||'new_nomenclature.csv' CSV DELIMITER ';' HEADER ENCODING 'LATIN9';注意:当我硬拷贝SQL程序中的路径时,一切正常。
发布于 2020-07-21 16:51:20
实用程序命令(如COPY和许多其他命令)不接受需要文字的表达式,因此必须逐字指定文件名。
您可以在psql中使用\set通过连接具有名称的路径来构建文件名,如下所示:
$ cat script.sql
\set path :v1 '/new_nomenclature.csv'
COPY nomenclature FROM :'path' CSV ....
$ psql -f script.sql -v v1="/tmp"当\set不合适时,另一种方法是调用SELECT构建字符串,将结果输入psql变量,并将其反馈给复制(如果构建路径需要更多的连接,这可能会派上用场)
$ cat script.sql
select :'v1' || '/new_nomenclature.csv' AS path \gset
COPY nomenclature FROM :'path' CSV ....https://dba.stackexchange.com/questions/271353
复制相似问题