Operadores para json en pg 9.2

26
“Operadores para JSON en PostgreSQL 9.2” Anthony R. Sotolongo León([email protected]) Daymel Bonne Solis

description

extensión que agrega operadores para JSON en postgresql 9.2 , además de un indice HASH, Postgresql 9.2 extension with JSON operator and hash index

Transcript of Operadores para json en pg 9.2

Page 1: Operadores para json en pg 9.2

“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

Introducción

Septiembre 2012

9.2

Page 3: Operadores para json en pg 9.2

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

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

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

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

Desarrollo

Los mecanismos de extensión del gestor.

Agregar:•Tipos de datos•Operadores•Funciones•Indices

Page 8: Operadores para json en pg 9.2

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

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

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

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

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

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

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

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

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

Desarrollo

Ejemplo:

select * from tabla2 where campo2='{"field1":"valor1","field2":10}'::json

Page 18: Operadores para json en pg 9.2

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

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

Desarrollo

Ejemplo:

select * from tabla1 where campo2 @> '"field2":340'

Resultado: 340;"{"field1":"valor1","field2“:340}".

Page 21: Operadores para json en pg 9.2

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

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

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

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

POSTGRESQL

Descarga de:

http://pgxn.org/dist/json_utils/

Page 26: Operadores para json en pg 9.2

“Operadores para JSON en PostgreSQL 9.2”

Anthony R. Sotolongo León([email protected])Daymel Bonne Solis