En aquest tema, explorarem les funcions i operadors que PostgreSQL ofereix per treballar amb dades JSON. PostgreSQL és conegut per la seva robusta implementació de tipus de dades JSON i JSONB, que permeten emmagatzemar i manipular dades en format JSON de manera eficient.
- Tipus de dades JSON i JSONB
Abans d'entrar en les funcions i operadors, és important entendre la diferència entre els tipus de dades JSON i JSONB:
- JSON: Emmagatzema les dades en format text, tal com es proporcionen. És més lent per a les operacions de lectura i escriptura.
- JSONB: Emmagatzema les dades en un format binari optimitzat. És més ràpid per a les operacions de lectura i escriptura i permet indexar les dades.
- Operadors JSON
2.1. Operador de selecció (->
)
Aquest operador s'utilitza per accedir a un valor dins d'un objecte JSON.
Resultat:
2.2. Operador de selecció de text (->>
)
Aquest operador retorna el valor com a text.
Resultat:
2.3. Operador de selecció d'índex (#>
)
Aquest operador s'utilitza per accedir a un valor dins d'un array JSON.
Resultat:
2.4. Operador de selecció d'índex de text (#>>
)
Aquest operador retorna el valor com a text.
Resultat:
- Funcions JSON
3.1. json_each()
Aquesta funció descompon un objecte JSON en un conjunt de parells clau-valor.
Resultat:
3.2. json_object_keys()
Aquesta funció retorna un array amb les claus d'un objecte JSON.
Resultat:
3.3. json_array_elements()
Aquesta funció descompon un array JSON en els seus elements individuals.
Resultat:
3.4. json_build_object()
Aquesta funció crea un objecte JSON a partir de parells clau-valor.
Resultat:
3.5. json_build_array()
Aquesta funció crea un array JSON a partir d'una llista de valors.
Resultat:
- Exercicis pràctics
Exercici 1: Accedint a valors JSON
Dada la següent taula users
amb una columna info
de tipus JSON:
CREATE TABLE users ( id serial PRIMARY KEY, info json ); INSERT INTO users (info) VALUES ('{"name": "John", "age": 30, "city": "New York"}'), ('{"name": "Jane", "age": 25, "city": "Los Angeles"}');
- Escriu una consulta per obtenir el nom de cada usuari.
- Escriu una consulta per obtenir l'edat de l'usuari amb id 1.
Exercici 2: Manipulant arrays JSON
Dada la següent taula orders
amb una columna items
de tipus JSON:
CREATE TABLE orders ( id serial PRIMARY KEY, items json ); INSERT INTO orders (items) VALUES ('[{"product": "Laptop", "quantity": 1}, {"product": "Mouse", "quantity": 2}]'), ('[{"product": "Keyboard", "quantity": 1}, {"product": "Monitor", "quantity": 1}]');
- Escriu una consulta per obtenir tots els productes de la comanda amb id 1.
- Escriu una consulta per obtenir la quantitat del producte "Mouse" de la comanda amb id 1.
SELECT json_array_elements(items)->>'quantity' AS quantity FROM orders WHERE id = 1 AND json_array_elements(items)->>'product' = 'Mouse';
Conclusió
En aquest tema, hem explorat les funcions i operadors que PostgreSQL ofereix per treballar amb dades JSON. Hem après a accedir i manipular dades JSON utilitzant operadors com ->
, ->>
, #>
i #>>
, així com funcions com json_each()
, json_object_keys()
, json_array_elements()
, json_build_object()
i json_build_array()
. A més, hem practicat aquests conceptes amb exercicis pràctics per reforçar el nostre coneixement. En el proper tema, explorarem com utilitzar PostgreSQL com a base de dades NoSQL.
Curs de PostgreSQL
Mòdul 1: Introducció a PostgreSQL
Mòdul 2: Operacions bàsiques de SQL
Mòdul 3: Consultes SQL avançades
Mòdul 4: Disseny de bases de dades i normalització
Mòdul 5: Funcionalitats avançades de PostgreSQL
Mòdul 6: Optimització i millora del rendiment
- Optimització de consultes
- Estratègies d'indexació
- Analitzant el rendiment de les consultes
- Vacuuming i manteniment
Mòdul 7: Seguretat i gestió d'usuaris
- Rols d'usuari i permisos
- Mètodes d'autenticació
- Encriptació de dades
- Còpia de seguretat i restauració
Mòdul 8: Treballant amb JSON i funcionalitats NoSQL
Mòdul 9: Extensions i eines avançades
- PostGIS per a dades geoespacials
- Cerca de text complet
- Wrappers de dades externes
- PL/pgSQL i altres llenguatges procedimentals