Postgresql
如何將元素添加到 JSON 數組?
我在 PostgreSQL 9.6 中有一個 plpgsql 函式,它在某些時候有一個
text
變數_x
(保證不為 NULL)和另一個變數_y
,它是一個JSONB
文本數組(可能為空)。如何將值
_x
添加到數組中_y
?我試圖這樣做:
SELECT jsonb_build_array(_x, VARIADIC array_agg(value)) FROM jsonb_array_elements_text(_y) INTO _y;
這是錯誤的。我試圖使用
VARIADIC
來自這個答案的資訊。
歸結為一個簡單的解決方案:
_y := to_jsonb(ARRAY[_x]) || _y;
這是用運算符連接兩個 jsonb 數組
||
。. 為此,您需要將簡單text
值包裝_x
到一個jsonb
數組中。方法有很多種,to_jsonb(ARRAY[_x])
一種。甚至只是:
_y := to_jsonb(_x) || _y;
運算符在其
||
每個操作數的頂層連接元素。$$ … $$
所以這恰好也適用於元素到數組的連接。
您可以取消嵌套數組並重建它(就像您嘗試的那樣),但這更昂貴。並且可能很棘手,因為 JSON 數組可以保存各種類型的元素,這與 Postgres 數組不同。(這對您的JSONB 數組 text來說不是問題。)
您的嘗試失敗了,因為(如相關答案中所述)
jsonb_build_array()
需要一個值列表,可以用關鍵字後面的單個VARIADIC
數組替換它- 但不能用單個元素替換,然後是VARIADIC
數組。