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.

  1. 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.

  1. Operadors JSON

2.1. Operador de selecció (->)

Aquest operador s'utilitza per accedir a un valor dins d'un objecte JSON.

SELECT '{"name": "John", "age": 30}'::json->'name';

Resultat:

"John"

2.2. Operador de selecció de text (->>)

Aquest operador retorna el valor com a text.

SELECT '{"name": "John", "age": 30}'::json->>'age';

Resultat:

"30"

2.3. Operador de selecció d'índex (#>)

Aquest operador s'utilitza per accedir a un valor dins d'un array JSON.

SELECT '[{"name": "John"}, {"name": "Jane"}]'::json#>'{1,name}';

Resultat:

"Jane"

2.4. Operador de selecció d'índex de text (#>>)

Aquest operador retorna el valor com a text.

SELECT '[{"name": "John"}, {"name": "Jane"}]'::json#>>'{1,name}';

Resultat:

"Jane"

  1. Funcions JSON

3.1. json_each()

Aquesta funció descompon un objecte JSON en un conjunt de parells clau-valor.

SELECT * FROM json_each('{"name": "John", "age": 30}');

Resultat:

 key  | value
------+-------
 name | "John"
 age  | 30

3.2. json_object_keys()

Aquesta funció retorna un array amb les claus d'un objecte JSON.

SELECT json_object_keys('{"name": "John", "age": 30}');

Resultat:

 json_object_keys
------------------
 name
 age

3.3. json_array_elements()

Aquesta funció descompon un array JSON en els seus elements individuals.

SELECT * FROM json_array_elements('[{"name": "John"}, {"name": "Jane"}]');

Resultat:

 json_array_elements
---------------------
 {"name": "John"}
 {"name": "Jane"}

3.4. json_build_object()

Aquesta funció crea un objecte JSON a partir de parells clau-valor.

SELECT json_build_object('name', 'John', 'age', 30);

Resultat:

 json_build_object
-------------------
 {"name": "John", "age": 30}

3.5. json_build_array()

Aquesta funció crea un array JSON a partir d'una llista de valors.

SELECT json_build_array('John', 30, true);

Resultat:

 json_build_array
------------------
 ["John", 30, true]

  1. 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"}');
  1. Escriu una consulta per obtenir el nom de cada usuari.
SELECT info->>'name' AS name FROM users;
  1. Escriu una consulta per obtenir l'edat de l'usuari amb id 1.
SELECT info->>'age' AS age FROM users WHERE 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}]');
  1. Escriu una consulta per obtenir tots els productes de la comanda amb id 1.
SELECT json_array_elements(items)->>'product' AS product FROM orders WHERE id = 1;
  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

Mòdul 7: Seguretat i gestió d'usuaris

Mòdul 8: Treballant amb JSON i funcionalitats NoSQL

Mòdul 9: Extensions i eines avançades

Mòdul 10: Estudis de cas i aplicacions del món real

© Copyright 2024. Tots els drets reservats