SQL

JSONB Columns (PostgreSQL)

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`jsonb` stores binary-optimized JSON. Index sub-fields with GIN for fast containment queries. Most-used operators: `->` (get field), `->>` (get as text), `@>` (contains), `?` (key exists).
SQL
Raw
CREATE TABLE events (
    id          BIGSERIAL PRIMARY KEY,
    payload     JSONB NOT NULL,
    created_at  TIMESTAMPTZ DEFAULT NOW()
);

INSERT INTO events (payload) VALUES
  ('{"type":"signup","user":{"id":1,"name":"Alice"},"tags":["pro","trial"]}'),
  ('{"type":"login", "user":{"id":2,"name":"Bob"},  "tags":["mobile"]}');

-- Extract fields
SELECT payload->'user'         AS user_obj,      -- jsonb
       payload->'user'->>'name' AS user_name,    -- text
       payload#>'{user,id}'    AS user_id_path   -- nested path
FROM   events;

-- Filter by content
SELECT * FROM events WHERE payload->>'type' = 'signup';
SELECT * FROM events WHERE payload @> '{"type":"login"}';
SELECT * FROM events WHERE payload->'tags' ? 'pro';      -- has key/array element

-- GIN index makes containment + key-existence queries fast
CREATE INDEX idx_events_payload_gin ON events USING gin (payload);

-- Expression index — fast filter on a specific field
CREATE INDEX idx_events_type ON events ((payload->>'type'));
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.