PostgreSQL JSON vs. JSONB
PostgreSQL proporciona funciones JSON para manipular y consultar datos JSON almacenados en la base de datos. Estas funciones son esenciales para manejar los tipos de datos JSON y JSONB, permitiendo a los usuarios extraer y manipular el contenido JSON con eficacia.
Utilización
Las funciones JSON de PostgreSQL se utilizan para acceder y manipular los tipos de datos JSON y JSONB, que son ideales para almacenar datos semiestructurados. Estas funciones permiten operaciones como extraer elementos, convertir formatos de datos y realizar coincidencias de patrones.
sql
-- Extracting a JSON object field by key
SELECT json_column -> 'key' FROM table_name;
-- Extracting a JSONB object field by key
SELECT jsonb_column -> 'key' FROM table_name;
En estas sintaxis, `->` se utiliza para extraer un objeto JSON, mientras que `->>` se utiliza para extraer un valor de texto de una columna JSON o JSONB.
Funciones JSON adicionales
Aquí tienes algunas funciones adicionales que pueden ser útiles:
- `jsonb_set`: Actualiza los valores de un documento JSONB.
- `jsonb_insert`: Inserta un nuevo valor en un documento JSONB en una ruta especificada.
- `jsonb_path_query`: Extrae valores JSONB que coincidan con una consulta JSONPath especificada.
Ejemplos
1. Extraer un campo JSON
sql
SELECT data -> 'name' AS name
FROM users;
Este ejemplo extrae el valor del campo `nombre` de una columna JSON `datos` de la tabla `usuarios`.
2. Convertir JSON en JSONB
sql
SELECT data::jsonb
FROM users;
Aquí, una columna JSON se convierte en JSONB, lo que proporciona ventajas como eficiencia de almacenamiento, mejoras de rendimiento e indexación y consulta más eficientes.
3. Consulta compleja con JSONB
sql
SELECT id, jsonb_array_elements(data->'items')->>'product_name' AS product_name
FROM orders;
Esta consulta extrae `nombre_producto` de cada elemento del arreglo `items` dentro de una columna JSONB `data`.
Consejos y buenas prácticas
- Elige JSONB por eficiencia. JSONB es generalmente más rápido para consultar e indexar y ofrece una mayor eficiencia de almacenamiento en comparación con JSON.
- Utiliza operadores adecuados. Familiarízate con operadores JSON como `->`, `->>` y `#>>` para extraer y manipular datos. Por ejemplo, `->` extrae un objeto JSON, mientras que `->>` extrae un valor de texto.
- Indexar columnas JSONB. Crea índices en columnas JSONB para acelerar las operaciones de búsqueda.
- Valida tus datos JSON. Asegúrate de que los datos JSON son válidos antes de insertarlos en la base de datos para evitar errores de ejecución.
- Utiliza las funciones JSON con criterio. Aunque potentes, las funciones JSON pueden consumir mucho rendimiento; utilízalas cuando sea necesario.
- Cuándo elegir JSON en lugar de JSONB. Opta por JSON cuando el formato original y el orden de las claves sean importantes para tu caso de uso.
Resumen de los operadores JSON
| Operario | Descripción |
|---|---|
| `->` | Extrae el objeto JSON |
| `->>` | Extrae un valor de texto de JSON |
| `#>>` | Extrae el valor del texto utilizando elementos de ruta |