Operadores para json en pg 9.2
-
Upload
anthony-sotolongo -
Category
Technology
-
view
514 -
download
1
description
Transcript of Operadores para json en pg 9.2
![Page 1: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/1.jpg)
“Operadores para JSON en PostgreSQL 9.2”
Anthony R. Sotolongo León([email protected])Daymel Bonne Solis
![Page 2: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/2.jpg)
Introducción
Septiembre 2012
9.2
![Page 3: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/3.jpg)
Introducción
•Tipo de rango.•Replicación en cascada.•Index-only scans•PLV8•JSON
9.2
![Page 4: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/4.jpg)
Introducción
JSON
Dos funciones:
•row_to_json()•array_to json()
select row_to_json (tabla1) from tabla1
![Page 5: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/5.jpg)
Introducción
JSON
Dos funciones:
•row_to_json()•array_to json()
select row_to_json (row (tabla1.columna1,tabla1.columna2)) from tabla1
![Page 6: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/6.jpg)
Introducción
JSON
Aun no cuenta con operadores ni índices para mejorar los tiempos de respuestas
![Page 7: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/7.jpg)
Desarrollo
Los mecanismos de extensión del gestor.
Agregar:•Tipos de datos•Operadores•Funciones•Indices
![Page 8: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/8.jpg)
Desarrollo
Los mecanismos de extensión del gestor.
Agregar:•Tipos de datos•Operadores•Funciones•Índices
Extensiones(SQL, C, python,etc.)
![Page 9: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/9.jpg)
Desarrollo
Extensiones en PostgreSQL
Dos archivos como mínimo
.control --- .SQL
• Incluirlas en directorio extension.
CREATE EXTESION nombre_de_extensión
![Page 10: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/10.jpg)
Desarrollo
Extensiones en PostgreSQL
.control # extensioncomment = 'extension …postgresql'default_version = '0.1‘superuser = true
•nombre--version.SQLCreate type …
![Page 11: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/11.jpg)
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
![Page 12: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/12.jpg)
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}
![Page 13: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/13.jpg)
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
![Page 14: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/14.jpg)
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);
![Page 15: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/15.jpg)
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;
![Page 16: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/16.jpg)
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;
![Page 17: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/17.jpg)
Desarrollo
Ejemplo:
select * from tabla2 where campo2='{"field1":"valor1","field2":10}'::json
![Page 18: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/18.jpg)
Desarrollo
Ejemplo:
select * from tabla2 where campo2='{"field1":"valor1","field2":10}'::json
ERROR: el operador no existe: json = json
![Page 19: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/19.jpg)
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}".
![Page 20: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/20.jpg)
Desarrollo
Ejemplo:
select * from tabla1 where campo2 @> '"field2":340'
Resultado: 340;"{"field1":"valor1","field2“:340}".
![Page 21: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/21.jpg)
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);
![Page 22: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/22.jpg)
Desarrollo
Índices:
Explain analyze select * from tabla1 wherecampo2 ='{"field1":"valor1","field2":34}'
"Total runtime: 14.135 ms"
![Page 23: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/23.jpg)
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"
![Page 24: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/24.jpg)
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.
![Page 25: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/25.jpg)
POSTGRESQL
Descarga de:
http://pgxn.org/dist/json_utils/
![Page 26: Operadores para json en pg 9.2](https://reader035.fdocuments.net/reader035/viewer/2022062419/5585e211d8b42a87608b4e59/html5/thumbnails/26.jpg)
“Operadores para JSON en PostgreSQL 9.2”
Anthony R. Sotolongo León([email protected])Daymel Bonne Solis