arrays - 在 PostgreSQL 9.5+ 中追加(推送)和从 JSON 数组中删除

标签 arrays postgresql jsonb postgresql-9.5 array-push

For versions less than 9.5 see this question

我已经使用这个在 PostgreSQL 中创建了一个表:

CREATE TEMP TABLE jsontesting
AS
  SELECT id, jsondata::jsonb FROM ( VALUES
    (1, '["abra","value","mango", "apple", "sample"]'),
    (2, '["japan","china","india", "russia", "australia"]'),
    (3, '["must", "match"]'),
    (4, '["abra","value","true", "apple", "sample"]'),
    (5, '["abra","false","mango", "apple", "sample"]'),
    (6, '["string","value","mango", "apple", "sample"]'),
    (7, '["must", "watch"]')
  ) AS t(id,jsondata);

现在我想要的是

  • addappend_to_json_array 这样的东西接受实际的 jsondata,这是一个 json 数组和我必须添加到那个 jsondata 数组和这个函数的 newString应该返回更新后的 json 数组。

    UPDATE jsontesting
    SET jsondata=append_to_json_array(jsondata, 'newString')
    WHERE id = 7;
    
  • 从json数据数组中移除一个值,一个移除值的函数。

我试图搜索 PostgreSQL 的文档,但在那里一无所获。

最佳答案

要添加值,请使用 JSON 数组追加运算符 (||)

UPDATE jsontesting
SET jsondata = jsondata || '["newString"]'::jsonb
WHERE id = 7;

删除值看起来像这样

UPDATE jsontesting
SET jsondata = jsondata - 'newString'
WHERE id = 7; 

连接到嵌套字段看起来像这样

UPDATE jsontesting
SET jsondata = jsonb_set(
  jsondata::jsonb,
  array['nestedfield'],
  (jsondata->'nestedfield')::jsonb || '["newString"]'::jsonb) 
WHERE id = 7;

关于arrays - 在 PostgreSQL 9.5+ 中追加(推送)和从 JSON 数组中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42233542/

相关文章:

c - c中的字符串自动连接

java - Collections.sort 有什么问题?

PHP + PostgreSQL + ODBC - UTF8 - 变音符号问题

python - 使用在服务器上运行的 python 脚本和存储过程有什么区别?

json - 从同一表中的其他列更新 JSONB 列数据

arrays - 在 Postgres 中索引一个 jsonb 数组

arrays - Postgresql jsonb 列表联合

c - 尝试从 DataSet 扫描数组,但在 C 中继续出现总线错误

arrays - Bash - 通过每个镜像处理元统计数据

postgresql - 如何从 Postgresql 目录表中检索 Postgresql 序列缓存值?