gpt4 book ai didi

sql - shell脚本中的psql循环

转载 作者:行者123 更新时间:2023-11-29 14:09:33 25 4
gpt4 key购买 nike

我需要从 file.csv 中读取 2 个值并在 PostgreSQL 中进行超过 13.000 次查询。

正如您在上面的代码中看到的那样,这应该是一个非常简单的任务,但是存在一些问题。

#!/bin/bash


MSISDN=($(head file.csv | awk -F ";" '{print $1}' | sed -e "s/^/55/"))
APPID=($(head file.csv | awk -F ";" '{print $3}'))

NUMBER_OF_LINES=$(wc -l file.csv| grep -o "[0-9]*")

for i in $(seq 0 "$NUMBER_OF_LINES")
do

export PGPASSWORD='MY_PASSWORD'
psql -q -A -h VERY-LONG-HOST -U MYUSER -d DATABASE -p 1111 -t -c "select 'http://API-HOST/subscription/cancel?subscriptionId=' + s.subscription_id + '&phone=' + s.phone + '&enabled=0&statusId=7&notifyActionListeners=false&extraInfo=TICKET_NUMBER' from sbs.subscription s (nolock) join sbs.configuration c on s.configuration_id = c.configuration_id where c.application_id = ${APPID[$i]} and c.carrier_id = 2 and s.phone = ${MSISDN[$i]};"

done

代码执行时出现错误:

ERROR:  syntax error at or near "112940676229"
LINE 2: and c.carrier_id = 2 and s.phone = 55112940676229;

我如何处理多个查询并在进行另一个查询之前关闭每个查询中的连接,到目前为止如何解决之前显示的错误?

file.csv 中的内容示例:

112940676229;Sevice;333                                               
113429402012;Sevice;929
111429402013;Sevice;888
11240672940;Sevice;445
11320294034;Sevice;333
11429294056;Sevice;22
11942940281;Sevice;122
11962940895;Sevice;233

最佳答案

我建议您尝试这种方法:

create table file_csv (tel bigint, dk text, apid int);
copy file_csv from file.csv delimiter ';';

然后在您的查询中加入反对它。

更新感谢@Charles Duffy

可能使它成为一个临时表(create temporary table file_csv (tel bigint, dk text, apid int)),如果意图是临时的。

关于sql - shell脚本中的psql循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45443335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com