如何将PostgreSQL jsonb_set格式化为预准备语句

时间:2016-03-16 18:25:43

标签: postgresql

var query=`UPDATE "public"."vehicle_ads" 
           SET options=
                   jsonb_set(
                    options, 
                    '{$1, ${subgroup}, -1}', 
                    '{"name": "${optionName}"}'::jsonb
                   )
           WHERE "vehicleId"=${id}`;

我在上述查询中遇到以下问题。如果我用$ {group}替换$ 1,则没有错误。但是,如果我留下1美元并将组作为准备好的声明传递,我会收到错误...

bind message supplies 1 parameters, but prepared statement "" requires 0

我的目标是将整个查询标记化,例如:

var query=`UPDATE "public"."vehicle_ads" 
       SET options=
               jsonb_set(
                options, 
                '{$1, $2, -1}', 
                '{"name": $3}'::jsonb
               )
       WHERE "vehicleId"=$4`;

则...

could not determine data type of parameter $1

我知道我迷失在模板字符串和Postgres的格式化汤中,不确定什么需要滴答,单引号或双精度。非常感谢任何帮助。

修改

这是我正在做的细节。

我有一个嵌套对象,车辆选项数据存储为jsonb字段。它的格式为:

{
  "Group": {
     "SubGroup": [
           {
              "name": string,
              "hasOption": bool
           }
           ...
      ]
      ...
   }
  ...
}  

我想在子组中编辑名称。例如Powertrain.Drivetrain [0] .name ='AWD';

1 个答案:

答案 0 :(得分:0)

在使用 text 将变量转换为 jsonb 之前,您必须先将其转换为 to_jsonb

UPDATE table SET body = jsonb_set(options, '{key}', to_jsonb($1::text));