Type Postgres stockant JSON en format binaire indexé et optimisé pour queries.
JSONB est le type Postgres pour stocker des données JSON en format binaire optimisé, supportant indexing (GIN) et queries efficientes — différent du type JSON original (text-based, no indexing, pas de dedup keys). Idéal pour données semi-structurées flexibles dans Postgres.
Vs JSON type : (1) JSONB binaire (parsing déjà fait) → reads rapides ; JSON text (parsed each access) ; (2) JSONB dedupe keys (last value wins), JSON preserve duplicates ; (3) JSONB reorder keys ; (4) JSONB indexable via GIN ; (5) JSONB plus stockage slight overhead à l'insert mais reads très optimisés.
Opérateurs courants :
- `->` get JSON object field by key, returns JSON : `data->'name'`
- `->>` get JSON object field as TEXT : `data->>'name'`
- `#>` get JSON object at path array : `data#>'{address,city}'`
- `#>>` same as TEXT.
- `?` does key exist : `data ? 'name'`
- `?|` any of keys exist : `data ?| array['key1', 'key2']`
- `?&` all keys exist.
- `@>` contains : `data @> '{"status":"active"}'`
- `<@` is contained by.
- `||` concatenate : `data || '{"new_key": "value"}'`
- `-` remove key : `data - 'old_key'`.
Indexing : `CREATE INDEX idx_data_gin ON table USING GIN (data);` indexe tout le JSONB ; ou `GIN (data jsonb_path_ops)` plus rapide mais limited operators. Exemple expression index : `CREATE INDEX ON users ((data->>'email'));`.
Use cases :
(1) **Semi-structured data** — varying attributes per row (multi-tenant SaaS where each customer has custom fields).
(2) **Avoid EAV antipattern** — JSONB column cleaner than entity-attribute-value tables.
(3) **Webhooks payload storage** — store full webhook JSON pour audit/replay.
(4) **API request/response logs**.
(5) **Config storage**.
(6) **Hybrid relational + document** — best of both worlds vs migration to MongoDB.
(7) **Postgres as document DB alternative** to MongoDB.
Limitations : (1) deeply nested queries syntax verbose ; (2) updates to nested fields rewrite entire JSONB (use sparingly for hot writes) ; (3) less typed than columns proper (no enum constraints sans validation triggers/CHECK with jsonb_typeof). Mais pour 90% des semi-structured needs, JSONB Postgres élimine besoin de MongoDB. Compétences DP-300, DEA-C01.
200+ certifications, 400 000+ questions, examens blancs chronométrés.
Voir le catalogue →