JSONB ou JSON : quand utiliser chacun
Choisissez entre JSON (texte, conservation des espaces) et JSONB (binaire, indexable, clés dédupliquées) pour le stockage approprié.
JSONB ou JSON : quand utiliser chacun est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Deux types JSON dans PostgreSQL
JSON— stocke le texte exact que vous lui fournissezJSONB— format binaire décomposé, clés dédoublonnées et indexable
JSON : stockage textuel
JSON conserve les espaces, l’ordre des clés et les clés en double. Il est réanalysé à chaque lecture. Aucune indexation GIN. C’est presque jamais le bon choix pour du nouveau code.
INSERT INTO docs (data) VALUES ('{"a": 1, "a": 2}'::JSON);
SELECT data->'a' FROM docs; -- whatever the parser picksJSONB : binaire et indexable
JSONB :
- Stocké sous forme décomposée → aucune nouvelle analyse à la lecture
- Les clés en double sont regroupées (la dernière l’emporte)
- L’ordre des clés n’est pas conservé
- Prend en charge l’indexation GIN
- Prend en charge des opérateurs de chemin avancés
Exemple JSONB
Une table d’événements simple :
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL DEFAULT NOW(),
data JSONB NOT NULL
);
INSERT INTO events (data) VALUES
('{"type":"login","user_id":42,"ip":"1.2.3.4"}');Opérateurs de chemin
JSONB dispose de nombreux opérateurs (abordés dans la prochaine leçon) :
SELECT data->'user_id' FROM events; -- → JSONB
SELECT data->>'user_id' FROM events; -- → TEXT
SELECT data #>> '{user,name}' FROM events; -- nested text pathInclusion
L’opérateur JSONB le plus utile : @> (contient).
SELECT * FROM events WHERE data @> '{"type":"login"}';
-- Combined with a GIN index, this is fast even on billions of rows.Égalité des valeurs JSONB
Deux valeurs JSONB sont égales si leur contenu correspond — l’ordre des clés n’a aucune importance :
SELECT '{"a":1,"b":2}'::JSONB = '{"b":2,"a":1}'::JSONB; -- TRUEConversion entre types
Convertissez librement :
SELECT '{"a":1}'::JSONB->'a'; -- 1 (as JSONB)
SELECT ('{"a":1}'::JSONB)->>'a'; -- '1' (as TEXT)
SELECT ('{"a":1}'::JSONB)->'a'::INT; -- 1 (as INT after extraction)Quand NOT utiliser JSONB
Si les données ont une structure fixe, utilisez de vraies colonnes :
- Requêtes plus rapides (aucune analyse de document pour chaque ligne)
- Types forts et contraintes
- Stockage moins volumineux
- Meilleures statistiques
JSONB est particulièrement utile lorsque la structure varie ou évolue rapidement.
Modélisation hybride
Bonne pratique : des colonnes structurées pour les champs stables et JSONB pour les éléments variables :
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
event_type TEXT NOT NULL,
user_id BIGINT,
extra JSONB NOT NULL DEFAULT '{}'::JSONB
);Validation
JSONB stocke tout JSON valide. Pour imposer des contraintes structurées, utilisez des contraintes CHECK ou imposez le schéma dans la couche applicative :
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type');Récapitulatif
JSONB > JSON pour presque tous les cas de production.
- JSONB : binaire, indexé, chemins rapides
- JSON : aller-retour textuel uniquement
- Utilisez JSONB pour les structures variables et de vraies colonnes pour les structures fixes
Vérification rapide
Vous concevez une nouvelle table pour stocker des documents JSON envoyés par les utilisateurs, sur lesquels vous effectuerez des requêtes par contenu. JSON ou JSONB ?
Questions Fréquemment Posées
La leçon « JSONB ou JSON : quand utiliser chacun » est-elle gratuite ?
Oui — le texte complet de « JSONB ou JSON : quand utiliser chacun » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « JSONB ou JSON : quand utiliser chacun » ?
Choisissez entre JSON (texte, conservation des espaces) et JSONB (binaire, indexable, clés dédupliquées) pour le stockage approprié. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « JSONB ou JSON : quand utiliser chacun » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- JSONB ou JSON : quand utiliser chacun
- Opérateurs de chemin : -> ->> @>
- Indexer JSONB avec GIN
- Modélisation : quand JSONB l’emporte sur la normalisation