Le type de données JSONB de PostgreSQL facilite la gestion des données JSON dans ta base de données. Ses capacités vont bien au-delà du simple stockage : il offre des fonctions avancées pour manipuler et interroger finement les données JSON. Ce guide explore ces fonctions JSONB avec des exemples pratiques pour t’aider à tirer parti de la puissance de PostgreSQL dans la gestion des données JSON.
Pour une vue d’ensemble plus large du travail avec JSON dans PostgreSQL, y compris les types json et jsonb, consulte notre guide complet des fonctions JSON de PostgreSQL.
Introduction à JSONB
Le type de données jsonb de PostgreSQL est un format binaire qui stocke des données JSON. Il est très efficace et offre des possibilités d’indexation que json n’a pas. JSONB est généralement préférable grâce à sa flexibilité et à ses performances.
Créer une table avec JSONB
Commençons par créer une table qui utilise le type de données jsonb :
CREATE TABLE users (
id SERIAL PRIMARY KEY,
data JSONB
);
Insérer des données JSONB
Insère des données JSONB avec la syntaxe JSON standard. PostgreSQL valide et convertit automatiquement le JSON au format binaire :
INSERT INTO users (data) VALUES
('{"name": "John Doe", "email": "john@example.com", "age": 30}'),
('{"name": "Jane Doe", "email": "jane@example.com", "age": 25}'),
('{"name": "Alice Smith", "email": "alice@example.com", "age": 28, "address": {"city": "New York", "state": "NY"}}');
Accéder aux valeurs JSONB
PostgreSQL fournit plusieurs opérateurs pour explorer les valeurs JSONB.
Extraire un objet JSONB
Pour accéder aux valeurs JSONB imbriquées, utilise les opérateurs -> et ->>. L’opérateur -> renvoie des données au format JSON, tandis que ->> renvoie du texte.
SELECT data->'name' AS name, data->>'email' AS email FROM users;
Résultat attendu :
name | email
---------+--------------------
"John Doe" | john@example.com
"Jane Doe" | jane@example.com
Extraire des valeurs JSONB imbriquées
Pour des structures JSON plus profondes, enchaîne les opérateurs. L’opérateur ? vérifie d’abord l’existence de la clé :
SELECT
data->>'name' AS name,
data->'address'->>'city' AS city
FROM users
WHERE data ? 'address';
Résultat attendu :
name | city
-------------|----------
Alice Smith | New York
Fonctions JSONB
PostgreSQL propose toute une série de fonctions JSONB qui vont au-delà de la simple extraction de valeurs.
Vérifier l’existence d’une clé
L’opérateur ? vérifie si une clé existe :
SELECT data ? 'age' AS has_age FROM users;
Résultat attendu :
has_age
---------
t
t
t
Vérifier l’inclusion
Utilise l’opérateur @> pour vérifier si un objet JSON en contient un autre :
SELECT * FROM users WHERE data @> '{"age": 30}';
Résultat attendu :
id | data
----+---------------------------------------------
1 | {"name": "John Doe", "email": "john@example.com", "age": 30}
Concaténation de JSONB
Combine des colonnes ou des valeurs JSONB avec l’opérateur || :
SELECT data || '{"verified": false}' AS updated_data FROM users;
Résultat attendu :
updated_data
-------------------------------------------------------------------
{"age": 30, "name": "John Doe", "email": "john@example.com", "verified": false}
{"age": 25, "name": "Jane Doe", "email": "jane@example.com", "verified": false}
{"age": 28, "name": "Alice Smith", "email": "alice@example.com", "address": {"city": "New York", "state": "NY"}, "verified": false}
Supprimer une clé d’un JSONB
Supprime une clé avec l’opérateur - :
SELECT data - 'age' AS partial_data FROM users;
Résultat attendu :
partial_data
--------------------------------------------------------------------
{"name": "John Doe", "email": "john@example.com"}
{"name": "Jane Doe", "email": "jane@example.com"}
{"name": "Alice Smith", "email": "alice@example.com", "address": {"city": "New York", "state": "NY"}}
Indexation JSONB
Pour améliorer les performances des requêtes sur des données JSONB, utilise des index.
Créer un index JSONB
Un index GIN est idéal pour les types JSONB :
CREATE INDEX idx_users_data ON users USING GIN (data);
Cet index accélère les opérations comme la recherche de clés JSON ou de paires clé-valeur.
Fonctions JSONB avancées
PostgreSQL fournit des fonctions supplémentaires pour des opérations plus complexes :
-- Convert JSONB to key-value pairs
SELECT jsonb_each_text(data) FROM users LIMIT 1;
-- Get all keys from a JSONB object
SELECT jsonb_object_keys(data) FROM users LIMIT 1;
-- Update a nested value using jsonb_set
UPDATE users
SET data = jsonb_set(data, '{address,zip}', '"10001"')
WHERE data ? 'address';
Conclusion
Les fonctions JSONB de PostgreSQL offrent des options puissantes et flexibles pour travailler avec des données JSON dans ta base de données. Leurs principaux avantages :
- Performance : format de stockage binaire avec une indexation efficace
-
Des opérateurs riches : extraction et manipulation faciles avec
->,->>,@>,? -
Fonctions avancées : opérations complexes comme
jsonb_set,jsonb_each_textetjsonb_array_elements - Prise en charge de l’indexation : index GIN pour des requêtes rapides
Ces capacités font de PostgreSQL un excellent choix pour les applications qui doivent stocker et interroger des données JSON semi-structurées en plus des données relationnelles classiques. En maîtrisant ces fonctions JSONB, tu pourras créer des applications de base de données plus flexibles et plus efficaces.
Beekeeper Studio est une interface de base de données gratuite & open source
Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.
Ce que les utilisateurs disent de Beekeeper Studio
« Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données à nouveau agréable. »
« J’ai essayé beaucoup d’interfaces de base de données, mais Beekeeper trouve l’équilibre parfait entre fonctionnalités et simplicité. Ça marche, tout simplement. »