gpt4 book ai didi

database - postgres 实用程序脚本中的参数

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:57 25 4
gpt4 key购买 nike

我需要创建一个实用脚本来在 postgres 数据库中添加一个项目。我最初的方法是使用一个带有最小非默认值集的 bash 脚本和一个带有剩余默认列的 postgres sql 脚本。项目表有 20 列。

所以这是我简化的 bash 脚本:

## A unique system identifier for an Item.
ID_ITM='318'
## The description of the Item.
DE_ITM="A description"

psql -U postgres -d MYDB -v id_itm=$ID_ITM de_itm=$DE_ITM -f insertItemPostgres.sql

如您所见,它调用以下 sql 脚本(简化):

Insert into AS_ITM (ID_ITM,ID_LN_PRC,ID_ITM_SL_PRC,ID_MRHRC_GP,ID_RU_ITM_SL,ID_DPT_PS,FL_ITM_DSC,FL_ADT_ITM_PRC,NM_BRN,FL_AZN_FR_SLS,LU_ITM_USG,NM_ITM,DE_ITM,TY_ITM,LU_KT_ST,DE_ITM_LNG,FL_ITM_SBST_IDN,LU_CLN_ORD,LU_EXM_TX,FL_VLD_SRZ_ITM)
values (:id_itm,:de_itm,null,'64',null,null,null,null,null,'1',null,null,null,null,'0',null,'0',null,'0','0');

我的问题是,要完成这项工作,我需要有带有两对引号的字符串和 ID:

DE_ITM="'A description'"

我需要找出如何以文字形式传递参数。

如果有任何更好的方法,我将不胜感激,因为我知道这不是最好的,而且我的数据库脚本编写技能也不是最好的。此外,我正在使用 bash 脚本,但我可能只是一个具有非默认值的 sql,它调用具有插入的脚本。

最佳答案

如果你有psql 9.0或稍后,您可以尝试以下操作:

首先,您需要在 shell 中引用两个变量的扩展,如下所示:

psql -U postgres -d MYDB -v "id_itm=${ID_ITM}" -v "de_itm=${DE_ITM}" -f insertItemPostgres.sql

然后在您的 SQL 中,您需要使用以下语法引用变量:

INSERT INTO as_itm (id_itm, id_ln_prc, ...)
VALUES (:'id_itm', :'de_itm', ...)

唉,出于某种原因这对你不起作用。所以这里有一个应该适用于所有 psql 版本的更老派的方法:使用特殊的 bash 语法将变量中的引号加倍。

psql -U postgres -d MYDB -f insertItemPostgres.sql \
-v "id_itm='${ID_ITM//\'/''}'" \
-v "de_itm='${DE_ITM//\'/''}'"

在这种情况下,您的 SQL 中的变量引用与 OP 相比应该没有变化:VALUES (:id_itm, :de_itm, ...

关于database - postgres 实用程序脚本中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19821873/

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