数组 – 在PostgreSQL 9.2,9.3和9.4中追加(推送)和从JSON数组中删除?

前端之家收集整理的这篇文章主要介绍了数组 – 在PostgreSQL 9.2,9.3和9.4中追加(推送)和从JSON数组中删除?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
For versions greater than 9.5 see this question

我使用这个在Postgresql中创建了一个表:

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

现在我想要的是

> add像append_to_json_array这样的东西接受实际的jsondata这是一个json数组和newString,我必须添加到jsondata数组,这个函数应该返回更新的json数组.

  1. UPDATE jsontesting
  2. SET jsondata=append_to_json_array(jsondata,'newString')
  3. WHERE id = 7;

>从json数据数组中删除一个值,一个用于删除值的函数.

我试图搜索postgresql的文档,但没有发现任何内容.

拉德克的想法可以用来定义这些方便的功能
  1. create function jsonb_array_append(j jsonb,e text)
  2. returns jsonb language sql immutable
  3. as $$
  4. select array_to_json(array_append(array(select * from jsonb_array_elements_text(j)),e))::jsonb
  5. $$;
  6.  
  7. create function jsonb_array_remove(j jsonb,e text)
  8. returns jsonb language sql immutable
  9. as $$
  10. select array_to_json(array_remove(array(select * from jsonb_array_elements_text(j)),e))::jsonb
  11. $$;
  12.  
  13. create function jsonb_array_replace(j jsonb,e1 text,e2 text)
  14. returns jsonb language sql immutable
  15. as $$
  16. select array_to_json(array_replace(array(select * from jsonb_array_elements_text(j)),e1,e2))::jsonb
  17. $$;

行动中的功能

  1. select jsonb_array_append('["alfa","beta","gamma"]','delta');
  2. jsonb_array_append
  3. ------------------------------------
  4. ["alfa","gamma","delta"]
  5.  
  6. select jsonb_array_remove('["alfa",'beta');
  7. jsonb_array_remove
  8. -------------------
  9. ["alfa","gamma"]
  10.  
  11. select jsonb_array_replace('["alfa",'alfa','delta');
  12. jsonb_array_replace
  13. ----------------------------
  14. ["delta","gamma"]

如果他们证明对你有用,请欣赏拉德克的回答.但是,我必须补充一点,我完全同意a_horse的评论.

猜你在找的Postgre SQL相关文章