PostgreSQL
Beginner
1 min read
JSONB Storage and Operators
Example
-- Create a table with JSONB
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
event_type TEXT NOT NULL,
payload JSONB NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Insert JSONB data
INSERT INTO events (event_type, payload) VALUES
('purchase', '{"userId":1,"items":[{"sku":"KB1","qty":2},{"sku":"M2","qty":1}],"total":159.97}'),
('signup', '{"userId":2,"email":"bob@example.com","referral":"google"}');
-- -> and ->> operators
SELECT
payload -> 'userId' AS user_id_json, -- 1 (JSONB number)
payload ->> 'userId' AS user_id_text, -- '1' (text)
payload -> 'items' -> 0 ->> 'sku' AS first_sku -- 'KB1'
FROM events WHERE event_type = 'purchase';
-- @> containment — find purchases by userId 1
SELECT * FROM events
WHERE event_type = 'purchase'
AND payload @> '{"userId": 1}';
-- ? key existence
SELECT * FROM events WHERE payload ? 'referral';
-- GIN index for fast JSONB queries
CREATE INDEX idx_events_payload ON events USING GIN (payload);
-- jsonb_each — expand JSONB object to key-value rows
SELECT key, value FROM jsonb_each('{"a":1,"b":2,"c":3}');
-- jsonb_array_elements — expand JSONB array to rows
SELECT elem FROM jsonb_array_elements('[1,2,3,4,5]'::jsonb) AS t(elem);
Related Resources
PostgreSQL Reference
Complete tag & property list
PostgreSQL How-To Guides
Step-by-step practical guides
PostgreSQL Exercises
Practice what you've learned
More in PostgreSQL