Postgresql Jsonb Cheatsheet en
Postgresql Jsonb Cheatsheet en
'{ json_data -> 'name' name json_data ->> 'name' name '{pizzas,1,additionalToppings}' -> 'phoneNumbers' -> 1 'pizzas','1','pizzaName') second_pizza_name
@? '$.pizzas[1].pizzaName == "Salami"'
"id": 778, from test; from test; as additional_toppings_2nd_pizza as second_phonenumber from test;
as pizzaName_salami
from test;
"shop": "Luigis Pizza", from test; from test;
"name": "Edward Olson",
"phoneNumbers": id | name
-----+----------------
id | name
-----+----------------
additional_toppings_2nd_pizza
------------------------------------
second_phonenumber
--------------------
second_pizza_name
-------------------
"image": null,
"pizzas": [
{
🥓 🌶
"pizzaName": "Salami",
"additionalToppings": [" ", " "] Contains query Does JSON path return any item Return JSON path itemsany item
}, select select
{ JSON A contains JSON B JSON A contains Item B JSON A contains any item in B JSON A contains all items in B in B jsonb_path_exists(json_data, jsonb_path_query(json_data,
🍌 🌶 🍍
"pizzaName": "Margherita", select select '$.pizzas[*].pizzaName == "Salami"') '$.pizzas[*] ? (@.pizzaName == "Salami")')
select select
"additionalToppings": [" ", " ", " "] json_data json_data json_data as is_there_salami_pizza as is_there_salami_pizza
json_data ? 'shop'
} @> '{"id": 778}'::jsonb as contains_shop
?| ARRAY['shop','cookies'] ?& ARRAY['shop','cookies'] from test; from test;
as contains_shop_or_cookies as contains_shop_and_cookies
] as contains_id from test; from test; from test;
}'); from test; salami_pizza is_there_salami_pizza
-------------- -----------------------------------------------------------
contains_id contains_shop
---------------
contains_shop_or_cookies
--------------------------
contains_shop_and_cookies
--------------------------
t
{"pizzaName": "Salami", "additionalToppings": [" 🥓", "🌶"]}
------------ t f
t t
Convert array to JSON array Build JSON object from text array Build JSON object from key and value arrays
select array_to_json( select select
ARRAY[' 🍌', '🌶', '🍍']); jsonb_object( jsonb_object(
Parse Keys
'{{name, francesco}, {pizza, "Margherita"}}'); '{name, pizza}',
'{francesco, Margherita}'); Prettify
Return key/values as JSON rows Return key/values as text rows Extract all keys Prettify JSON output
array_to_json jsonb_object jsonb_object
------------------------------------------------
🍌 🌶 🍍
---------------
[" "," "," "] {"name" : "francesco", "pizza" : "Margherita"}
------------------------------------------------
{"name" : "francesco", "pizza" : "Margherita"}
id | name | address
-----+--------------+--------------------
778 | Edward Olson | Unit 9398 Box 2056+
pizzaName | additionalToppings
------------+--------------------
Salami | { , }🥓🌶 Edit
| | DPO AP 24022 🍌🌶🍍
Margherita | { , , }
Remove items in A Remove specified path Remove item # from array Add/modify items Remove nulls Insert items
select select select select select select
Extract to record declaring columns Extract to recordset declaring columns json_data json_data (json_data -> 'phoneNumbers') - 1 jsonb_set(json_data -> 'pizzas', jsonb_strip_nulls(json_data) no_nulls jsonb_insert(json_data,
- ARRAY['pizzas','id'] #- '{pizzas,1,additionalToppings}' as no_first_phone_number '{0,"pizzaName"}', from test; '{"phoneNumbers",0}',
select p.* from test select p.* from test
as no_pizzas_and_id as no_2nd_pizza_additionalToppings from test; to_jsonb('4 Stagioni'::text), false) to_jsonb('12345'::text), false)
cross join lateral cross join lateral
from test; from test; as change_first_pizza_name as add_first_phone_number
jsonb_to_record(json_data) jsonb_to_recordset(json_data -> 'pizzas')
as p(id int, "phoneNumbers" text[]); as p("pizzaName" text, from test; from test;
no_pizzas_and_id no_2nd_pizza_additionaltoppings
"additionalToppings" text[]); no_first_phone_number
---------------------------------- -------------------------------------------
------------------------
{"name": "Edward Olson", {"id": 778, change_first_pizza_name The JSON document doesn’t contain the image add_first_phone_number
"name": "Edward Olson", ["(935)503-3765x4154"] field which was null --------------------------------------------------------------------
"shop": "Luigis Pizza", ------------------------------------------------------------------------------
id | phoneNumbers pizzaName | additionalToppings "address": "Unit 9398 Box 2056\nDPO AP 24022", "shop": "Luigis Pizza", [{"pizzaName": "4 Stagioni", "additionalToppings": [" 🥓", "🌶"]}, {"id": 778, "name": "Edward Olson", "shop": "Luigis Pizza",...,
-----+--------------------------------- ------------+--------------------
Salami 🥓,🌶}
| {
"phoneNumbers": ["(935)503-3765x4154", "(935)12345"]} "pizzas": [
{"pizzaName": "Salami", additionalToppings": [" 🥓", "🌶"]}, {"pizzaName": "Margherita", "additionalToppings": [" 🍌", "🌶", "🍍"]}] "phoneNumbers": ["12345", "(935)503-3765x4154", "(935)12345"]}
Margherita | {🍌,🌶,🍍}
778 | {(935)503-3765x4154,(935)12345}
{pizzaName": "Margherita"}], ...}