operadores para json en pg 9.2

Post on 21-Jun-2015

511 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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

“Operadores para JSON en PostgreSQL 9.2”

Anthony R. Sotolongo León(asotolongo@uci.cu)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(asotolongo@uci.cu)Daymel Bonne Solis

top related