TL;DR: 我需要兩個UPDATE腳本,將(1)變成(2),反之亦然(從JSONB列的每個物件中添加/洗掉color屬性)
(1)
id | name | squares
1 | s1 | [{"x": 5, "y": 5, "width": 10, "高度": 10}, {"x": 0, "y": 0, "width": 20, "高度": 20}]
2 | s2 | [{"x": 0, "y": 3, "width": 13, "高度": 11}, {"x": 2, "y": 3, "width": 20, "高度": 20}]
(2)
id | name | squares
1 | s1 | [{"x": 5, "y": 5, "width": 10, "高度": 10, "color": "#FFFFFF"}, {"x": 0, "y": 0, "width": 20, "高度": 20, "color": "#FFFFFF"}]
2 | s2 | [{"x": 0, "y": 3, "width": 13, "高度": 11, "color": "#FFFFFF"}, {"x": 2, "y": 3, "width": 20, "高度": 20, "color": "#FFFFFF"}]
我的模式
我有一個名為scene的表,其中有squares列,其型別為JSONB。在這一列中,我存盤了這樣的值。[{"x": 5, "y": 5, "寬度": 10, "高度": 10}, {"x": 0, "y": 0, "寬度": 20, "高度": 20}].
我想要做什么
我現在想為我的方塊添加顏色,這意味著也要為現有生產資料庫中每個場景記錄中的每個方塊添加一些默認顏色(比如"#FFFFFF"),所以我需要一個遷移。
問題所在
我需要寫一個遷移,將添加"color": "#FFFFFF"到生產資料庫中的每個方塊。在一個關系模式下,這將是很容易的,因為寫ALTER TABLE square ADD color...用于向前遷移和ALTER TABLE square DROP COLUMN color...用于回滾遷移,但由于square不是一個單獨的表,它是一個類似陣列的JSONB,我需要兩個UPDATE查詢scene表。
uj5u.com熱心網友回復:
(1) 添加color:
update scene set squares = (select array_to_json(array_agg(jsonb_insert(v. value, '{color}', '"#FFFFFF"'))
from jsonb_array_elements(squares) v) 。
select * from scene;
參見demo。
(2) 移除color:
update scene set squares = (select array_to_json(array_agg(v。 value - 'color)
from jsonb_array_elements(squares) v) 。
select * from scene;
參見demo。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/307993.html
標籤:
