Tema SQL
jsonb_path_query / SQL/JSON (PostgreSQL)
Consulta documentos jsonb con expresiones JSON Path (SQL:2016). Incluye filtros, variables y modo estricto. Potencia superior a solo operadores -> y @>.
Descripción
jsonb_path_query(doc, path) devuelve conjunto de jsonb coincidentes; jsonb_path_exists para predicados. Útil para esquemas JSON semiestructurados y validación. Requiere familiaridad con JSONPath. Rendimiento: índice GIN jsonb_path_ops o expresiones generadas. MySQL JSON_TABLE parcial; SQL Server JSON_VALUE con paths limitados.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT jsonb_path_query('{"a":[1,2,3]}', '$.a[*] ? (@ > 1)');
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- vars
- Pasa parámetros con PASSING en funciones relacionadas.
- Índices
- Planifica paths frecuentes para GIN.
Ejemplos
Ejemplo 1
SELECT jsonb_path_query(data, '$.items[*].price ? (@ < 100)')
FROM catalogo_json;
SELECT * FROM catalogo_json
WHERE jsonb_path_exists(data, '$.tags[*] ? (@ == "sql")');
Ejemplo 2
SELECT jsonb_path_query_array('[1,2,3,4]', '$[*] ? (@ >= $min)', jsonb_build_object('min', 2));
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.