Postgresql

如何將元素添加到 JSON 數組?

  • December 5, 2018

我在 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 數組

引用自:https://dba.stackexchange.com/questions/224231