我有一个名为menu_items
的数据库表,其中包含一个名为jsonb[]
的{{1}}字段。 build_items
数组中的对象是一个名为build_items
的字段,我需要将其重命名为item_id
。
我找到了这篇文章(PostgreSQL rename attribute in jsonb field),它描述了我的问题,除了我需要它来为数组中的每个元素工作。
这个操作只能使用PostgreSQL,还是需要编写一些代码来提取数据,更改数据,然后更新表格?
我还尝试将value
转换为jsonb[]
并执行TEXT
,然后尝试将其转换回REPLACE
值。结果(以查询形式)是正确的,但我不确定如何使用结果更新jsonb[]
中的正确行。
menu_items
答案 0 :(得分:1)
让我们说你有:
t=# create table so13 as with j(a) as (values('{"q":0}'::jsonb),('{"b":1}'::jsonb))
, jba as (select array_agg(a) ar from j)
select ar,pg_typeof(ar) from jba;
SELECT 1
t=# select * from so13;
ar | pg_typeof
-----------------------------+-----------
{"{\"q\": 0}","{\"b\": 1}"} | jsonb[]
(1 row)
然后你首先需要取消jsonb []:
t=# with p as (
select unnest(ar) m from so13
)
select m, m - 'b' || jsonb_build_object('q',coalesce(m->'b',m->'q')) from p;
m | ?column?
----------+----------
{"q": 0} | {"q": 0}
{"b": 1} | {"q": 1}
(2 rows)
然后将其换回:
t=# with p as (
select unnest(ar) m from so13
)
select array_agg(m - 'b' || jsonb_build_object('q',coalesce(m->'b',m->'q'))) from p;
array_agg
-----------------------------
{"{\"q\": 0}","{\"q\": 1}"}
(1 row)
答案 1 :(得分:0)
Vao在接受的答案中回答了我的问题。以下是任何未来用户的完整更新命令。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id='R1'>Click R1</button>
<button id='R2'>Click R2</button>
<button id='R3'>Click R3</button>
<button id='R4'>Click R4</button>
<button id='R5'>Click R5</button>