Operadores para json en pg 9.2
-
Upload
anthony-sotolongo -
Category
Technology
-
view
511 -
download
1
description
Transcript of Operadores para json en pg 9.2
“Operadores para JSON en PostgreSQL 9.2”
Anthony R. Sotolongo León([email protected])Daymel Bonne Solis
Introducción
Septiembre 2012
9.2
Introducción
•Tipo de rango.•Replicación en cascada.•Index-only scans•PLV8•JSON
9.2
Introducción
JSON
Dos funciones:
•row_to_json()•array_to json()
select row_to_json (tabla1) from tabla1
Introducción
JSON
Dos funciones:
•row_to_json()•array_to json()
select row_to_json (row (tabla1.columna1,tabla1.columna2)) from tabla1
Introducción
JSON
Aun no cuenta con operadores ni índices para mejorar los tiempos de respuestas
Desarrollo
Los mecanismos de extensión del gestor.
Agregar:•Tipos de datos•Operadores•Funciones•Indices
Desarrollo
Los mecanismos de extensión del gestor.
Agregar:•Tipos de datos•Operadores•Funciones•Índices
Extensiones(SQL, C, python,etc.)
Desarrollo
Extensiones en PostgreSQL
Dos archivos como mínimo
.control --- .SQL
• Incluirlas en directorio extension.
CREATE EXTESION nombre_de_extensión
Desarrollo
Extensiones en PostgreSQL
.control # extensioncomment = 'extension …postgresql'default_version = '0.1‘superuser = true
•nombre--version.SQLCreate type …
Desarrollo
Extensiones en PostgreSQL
Tipo de dato Hstore
Operadores:
hstore || hstore Concatena dos atributos
hstore
hstore ? text Pregunta si el tipo de dato
tiene una llave específica.
hstore @> hstore Si el hstore contiene otro
hstore
Desarrollo
JSON:
Fue especificado por Douglas Crockford como
una notación de datos, descrito en la RFC 4627,
para el mismo no existe operadores estándares.
JSON ejemplo ={“id": "file", "value": “archivo.txt}
Desarrollo
JSON:Operadores propuestos
=Verifica si son iguales en estructura y datos los JSON?Pregunta si el tipo de dato tiene una llave específica.@>Pregunta si el JSON contiene un par llave/valor
= Verifica si son iguales en
estructura y datos los JSON
? Pregunta si el tipo de dato
tiene una llave específica.
@> Pregunta si el JSON
contiene un par llave/valor
Desarrollo
Operadores:
CREATE OPERATOR ? (leftarg = json,rightarg = character varying,procedure = contains);
CREATE OPERATOR @> (leftarg = json,rightarg = character varying,procedure = containsvalue);
CREATE OPERATOR = (leftarg = json,rightarg = json,procedure = equals);
Desarrollo
Funciones:
CREATE OR REPLACE FUNCTION equals(doc1 json, doc2 json)RETURNS boolean AS$BODY$declarebegin
if ( $1::character varying=$2::character varying ) thenreturn true;
elsereturn false;
end if;end;$BODY$ LANGUAGE plpgsql VOLATILE;
Desarrollo
Ejemplo:
CREATE TABLE tabla2( campo1 serial NOTNULL, campo2 json);
with datos as(select'{"field1":"valor1","field2":'||generate_series(1,1000)::text||'}' as son)
insert into tabla2 ( campo2) select son::jsonfrom datos;
Desarrollo
Ejemplo:
select * from tabla2 where campo2='{"field1":"valor1","field2":10}'::json
Desarrollo
Ejemplo:
select * from tabla2 where campo2='{"field1":"valor1","field2":10}'::json
ERROR: el operador no existe: json = json
Desarrollo
Ejemplo:
select * from tabla2 where campo2='{"field1":"valor1","field2":10}'::json
Después de instalada la extensiónCreate extension jsonutils;Descarga:http://pgxn.org/dist/json_utils/
Resultado: 11;"{"field1":"valor1","field2":10}".
Desarrollo
Ejemplo:
select * from tabla1 where campo2 @> '"field2":340'
Resultado: 340;"{"field1":"valor1","field2“:340}".
Desarrollo
Índices:Se definió un índice hash, con el operador de =
CREATE OPERATOR CLASS json_equal_opsDEFAULT FOR TYPE json USING hash ASOPERATOR 1 = ,FUNCTION 1 jsonhash(json);
Desarrollo
Índices:
Explain analyze select * from tabla1 wherecampo2 ='{"field1":"valor1","field2":34}'
"Total runtime: 14.135 ms"
Desarrollo
Índices:
CREATE INDEX test_index_json ON tabla1USING hash(campo2);
Explain analyze select * from tabla1 wherecampo2 ='{"field1":"valor1","field2":34}'
"Total runtime: 0.491 ms"
POSTGRESQL
Conclusiones
•Se puede apreciar la capacidad de extensibilidad del
gestor.
•Se define una extensión con un conjunto de
operadores y funciones que mejoran el trabajo con el
tipo de dato JSON
•Se agrega el índice de tipo “hash”, y se mostraron
ejemplos de su utilización.
POSTGRESQL
Descarga de:
http://pgxn.org/dist/json_utils/
“Operadores para JSON en PostgreSQL 9.2”
Anthony R. Sotolongo León([email protected])Daymel Bonne Solis