如何将数据推送到Postgresql中的“JSON”数据类型列

时间:2018-06-09 08:25:45

标签: postgresql knex.js

我有以下POSTGRESQL表

 id | name |    email     | weightsovertime |         joined          
 20 | Le   | le@gmail.com | []              | 2018-06-09 03:17:56.718

我想知道如何将数据(JSON对象或仅对象)推送到weightsovertime数组中。

由于我正在制作后端服务器,我想知道执行此操作的KnexJS查询。

我尝试了以下语法,但它不起作用

update tableName set weightsovertime = array_append(weightsovertime,{"weight":55,"date":"2/3/96"}) where id = 20;

谢谢

2 个答案:

答案 0 :(得分:0)

array_append适用于原生arrays - jsonb列中的JSON数组不同。

假设您的weightsovertimejsonb(或json),则必须使用concatenation operator||

例如:

update the_table
  set weitghtsovertime = weightsovertime||'[{"weight": 55, "date": "1996-03-02"}]'
where id = 20;

在线示例:http://rextester.com/XBA24609

答案 1 :(得分:0)

对于碰巧遇到此问题的任何人,使用Knex.js的解决方案是:

knex('table')
      .where('id', id)
      .update({
        arrayColumn: knex.raw(`arrayColumn || ?::jsonb`, JSON.stringify(arrayToAppend))
})

这将产生如下查询:

update tableName 
  set weightsovertime = arrayColumn || $1::json
where id = 20;

$1将替换为JSON.stringfy(arrayToAppend)的值。请注意,由于limitation of the Postegre drive

,此转换是强制性的