Saltar al contenido principal
Documentos
Funciones de cadenaDesencadenaBases de datosFunciones JSONFunciones matemáticasFunciones de fechaÍndicesSintaxis básicaGestión de Tablas y Esquemas

Indexación GIN PostgreSQL

Las funciones JSON de PostgreSQL te permiten almacenar, consultar y manipular datos JSON dentro de tu base de datos. Son esenciales para manejar tipos de datos JSON y realizar operaciones como extracción, agregación y transformación.

Utilización

Las funciones JSON se utilizan al tratar con datos JSON almacenados en PostgreSQL, permitiendo una consulta y manipulación eficaces de este tipo de datos semiestructurados. Facilitan operaciones como recuperar objetos JSON, acceder a valores concretos y realizar modificaciones.

Sintaxis


json -> key
jsonb ->> key
jsonb_set(target jsonb, path text[], new_value jsonb)

En estos ejemplos, se utiliza `->` para extraer objetos JSON, `->>` recupera valores JSON como texto, y `jsonb_set` actualiza datos JSON en una ruta especificada.

Diferencia entre `json` y `jsonb`:

  • json: Almacena los datos JSON como texto, conservando los espacios en blanco y el orden de las claves.
  • jsonb: Almacena los datos JSON en formato binario, lo que ofrece un mejor rendimiento y capacidad de indexación. Por eso se suele preferir `jsonb` para la mayoría de los casos de uso.

Ejemplos

1. Extraer objeto JSON


SELECT data -> 'name' AS name
FROM json_table;

Esta consulta extrae el objeto JSON asociado a la clave `nombre` de una columna `datos` de la tabla `json_table`.

2. Acceder al valor JSON como texto


SELECT data ->> 'age' AS age
FROM json_table;

Aquí, el valor JSON de `age` se recupera como texto, ideal para casos en los que necesites los datos en formato texto para su posterior procesamiento.

3. Actualizar datos JSON


UPDATE json_table
SET data = jsonb_set(data, '{address, city}', '"New York"')
WHERE id = 1;

Esto actualiza el campo "ciudad" del objeto JSON "dirección" a "Nueva York" para una fila concreta en la que "id" es 1.

4. Manejo de Arreglos JSON


SELECT jsonb_array_elements(data -> 'tags') AS tag
FROM json_table;

Esta consulta demuestra cómo manejar los arreglos JSON extrayendo cada elemento del arreglo `tags` dentro de un objeto JSON.

5. Operaciones JSON


SELECT jsonb_each(data)
FROM json_table;

Este ejemplo utiliza `jsonb_each` para expandir el objeto JSON en un conjunto de pares clave-valor, útil para iterar sobre los datos.

Consejos y buenas prácticas

  • Utiliza `jsonb` en lugar de `json`. Generalmente se prefiere `jsonb` por su mejor rendimiento y capacidad de indexación.
  • Indexar datos JSON. Utiliza la indexación GIN para una consulta eficiente de los datos JSONB, con el fin de mejorar el rendimiento.
  • 
    CREATE INDEX jsonb_idx ON json_table USING GIN (data);
    
  • Limitar la profundidad JSON. Mantén las estructuras JSON poco profundas para evitar consultas complejas y mejorar la legibilidad.
  • Aprovecha las funciones de PostgreSQL. Utiliza funciones integradas como `jsonb_array_elements` para manejar arreglos JSON con eficacia.
  • Valida la estructura JSON. Asegúrate de que los datos JSON se adhieren a los esquemas esperados para evitar errores durante la consulta o manipulación.
  • Maneja con elegancia las teclas que faltan. Utiliza funciones como `coalesce` para gestionar las claves que faltan y proporcionar valores por defecto.