Type JSONB
Qu’est-ce que JSONB dans PostgreSQL et en quoi diffère-t-il de JSON ?
jsonb stocke le JSON dans un format binaire décomposé, rapide à interroger et indexable. C’est le type JSON que la plupart des applications devraient choisir.
PostgreSQL propose deux types JSON. json stocke une copie exacte du texte d’entrée, tandis que jsonb stocke une forme binaire décomposée : un peu plus lente à écrire à cause de la conversion, mais nettement plus rapide à traiter, et elle prend en charge l’indexation.
jsonb ne conserve ni les espaces, ni l’ordre des clés, ni les clés en double ; si une clé apparaît deux fois, seule la dernière valeur est conservée. Utilisez -> pour obtenir une valeur JSON, ->> pour obtenir du texte et @> pour tester si un document en contient un autre. Un index GIN sur une colonne jsonb accélère les requêtes de contenance et d’existence de clé.
Exemple
L’exemple emploie l’opérateur @> pour trouver le profil dont la ville est Osaka et affiche de façon lisible le document d’un autre profil.
CREATE TABLE profiles (id int PRIMARY KEY, data jsonb NOT NULL);
INSERT INTO profiles VALUES
(1, '{"name": "Ana", "city": "Lisbon", "tags": ["admin"]}'),
(2, '{"name": "Ben", "city": "Osaka"}');
SELECT data->>'name' AS name FROM profiles WHERE data @> '{"city": "Osaka"}';
SELECT jsonb_pretty(data) FROM profiles WHERE id = 1;Du SQL simple pour PostgreSQL 16 ou 17 standard, sans aucune extension. Exécutez-le dans une base de données vide que vous pouvez jeter ensuite.
Références
Documentation officielle de PostgreSQL (en anglais).