En aquest tema, explorarem els tipus de dades JSON en PostgreSQL, com emmagatzemar i manipular dades JSON, i els avantatges d'utilitzar JSON en les bases de dades relacionals.
Què és JSON?
JSON (JavaScript Object Notation) és un format lleuger d'intercanvi de dades que és fàcil de llegir i escriure per a humans, i fàcil de parsejar i generar per a màquines. JSON és un format de text que és completament independent del llenguatge, però utilitza convencions que són familiars als programadors de la família de llenguatges C, incloent C, C++, C#, Java, JavaScript, Perl, Python, i molts altres.
Tipus de dades JSON en PostgreSQL
PostgreSQL ofereix dos tipus de dades per emmagatzemar JSON:
- JSON: Emmagatzema el text JSON com una cadena de text. No valida el format JSON en el moment de la inserció.
- JSONB: Emmagatzema el JSON en un format binari binaritzat. Valida el format JSON en el moment de la inserció i permet una manipulació més eficient.
Comparació entre JSON i JSONB
Característica | JSON | JSONB |
---|---|---|
Emmagatzematge | Text | Binari |
Validació | No valida | Valida |
Cerca i indexació | Més lenta | Més ràpida |
Manipulació | Menys eficient | Més eficient |
Ordenació de claus | Manté l'ordre original | No manté l'ordre original |
Exemple de creació de taula amb JSON i JSONB
Inserció de dades JSON
INSERT INTO exemples_json (dades_json, dades_jsonb) VALUES ( '{"nom": "Joan", "edat": 30, "ciutat": "Barcelona"}', '{"nom": "Maria", "edat": 25, "ciutat": "Madrid"}' );
Consultes amb JSON
Accés a elements JSON
Per accedir a elements dins d'un camp JSON, podem utilitzar els operadors ->
i ->>
.
->
retorna un objecte JSON.->>
retorna un valor de text.
-- Accedir a un objecte JSON SELECT dades_json->'nom' AS nom FROM exemples_json; -- Accedir a un valor de text SELECT dades_json->>'nom' AS nom FROM exemples_json;
Consultes amb JSONB
JSONB permet una cerca més eficient i suport per a indexació. Per exemple, podem crear un índex GIN (Generalized Inverted Index) per a un camp JSONB.
Actualització de dades JSON
Podem actualitzar elements dins d'un camp JSON utilitzant les funcions jsonb_set
i jsonb_insert
.
-- Actualitzar un valor existent UPDATE exemples_json SET dades_jsonb = jsonb_set(dades_jsonb, '{edat}', '35') WHERE dades_jsonb->>'nom' = 'Joan'; -- Inserir un nou valor UPDATE exemples_json SET dades_jsonb = jsonb_insert(dades_jsonb, '{adreça}', '"Carrer Major, 10"') WHERE dades_jsonb->>'nom' = 'Maria';
Exercicis pràctics
Exercici 1: Creació i inserció de dades JSON
-
Crea una taula anomenada
empleats
amb els següents camps:id
(clau primària)informacio
(JSONB)
-
Insereix les següents dades a la taula
empleats
:{"nom": "Anna", "posicio": "Desenvolupadora", "departament": "IT"} {"nom": "Pere", "posicio": "Analista", "departament": "Finances"}
Solució
CREATE TABLE empleats ( id SERIAL PRIMARY KEY, informacio JSONB ); INSERT INTO empleats (informacio) VALUES ('{"nom": "Anna", "posicio": "Desenvolupadora", "departament": "IT"}'), ('{"nom": "Pere", "posicio": "Analista", "departament": "Finances"}');
Exercici 2: Consultes amb JSONB
- Recupera el nom de tots els empleats.
- Actualitza la posició de "Anna" a "Enginyera de Programari".
Solució
-- Recuperar el nom de tots els empleats SELECT informacio->>'nom' AS nom FROM empleats; -- Actualitzar la posició de "Anna" UPDATE empleats SET informacio = jsonb_set(informacio, '{posicio}', '"Enginyera de Programari"') WHERE informacio->>'nom' = 'Anna';
Conclusió
En aquest tema, hem après sobre els tipus de dades JSON en PostgreSQL, com emmagatzemar i manipular dades JSON, i els avantatges d'utilitzar JSONB per a una manipulació més eficient. Hem vist exemples pràctics de creació de taules, inserció de dades, consultes i actualitzacions amb JSON i JSONB. Aquests coneixements són fonamentals per treballar amb dades semi-estructurades en PostgreSQL.
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