首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从shell程序调用文件命令中的postgresql副本,将文件的路径作为参数传递?

如何从shell程序调用文件命令中的postgresql副本,将文件的路径作为参数传递?
EN

Database Administration用户
提问于 2020-07-21 14:50:39
回答 1查看 2.3K关注 0票数 3

我试图通过linux脚本运行Postgresql命令,该命令读取CSV并用它更新表。

我面临的困难是,这个shell脚本必须将一个参数传递给SQL程序,这个参数包含存储CSV的路径。

我就是赶不上..。

我的shell脚本中的PSQL命令是:

代码语言:javascript
复制
PSQL -f ${UNXSQLPATH}/new_nomenclature.sql - v v1=${UNXDATAPATH}

new_nomenclature.sql程序包含以下行:

代码语言:javascript
复制
COPY nomenclature FROM :v1||'new_nomenclature.csv' CSV DELIMITER ';' HEADER ENCODING 'LATIN9';

注意:当我硬拷贝SQL程序中的路径时,一切正常。

EN

回答 1

Database Administration用户

发布于 2020-07-21 16:51:20

实用程序命令(如COPY和许多其他命令)不接受需要文字的表达式,因此必须逐字指定文件名。

您可以在psql中使用\set通过连接具有名称的路径来构建文件名,如下所示:

代码语言:javascript
复制
$ cat script.sql
\set path :v1 '/new_nomenclature.csv'
COPY nomenclature FROM :'path' CSV ....

$ psql -f script.sql -v v1="/tmp"

\set不合适时,另一种方法是调用SELECT构建字符串,将结果输入psql变量,并将其反馈给复制(如果构建路径需要更多的连接,这可能会派上用场)

代码语言:javascript
复制
$ cat script.sql
select :'v1' || '/new_nomenclature.csv' AS path \gset
COPY nomenclature FROM :'path' CSV ....
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/271353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档