Operadores para json en pg 9.2
Upcoming SlideShare
Loading in...5
×
 

Operadores para json en pg 9.2

on

  • 562 views

extensión que agrega operadores para JSON en postgresql 9.2 , además de un indice HASH,

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

Statistics

Views

Total Views
562
Views on SlideShare
562
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Operadores para json en pg 9.2 Operadores para json en pg 9.2 Presentation Transcript

  • “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.columna2)) from tabla1•array_to json()
  • 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, python,etc.)
  • DesarrolloExtensiones en PostgreSQLDos archivos como mínimo .control --- .SQL• Incluirlas en directorio extension. CREATE EXTESION nombre_de_extensión
  • DesarrolloExtensiones en PostgreSQL.control# extensioncomment = extension …postgresqldefault_version = 0.1‘superuser = true•nombre--version.SQLCreate type …
  • 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
  • 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}
  • 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
  • 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);
  • 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;
  • 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;
  • 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: json = json
  • 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}".
  • 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 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" 
  • 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.
  • 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