2. PostgreSQL 9.2
Fecha de lanzamiento: 10 Sep. 2012
El proyecto PostgreSQL esta
acostumbrandonos a publicar un
release mayor cada año :)
Y las mejoras como siempre son
sustanciales.
PostgreSQL 9.2
2/16
4. PostgreSQL 9.2
¿Bases de datos muy grandes?
Soporte comprobado de hasta 64 cores.
●
Esto es muy importante porque PostgreSQL usa
1 core por conexión, mediciones extraoficiales
indican que PostgreSQL administra
eficientemente un nivel de concurrencia de 4 a 6
veces la cantidad de cores que se le asignan.
PostgreSQL 9.2
4/16
5. PostgreSQL 9.2
¿Bases de datos muy grandes?
●Index-only Scan
Esto significa....al leer data de tuplas que son parte de un
indice se realiza un “index scan”, el problema es que cuando
se obtiene un set de datos en una lectura se puede haber
modificado datos y los indices apuntan a datos modificados o
inexistentes, solo se puede comprobar el resultado
accediendo a los datos y comprobandolos.
Si se considera que la tabla no será áltamente manipulada,
activar esta nueva funcionalidad nos permite acceder al
menos 5 veces más rápido a los datos ya que no se accede a
la corroboración de los datos en si.
PostgreSQL 9.2
5/16
6. PostgreSQL 9.2
¿Bases de datos muy grandes?
Mejoras en:
●
● Administración de bloqueos.
● Se ha llegado a 350,000 lecturas por segundo.
● Procesos de escritura más eficientes.
● Probado hasta 14,000 grabaciones por segundo.
PostgreSQL 9.2
6/16
7. PostgreSQL 9.2
¿Necesidad de Redundancia y Escalabilidad?
●9.0 Replicación Asíncrona
●9.1 Replicación Síncrona
..... y ahora Replicación en Cascada
PostgreSQL 9.2
7/16
8. PostgreSQL 9.2
¿Necesidad de Redundancia y Escalabilidad?
OjO:
●Es asíncrono
●Funciona al estilo de la replicación implementada
en la versión 9.0 copiando los archivos de WAL
PostgreSQL 9.2
8/16
9. PostgreSQL 9.2
Nuevos tipos de datos!!!!
Range Types:
Representan rangos de valores, se puede usar con
números enteros (normales y big), numéricos, horas y
fechas, pero podemos crear los nuestros propios
usando “create type”.
CREATE TABLE reservation (room int, during tsrange);
INSERT INTO reservation VALUES
(1108, '[2010-01-01 14:30, 2010-01-01 15:30)');
PostgreSQL 9.2
9/16
10. PostgreSQL 9.2
Nuevos tipos de datos!!!!
Range Types:
@> contains range
int4range(2,4) @> int4range(2,3) <--true
@> contains element
'[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp <--true
<@ range is contained by
int4range(2,4) <@ int4range(1,7) <--true
<@ element is contained by
42 <@ int4range(1,7) <--false
PostgreSQL 9.2
10/16
11. PostgreSQL 9.2
Nuevos tipos de datos!!!!
JSON:
Ahora PostgreSQL almacena tipos de datos JSON, estos datos son
validados para ser aceptados y luego son almacenados como texto.
Tenemos 2 funciones de apoyo:
● array_to_json(anyarray [, pretty_bool])
● row_to_json(record [, pretty_bool])
PostgreSQL 9.2
11/16
12. PostgreSQL 9.2
Y con el soporte de Json viene PL/V8
Una nueva extensión para programar funciones
en javascript.
CREATE OR REPLACE FUNCTION plv8_test(keys text[], vals text[]) RETURNS
text AS $$
var o = {};
for(var i=0; i<keys.length; i++){
o[keys[i]] = vals[i];
}
return JSON.stringify(o);
$$ LANGUAGE plv8 IMMUTABLE STRICT;
SELECT plv8_test(ARRAY['name', 'age'], ARRAY['Tom', '29']);
PostgreSQL 9.2
12/16
13. PostgreSQL 9.2
PL/Coffee
CREATE OR REPLACE FUNCTION simple_search_inventory(param_search json)
RETURNS json AS
$$
o = JSON.parse(param_search);
/** Take a json search request and output a json dataset **/
rs = plv8.execute("SELECT prod_code, prod_name FROM inventory WHERE prod_name ILIKE $1 LIMIT $2
OFFSET($3 - 1)*$2", [o.prod_name_search, o.num_per_page, o.page_num]);
return JSON.stringify(rs);
$$
LANGUAGE plv8 VOLATILE;
CREATE OR REPLACE FUNCTION simple_search_inventory(param_search json)
RETURNS json AS
$$
o = JSON.parse(param_search)
## Take a json search request and output a json dataset
rs = plv8.execute("SELECT prod_code, prod_name FROM inventory WHERE prod_name ILIKE $1 LIMIT $2
OFFSET ($3 - 1)*$2", [o.prod_name_search, o.num_per_page, o.page_num])
return JSON.stringify(rs)
$$
LANGUAGE plcoffee VOLATILE;
PostgreSQL 9.2
13/16
14. PostgreSQL 9.2
Una nueva herramienta para los DBAs
pg_stat_statement para descubrir cuantas veces
un query ha sido ejecutado:
=#SELECT * FROM words WHERE word= 'foo';
word
(0 ligne)
=# SELECT * FROM words WHERE word= 'bar';
word
Bar
=#select * from pg_stat_statements where query like '%words where%';
[ RECORD 1 ]+
userid | 10
dbid | 16384
query | SELECT * FROM words WHERE word= ?;
calls | 2 PostgreSQL 9.2
total_time | 142.314 14/16
16. Los invitamos a probar esta nueva
versión......GRACIAS!!!!!
Ernesto Quiñones Azcárate
Regional Press Contact
pe@postgresql.org
PostgreSQL 9.2
16/16