Estado del Desarrollo de PostgreSQL-9.0

34
 FLISOL 2010 Estado del desarrollo de PostgreSQL-9.0 Ing. Marcos Ortíz Valmaseda [email protected]

Transcript of Estado del Desarrollo de PostgreSQL-9.0

Page 1: Estado del Desarrollo de PostgreSQL-9.0

  

FLISOL 2010Estado del desarrollo de

PostgreSQL-9.0

Ing. Marcos Ortíz [email protected]

Page 2: Estado del Desarrollo de PostgreSQL-9.0

  

Sumario PostgreSQL Características del gestor (Versión-8.4) 9.0 !!!! Conclusiones

Page 3: Estado del Desarrollo de PostgreSQL-9.0

  

PostgreSQL Considerado como el SGBD de código

abierto más avanzado del mundo + de 20 años de desarrollo Ciclo de desarrollo bien definido estilo

FreeBSD Committers Dev Process Modelo de desarrollo viable

(Empresas/Comunidad)

Page 4: Estado del Desarrollo de PostgreSQL-9.0

  

PostgreSQL Basado en el trabajo de Stonebraker Desarrollado en C89 (ANSI C) Soporte excelente en las listas Excelente documentación Sumamente adaptable y extensible Guiado por los estándares

Page 5: Estado del Desarrollo de PostgreSQL-9.0

  

Características 100 % ACID Soporte para triggers,vistas, procedimientos

almacenados, funciones y tipos de datos definidos por el usuario, búsqueda de textos completos, etc

Corre en + de 30 plataformas incluyendo Linux, UNIX, HP-UX, Solaris, BSD´s Windows,etc

Licencia BSD (Costo es saber usarlo)

Page 6: Estado del Desarrollo de PostgreSQL-9.0

  

Características Soporte para bases de datos georeferenciales

(PostGIS) Pueden escribir sus funciones en + de 10

lenguajes (PL/pgSQL, PL/Ruby, PL/R, C/C++, PL/Python, PL/Perl, PL/Java)

Prionero en los conceptos MVCC WAL (Escritura adelantada de logs) Tipado avanzado de datos (CHECK, ENUM,

DOMAIN)

Page 7: Estado del Desarrollo de PostgreSQL-9.0

  

PostgreSQL-8.4 Nueva implementación del FSM Funciones ventana (Data WareHouse/OLAP

Apps) CTE´s (Cláusula WITH) Consultas recursivas (WITH recursivo !!!!) Permisos por columnas

Page 8: Estado del Desarrollo de PostgreSQL-9.0

  

PostgreSQL-8.4 Estructura de control CASE Comando TABLE Argumentos de funciones variables Argumentos con valores por defecto Triggers en TRUNCATE

Page 9: Estado del Desarrollo de PostgreSQL-9.0

  

PostgreSQL-8.4 Mejoras del soporte a la plataforma Windows Mejoras en el rendimiento de las DBA Tool

(VACUUM) Restauración paralela de las bases de datos

