PostgreSQL jsonb_insert() 函数使用指南
PostgreSQL jsonb_insert()
函数将一个新值插入到一个给定的 JSONB 值中通过路径指定的位置。
jsonb_insert()
语法
这是 PostgreSQL jsonb_insert()
函数的语法:
jsonb_insert(
target JSONB, path TEXT[], new_value JSONB[, insert_after BOOLEAN]
) -> JSONB
参数
target
- 必需的。 要插入新值的 JSONB 值。
path
- 必需的。 一个文本数组,指示了新值插入的位置。数组中靠前的路径,应该包含数组中靠后的路径。
new_value
- 必需的。 要插入的新值。
insert_after
- 可选的。 它指示是否插入到指定的位置之后。默认是值
false
。
返回值
PostgreSQL jsonb_insert()
函数返回给定的 JSONB 值,其中在指定的路径上插入了指定的新值。
如果路径指向一个对象字段,只有当对象中不存在此字段时新值才会被插入。
如果路径指向的是一个数组元素,若 insert_after
为 false(默认值), 则新值默认插入到指定的元素之前,否则新值插入到指定的元素之后。
如果 JSONB 值中未找到指定的路径,则 JSON 值不会被修改,并原样返回。
jsonb_insert()
示例
下面的示例展示了如何使用 PostgreSQL jsonb_insert()
函数向一个 JSON 对象中插入一个键。
SELECT jsonb_insert('{"x": 1}', '{y}', '2');
jsonb_insert
------------------
{"x": 1, "y": 2}
下面的示例展示了如何使用 PostgreSQL jsonb_insert()
函数向一个 JSON 数组中插入一个新元素。
SELECT jsonb_insert('{"x": 1, "y": [1, 2]}', '{y, 0}', '0');
jsonb_insert
--------------------------
{"x": 1, "y": [0, 1, 2]}
这里, 数组 {y, 0}
表示先找到对象中的 y 字段,再找到 y 字段中的索引为 0 的位置,然后在此位置插入新元素 0。
当然,我们可以将新元素插入到指定的位置之后:
SELECT jsonb_insert('{"x": 1, "y": [1, 2]}', '{y, 0}', '0', true);
jsonb_insert
--------------------------
{"x": 1, "y": [1, 0, 2]}
您不能替换一个对象中已经存在的键,比如:
SELECT jsonb_insert('{"x": 1}', '{x}', '2');
这将会引发一个错误:
错误: 不能替换已经存在的键 提示: 尝试使用 jsonb_set 来替换键值。