Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Trabajando con objetos

21/33
Recursos

Aportes 21

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Una caracteristica muy importante de PostgreSQL es su capacidad de trabajar con estructuras JSON.

  • JSON Texto plano - Es unicamente un string de texto.
  • JSON Binary - Es más rápido de procesar ya que se guarda como un archivo binario.

El uso de objetos nos dará más flexibilidad en el trabajo.

-- Inserción de datos
INSERT INTO  ordenes(info)
VALUES
('{"cliente":"Edna Moda", "items":{"producto":"Biberon", "cantidad":3}}'),
('{"cliente":"Juan Moda", "items":{"producto":"Carro", "cantidad":3}}');

-- Extrae los datos con formato JSON
SELECT info->'cliente' AS cliente FROM ordenes;

-- Extrae los datos con el tipo de dato asignado por Postgres
SELECT info->>'cliente' AS cliente FROM ordenes;

Trabajando con objetos

PostgreSQL permite trabajar directamente con objetos tipo JSON esto es una funcionalidad que no brindan todos los manejadores de datos

porque trabajar con objetos JSON es complicado
ya que son una cadena de texto con una estructura especifica, y lo que suele ocurrir es que los manejadores de datos guardan un string que evalúan en cada consulta que se les haga

PostgresSQL posee el tipo de dato json y jsonb que guarda los datos de forma binaria, estos tipos de datos permiten que internamente postgresql guarde una estructura con la que puede trabajar más cómodamente los tipos de datos json

Tabla con una columna en formato json

-- DROP TABLE ordenes;
CREATE TABLE ordenes(
  id serial NOT NULL PRIMARY KEY,
  info json NOT NULL
);

INSERT INTO ordenes (info)
VALUES (
  '{"cliente": "David Shanchez", "items": { "producto": "Biberon", "cantidad": "24" }}'
),
(
  '{"cliente": "Jorge Luis", "items": { "producto": "Carro hotweels", "cantidad": "2" }}'
),
(
  '{"cliente": "Sancho Panza", "items": { "producto": "Caja", "cantidad": "13" }}'
);

-- regresa el valor aun en formato json
SELECT
  info -> 'cliente' AS cliente
FROM ordenes;

-- regresa el valor en formato string
SELECT
  info ->> 'cliente' AS cliente
FROM ordenes;

-- usando filtros con un campo json
SELECT
  info ->> 'cliente' AS cliente
FROM ordenes
WHERE info -> 'items' ->> 'producto' = 'Biberon';

Que bueno tocar el tema del json porque es algo muy importante y cada vez se usa mucho más justamente para optimizar más el desempeño, en mi trabajo no usamos base de datos no sql y cuando tenemos formularios con mucha información entonces asignamos campos json o jsonb. No obstante solemos utilizar también esta función del postgres para convertir la fila o las filas en formato json

SELECT
json_build_object(
‘id’, id,
‘info’, info
)json_data
FROM ordenes
WHERE info -> ‘items’ ->> ‘cantidad’ = ‘1’;

Esto lo que hace es devolver la consulta en formato json completo y eso a su vez al llamar en un formulario que utilice angular o react se puede devolver en formato json sin tener que convertir del lado del javascript(ejemplo)

Muy útil esta clase, nunca pensé que postgreSQL manejara JSON de manera tan amigable…

Es sencillo, pero no lo he visto en los aportes…

Para sacar la tabla ORDENES completa a nivel texto sería así:

SELECT 
	info ->> 'cliente' AS cliente,
	info -> 'items' ->> 'producto' AS producto,
	info -> 'items' ->> 'cantidad' AS cantidad
FROM ordenes;
CREATE TABLE ordenes(
	ID serial NOT NULL PRIMARY KEY,
	info json NOT NULL
);

SELECT * FROM ordenes;

INSERT INTO ordenes (info)
VALUES
(
	'{"cliente": "David Sanchez", "items":{"producto":"Biberon", "cantidad":"24"}}'
),
(
	'{"cliente": "Edna Cardenas Sanchez", "items":{"producto":"Carro Juguete", "cantidad":"4"}}'
),
(
	'{"cliente": "Israel Vazquez", "items":{"producto":"Tren Juguete", "cantidad":"6"}}'
);

SELECT * FROM ordenes;

SELECT
	info -> 'cliente' AS cliente
FROM ordenes;

SELECT
	info ->> 'cliente' AS cliente
FROM ordenes;

SELECT 
	info ->> 'cliente' AS cliente
FROM ordenes
WHERE info -> 'items' ->> 'producto' = 'Biberon';

Me llamó mucho la atención este asunto de json, creo que sirve muchísimo para ahorrar espacio.

Interesante y muy potente

Creo vale la pena agregar que el campo JSON no es apra que pongamos toda la info que peude o no existir, especialemente si esta info tiene llaves, en este ejemplpo en contro yo recomendaria que el cliente sea un campo en la tabla y ya los items que sea el JSON.

interesante

Esto cambia la jugada de todo, puedes agregar campos específicos para cada objeto según lo necesite y no hay problema con el orden de los datos, lo mejor es que permite filtrado interno dentro del json.

Increiblemente practico y util.

Useful!!

Está característica está genial, no sabia que existia

El permitir json y bson es algo realmente genial y muy útil !!

excelente la amplia compatibilidad y gestión que ofrece postgres para este tipo de objetos json, de verdad su versatilidad es increíble.

Objetos JSON: Clave-Valor

Wow esta funcion es muy util, este manejador de bases de datos podria convertirse facilmente en la herramienta principal de una analysta de datos, solo le falta poder generar graficos jeje.

Genial, muy bueno si se quiere generar un informe historico, ya tengo varios ejemplos en mente.

Genial como PostgreSQL maneja datos JSON tan facil.

Espectacular el manejo de los objetos JSON