You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在node-postgres中向json[]类型列添加新JSON对象?

解决PostgreSQL json[]列添加JSON对象的报错问题

错误原因

你的代码存在两个核心问题:

  • 将参数占位符$1用单引号包裹,导致PostgreSQL把它识别为普通字符串字面量,而非参数引用,触发数组格式解析错误。
  • 传入的JSON字符串需要先转换为json类型,再包装成json[]数组,才能和原有alerts列(json[]类型)进行拼接操作。

正确写法

以下两种方法均可解决问题:

方法一:使用array[]构造数组

await pool.query(
  "UPDATE datas SET alerts = alerts || array[$1::json] WHERE id = '10'",
  [JSON.stringify({ name: "alert1", time: "12:00" })]
);

$1::json将传入的字符串参数转为json类型,array[]把该json对象构造成单个元素的json[]数组,再通过||运算符和原数组拼接。

方法二:使用json_build_array函数

await pool.query(
  "UPDATE datas SET alerts = alerts || json_build_array($1::json) WHERE id = '10'",
  [JSON.stringify({ name: "alert1", time: "12:00" })]
);

json_build_array函数直接将传入的json对象包装为json[]数组,实现和原数组的拼接。

处理NULL情况

如果alerts列可能为NULL,建议用COALESCE确保拼接正常:

await pool.query(
  "UPDATE datas SET alerts = COALESCE(alerts, '{}'::json[]) || array[$1::json] WHERE id = '10'",
  [JSON.stringify({ name: "alert1", time: "12:00" })]
);

COALESCE(alerts, '{}'::json[])会在alerts为NULL时,用空的json数组替代,避免拼接失败。

内容的提问来源于stack exchange,提问作者Jantoma21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:01:01