(pg_restore -j #) LIMIT puedes aceptar subquerys Múltiples mejoras a psql (\dt+; \ef)

Page 10: Estado del Desarrollo de PostgreSQL-9.0

  

Ejemplos Permisos por columnas:

GRANT SELECT (year),INSERT (valor), UPDATE(otrovalor) ON tabla TO usuario;

Para TRUNCATE:

GRANT TRUNCATE ON tabla TO usuario;

Page 11: Estado del Desarrollo de PostgreSQL-9.0

  

Ejemplos Funciones ventana:

SELECT year, sum(valor) OVER (PARTITION BY year) FROM winpro LIMIT 10;

RETURN TABLE (alias para SETOF): Parámetros por defecto:

CREATE FUNCTION f101 (int, int DEFAULT 9)

Page 12: Estado del Desarrollo de PostgreSQL-9.0

  

Ejemplos CTE ( WITH):

WITH epic_films as (SELECT film_id, array_agg(first_name ||' '||

last_name) as featuring FROM film join film_actor using (film_id) JOIN actor

USING (actor_id) GROUP BY film_id )

SELECT * FROM epic_films WHERE array_upper(featuring,1) > 12 ;

Page 13: Estado del Desarrollo de PostgreSQL-9.0

  

Ejemplos CASE:

CREATE FUNCTION kidsafe(v_title text) RETURNS text

AS $$

BEGIN

CASE (select rating from film where title = v_title)

WHEN 'NC-17','R' THEN RETURN 'no';

WHEN 'PG-13' THEN RETURN 'maybe';

WHEN 'PG','G' THEN RETURN 'yes';

END CASE;

END; $$ LANGUAGE plpgsql;

Page 14: Estado del Desarrollo de PostgreSQL-9.0

  

Ejemplos LIMIT basado en una subconsulta:

SELECT title FROM film ORDER BY random()

LIMIT (SELECT count(*)/10 FROM film WHERE rating = 'G');

Page 15: Estado del Desarrollo de PostgreSQL-9.0

  

9.0 !!! Se introdujo un nuevo cambio en el proceso

de desarrollo: http://commitfest.postgresql.org

La versión actual es la 9.0alpha5 Cambió de 8.5 a 9.0 por las características

tan radicales que trae (Hot Standby/Streaming Replication)

Page 16: Estado del Desarrollo de PostgreSQL-9.0

  

Planes FuturosHot Standby … replicación sincrónica … exclusión

de restricciones … EXPLAIN con resultados en JSON/XML/YAML … Windows 64 bits … CTE´s

modificables … mejora en los permisos … GRANT ON ALL/DEFAULT … mejoras en el SQL

.. Agregados ordenados … Cláusula DO() … mejoras de rendimiento … nuevo

LISTEN/NOTIFY … mejoras a PL/Perl y PL/Python

Page 17: Estado del Desarrollo de PostgreSQL-9.0

  

Futuro ???Hot Standby … replicación sincrónica … exclusión

de restricciones … EXPLAIN con resultados en JSON/XML/YAML … Windows 64 bits … CTE´s

modificables … mejora en los permisos … GRANT ON ALL/DEFAULT … mejoras en el SQL

.. Agregados ordenados … Cláusula DO() … mejoras de rendimiento … nuevo

LISTEN/NOTIFY … mejoras a PL/Perl y PL/Python

Page 18: Estado del Desarrollo de PostgreSQL-9.0

  

Plan de Desarrollo 9.0 RC / Período de desarrollo 1ro de Julio del 2009CommitFest 1/Período de desarrollo

Julio 15 – Agosto 15 2009

CommitFest 2/Período de desarrollo

Sept. 15 – Oct. 15 2009

CommitFest 3/Período de desarrollo

Nov. 15 – Dic. 15 2009

CommitFest 4 Enero 15 2010Limpieza / Integración y Revisión (2-4 semanas)

Febrero 15 2010

Liberación del Beta / Pruebas al beta

2-3 meses

Liberación Final 9.0/ Comienzo 9.1

Junio-Julio 2010

Page 19: Estado del Desarrollo de PostgreSQL-9.0

  

9.0 !!! Rendimiento Lenguajes Procedurales Triggers Administración/Seguridad

Page 20: Estado del Desarrollo de PostgreSQL-9.0

  

Rendimiento Borrado de JOINS sin sentido Parche por Robert Haas Permite remover JOINs redundantes del plan

de consultas para la optimización y mejora de las mismas

Page 21: Estado del Desarrollo de PostgreSQL-9.0

  

Rendimiento New VACUUM FULL Parche por Itagaki Takagiro Reescrito el comando VACUUM FULL La nueva versión trabaja igual que CLUSTER

USING ctid o reescribiendo en ALTER TABLE. Éste puede ser más ràpido que éstos, sobre tdo si tenemos muchas tuplas muertas y no son interesa el orden físico de las mismas

Page 22: Estado del Desarrollo de PostgreSQL-9.0

  

Lenguajes Procedurales Bloques de código anónimos (DO) Parche por Petr Jelinek Agrega el soporte para bloques anónimos de

código escrito en lenguages procedurales.

Page 23: Estado del Desarrollo de PostgreSQL-9.0

  

Lenguajes ProceduralesDO $DECLARE r record;

BEGIN FOR r IN SELECT table_schema, table_name FROM

information_schema.tables WHERE table_type = ‘VIEW’ AND table_schema =

‘public’ LOOP EXECUTE ‘GRANT ALL ON ’ ||

quote_ident(r.table_schema) || ‘.’ || quote_ident(r.table_name) || ‘TO webuser’;

END LOOP;END$$;

Page 24: Estado del Desarrollo de PostgreSQL-9.0

  

Lenguajes Procedurales Mejoras a PL/Python Parchesde muchos contribuidores Soporte para Python-3.1 Soporte para bloques anónimos de código Conversión de tipos de datos mejorada

Page 25: Estado del Desarrollo de PostgreSQL-9.0

  

Lenguajes Procedurales Mejoras a PL/Perl Parchesde muchos contribuidores Soporte para contexto de errores Soporte para bloques anónimos de código Refactorización hecha sobre plperl.c Agregadas funciones útiles como quote_literal,

encode_bytea, etc

Page 26: Estado del Desarrollo de PostgreSQL-9.0

  

Triggers Triggers en columnas Sólo se disparan si ciertas columnas son

modificadas Ayudan a resolver problemas de TRIGGERS

circulares.

Page 27: Estado del Desarrollo de PostgreSQL-9.0

  

Triggers Triggers condicionales

Lo mejor es un ejemplo:

CREATE TRIGGER test_u

AFTER UPDATE ON test

FOR EACH ROW

WHEN (NEW.i <= 0)

EXECUTE PROCEDURE test_u();

Page 28: Estado del Desarrollo de PostgreSQL-9.0

  

Lenguajes Procedurales EXPLAIN en formatos legibles (XML, JSON,

YAML) Muy útil para herramientas de monitoreo y

para la visualización gráfica de los planes de ejecución

Ejemplo:

EXPLAIN (FORMAT XML) SELECT * FROM pg_class;

Page 29: Estado del Desarrollo de PostgreSQL-9.0

  

Administración/Seguridad GUC´s por usuario, por base de datos Parches por Álvaro Herrera Permite el cambio de las GUC´s por defecto

de un modo más complejo y útil

Page 30: Estado del Desarrollo de PostgreSQL-9.0

  

Administración/Seguridad8.4:

ALTER DATABASE <database> SET <guc> TO <value>

ALTER ROLE <role> SET <guc> to <value>

9.0 agrega:

ALTER ROLE <role> IN DATABASE <database> SET <guc> TO <value>

Page 31: Estado del Desarrollo de PostgreSQL-9.0

  

Bibliografía Blog de Hubert Lubaczewski:

http://www.depesz.com Sitio Oficial del proyecto:

http://www.postgresql.org http://planetpostgresql.org http://www.postgresql-es.org http://wiki.postgresql.org

Page 32: Estado del Desarrollo de PostgreSQL-9.0

  

Bibliografía Peter Eisentraut: Most Wanted -FOSDEM 2010 Dave Page: Developments in PostgreSQL-9.0 –

FOSDEM 2010 Josh Berkus: PostgreSQL Development TODAY –

FOSDEM 2010 David Fetter: Windowing Functions – PgCon 2009 Robert Treat: PostgreSQL-8.4 Talk – PgCon 2009

Page 34: Estado del Desarrollo de PostgreSQL-9.0

  

ComentariosSugerencias