PostgreSQL jsonb_set_lax() Function
The PostgreSQL jsonb_set_lax() function replaces or inserts the value at the specified path. This function differs from jsonb_set() in the method of handling NULL values.
jsonb_set_lax() Syntax
This is the syntax of the PostgreSQL jsonb_set_lax() function:
jsonb_set_lax(
target JSONB
, path TEXT[]
, new_value JSONB
[, create_if_missing BOOLEAN
[, null_value_treatment TEXT]]
) -> JSONB
Parameters
target-
Required. The JSONB value to insert the new value into.
path-
Required. A text array indicating where new values ββare inserted. The first path in the array should contain the last path in the array.
new_value-
Required. The new value to insert or update.
create_if_missing-
Optional. It indicates whether to insert the specified new value if the specified path does not exist. The default value is
true. null_value_treatment-
Optional. It indicates handling method when
new_valueis NULL. It is a string that can accept the following 4 values:
'raise_exception': Gives an error ifnew_valueis NULL.'use_json_null': Use JSON null value, ifnew_valueis NULL.'delete_key': Delete the corresponding key, ifnew_valueis NULL.'return_target': Return the original JSON value, ifnew_valueis NULL.
Return value
The PostgreSQL jsonb_set_lax() function returns the given JSONB value with the specified path replaced with the new value, or insert the new value if create_if_missing is true (the default).
If the argument new_value is not NULL, this function likes jsonb_set() exactly.
If the parameter new_value is NULL, you can pass the parameter null_value_treatment to take different actions on the NULL value:
'raise_exception': gives an error'use_json_null': use JSON null value'delete_key': delete the corresponding key'return_target': take no action, return the original JSON value
If the parameter target or path is NULL, the jsonb_set_lax() function will return NULL.
jsonb_set_lax() Examples
array
The following example shows how to use the PostgreSQL jsonb_set_lax() function to update a element in a JSON array.
SELECT jsonb_set_lax('[0, 1, 2]', '{1}', '"x"');
jsonb_set_lax
-------------
[0, "x", 2]Here, the path array {1} points to the element at index 1 in the array [0, 1, 2].
The following example shows how to use the PostgreSQL jsonb_set_lax() function to update elements in an embedded JSON array.
SELECT jsonb_set_lax('[0, [1, 2], 2]', '{1, 1}', '"x"');
jsonb_set_lax
------------------
[0, [1, "x"], 2]Here, the path array {1, 1} points to the element at index 1 in the nested array of the outer array [0, [1, 2], 2].
Object
The following example shows how to use the PostgreSQL jsonb_set() function to update a field in a JSON object.
SELECT jsonb_set_lax('{"x": 1}', '{x}', '"x"');
jsonb_set_lax
------------
{"x": "x"}The following example shows how to use the PostgreSQL jsonb_set() function to insert a new field in a JSON object.
SELECT jsonb_set_lax('{"x": 1}', '{y}', '2');
jsonb_set_lax
------------------
{"x": 1, "y": 2}Here, since the path y does not exist in the JSON object {"x": 1}, so jsonb_set() inserted the field y with value 2 in the JSON object {"x": 1}. Of course, you can also disable this default insertion behavior by passing the parameter create_if_missing with false, for example:
SELECT jsonb_set_lax('{"x": 1}', '{y}', '2', false);
jsonb_set_lax
-----------
{"x": 1}Here, the original JSON document is returned because the default insert behavior is disabled.
NULL Values
The following example shows how to use the PostgreSQL jsonb_set_lax() function to insert a new field in a JSON object.
SELECT jsonb_set_lax('{"x": 1, "y": 2}', '{y}', NULL);
jsonb_set_lax
---------------------
{"x": 1, "y": null}Here, we used a NULL value for the field y, and the jsonb_set_lax() function used null as the value of y. This is the default behavior. But we can change the default behavior by the parameter null_value_treatment, for example:
-
delete_keySELECT jsonb_set_lax('{"x": 1, "y": 2}', '{y}', NULL, true, 'delete_key');jsonb_set_lax --------------- {"x": 1}Here, we used
'delete_key'for the parameternull_value_treatment, and the fieldywas removed. -
return_targetSELECT jsonb_set_lax('{"x": 1, "y": 2}', '{y}', NULL, true, 'return_target');jsonb_set_lax ------------------ {"x": 1, "y": 2}Here, we used
'return_target'for the parameternull_value_treatment, andjsonb_set_lax()returned the original JSON value. -
raise_exceptionSELECT jsonb_set_lax('{"x": 1, "y": 2}', '{y}', NULL, true, 'raise_exception');Error: JSON value must not be null Description: Exception was raised because null_value_treatment is "raise_exception". Tips: To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed.Here, we used
'raise_exception'for the parameternull_value_treatment, andjsonb_set_lax()gave an error.