PostgreSQL JSON Operations

Working with JSON and JSONB data

Create JSON

INSERT INTO users (data) VALUES ('{"name": "John", "age": 25}'::jsonb); # insert JSON

Extract with ->

SELECT data->'name' FROM users; # returns JSON
SELECT data->'address'->'city' FROM users; # nested access

Extract with ->>

SELECT data->>'name' FROM users; # returns text
SELECT data->'address'->>'city' FROM users; # nested text

Query JSON

SELECT * FROM users WHERE data->>'age' > '18'; # filter by JSON field
SELECT * FROM users WHERE data @> '{"city": "NYC"}'; # contains

Update JSON

UPDATE users SET data = jsonb_set(data, '\{age\}', '26'); # update field
UPDATE users SET data = data - 'age'; # remove field
UPDATE users SET data = data || '{"city": "NYC"}'; # add/merge field

JSON Functions

jsonb_array_length(data->'tags') # array length
jsonb_each(data) # expand to key-value pairs
jsonb_object_keys(data) # get all keys

JSON Operators

@> # contains
<@ # is contained by
? # key exists
?| # any key exists
?& # all keys exist