“Operadores para JSON   en PostgreSQL 9.2”Anthony R. Sotolongo León(asotolongo@uci.cu)Daymel Bonne Solis
Introducción                    9.2               Septiembre 2012
Introducción                    9.2 •Tipo de rango. •Replicación en cascada. •Index-only scans •PLV8 •JSON
IntroducciónJSONDos funciones:•row_to_json()     select row_to_json (tabla1) from tabla1•array_to json()
IntroducciónJSONDos funciones:•row_to_json()     select row_to_json (row                   (tabla1.columna1,tabla1.columna...
IntroducciónJSONAun no cuenta con operadores ni índices paramejorar los tiempos de respuestas                  
DesarrolloLos mecanismos de extensión del gestor.Agregar:•Tipos de datos•Operadores•Funciones•Indices
DesarrolloLos mecanismos de extensión del gestor.Agregar:•Tipos de datos•Operadores•Funciones•Índices  Extensiones(SQL, C,...
DesarrolloExtensiones en PostgreSQLDos archivos como mínimo                .control --- .SQL• Incluirlas en directorio ext...
DesarrolloExtensiones en PostgreSQL.control# extensioncomment = extension …postgresqldefault_version = 0.1‘superuser = tru...
DesarrolloExtensiones en PostgreSQLTipo de dato HstoreOperadores:  hstore || hstore    Concatena     dos     atributos    ...
DesarrolloJSON:Fue especificado por Douglas Crockford comouna notación de datos, descrito en la RFC 4627,para el mismo no ...
DesarrolloJSON:Operadores propuestos=Verifica si son iguales enVerifica si son datos los              =                   ...
DesarrolloOperadores:CREATE OPERATOR ? (leftarg = json,rightarg = character varying,procedure = contains);CREATE OPERATOR ...
DesarrolloFunciones:CREATE OR REPLACE FUNCTION equals(doc1 json, doc2 json)RETURNS boolean AS$BODY$declarebegin if ( $1::c...
DesarrolloEjemplo:CREATE TABLE tabla2( campo1 serial NOTNULL, campo2 json);with datos as(select{"field1":"valor1","field2"...
DesarrolloEjemplo:select * from tabla2 where campo2={"field1":"valor1","field2":10}::json
DesarrolloEjemplo:select * from tabla2 where campo2={"field1":"valor1","field2":10}::jsonERROR: el operador no existe: jso...
DesarrolloEjemplo:select * from tabla2 where campo2={"field1":"valor1","field2":10}::jsonDespués de instalada la extensión...
DesarrolloEjemplo:select * from tabla1 where campo2 @>"field2":340Resultado: 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...
DesarrolloÍndices:Explain analyze select * from tabla1 wherecampo2 ={"field1":"valor1","field2":34}"Total runtime: 14.135 ...
DesarrolloÍndices:CREATE INDEX test_index_json ON tabla1USING hash(campo2);Explain analyze select * from tabla1 wherecampo...
POSTGRESQLConclusiones•Se puede apreciar la capacidad de extensibilidad delgestor.•Se define una extensión con un conjunto...
POSTGRESQLDescarga 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
Upcoming SlideShare
Loading in …5
×

Operadores para json en pg 9.2

1,005 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Operadores para json en pg 9.2

  1. 1. “Operadores para JSON en PostgreSQL 9.2”Anthony R. Sotolongo León(asotolongo@uci.cu)Daymel Bonne Solis
  2. 2. Introducción 9.2 Septiembre 2012
  3. 3. Introducción 9.2 •Tipo de rango. •Replicación en cascada. •Index-only scans •PLV8 •JSON
  4. 4. IntroducciónJSONDos funciones:•row_to_json() select row_to_json (tabla1) from tabla1•array_to json()
  5. 5. IntroducciónJSONDos funciones:•row_to_json() select row_to_json (row (tabla1.columna1,tabla1.columna2)) from tabla1•array_to json()
  6. 6. IntroducciónJSONAun no cuenta con operadores ni índices paramejorar los tiempos de respuestas 
  7. 7. DesarrolloLos mecanismos de extensión del gestor.Agregar:•Tipos de datos•Operadores•Funciones•Indices
  8. 8. DesarrolloLos mecanismos de extensión del gestor.Agregar:•Tipos de datos•Operadores•Funciones•Índices Extensiones(SQL, C, python,etc.)
  9. 9. DesarrolloExtensiones en PostgreSQLDos archivos como mínimo .control --- .SQL• Incluirlas en directorio extension. CREATE EXTESION nombre_de_extensión
  10. 10. DesarrolloExtensiones en PostgreSQL.control# extensioncomment = extension …postgresqldefault_version = 0.1‘superuser = true•nombre--version.SQLCreate type …
  11. 11. DesarrolloExtensiones en PostgreSQLTipo de dato HstoreOperadores: 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
  12. 12. DesarrolloJSON:Fue especificado por Douglas Crockford comouna notación de datos, descrito en la RFC 4627,para el mismo no existe operadores estándares.JSON ejemplo ={“id": "file", "value": “archivo.txt}
  13. 13. DesarrolloJSON:Operadores propuestos=Verifica si son iguales enVerifica si son datos los = estructura y iguales enJSON estructura y datos los JSON? ? Pregunta si el tipo de datoPregunta si el tipo de dato tiene llave específica. tiene una una llaveespecífica. @> Pregunta si el JSON@> Pregunta si el JSON contiene un par llave/valor contiene un par llave/valor
  14. 14. DesarrolloOperadores: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);
  15. 15. DesarrolloFunciones:CREATE OR REPLACE FUNCTION equals(doc1 json, doc2 json)RETURNS boolean AS$BODY$declarebegin if ( $1::character varying=$2::character varying ) then return true; else return false; end if;end;$BODY$ LANGUAGE plpgsql VOLATILE;
  16. 16. DesarrolloEjemplo: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;
  17. 17. DesarrolloEjemplo:select * from tabla2 where campo2={"field1":"valor1","field2":10}::json
  18. 18. DesarrolloEjemplo:select * from tabla2 where campo2={"field1":"valor1","field2":10}::jsonERROR: el operador no existe: json = json
  19. 19. DesarrolloEjemplo:select * from tabla2 where campo2={"field1":"valor1","field2":10}::jsonDespués de instalada la extensiónCreate extension jsonutils;Descarga:http://pgxn.org/dist/json_utils/Resultado: 11;"{"field1":"valor1","field2":10}".
  20. 20. DesarrolloEjemplo:select * from tabla1 where campo2 @>"field2":340Resultado: 340;"{"field1":"valor1","field2“:340}". 
  21. 21. 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);
  22. 22. DesarrolloÍndices:Explain analyze select * from tabla1 wherecampo2 ={"field1":"valor1","field2":34}"Total runtime: 14.135 ms"
  23. 23. 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" 
  24. 24. POSTGRESQLConclusiones•Se puede apreciar la capacidad de extensibilidad delgestor.•Se define una extensión con un conjunto deoperadores y funciones que mejoran el trabajo con eltipo de dato JSON•Se agrega el índice de tipo “hash”, y se mostraronejemplos de su utilización.
  25. 25. POSTGRESQLDescarga de:http://pgxn.org/dist/json_utils/
  26. 26. “Operadores para JSON en PostgreSQL 9.2”Anthony R. Sotolongo León(asotolongo@uci.cu)Daymel Bonne Solis

×