Estado del Desarrollo de PostgreSQL-9.0

Post on 07-Jul-2015

329 views 5 download

Transcript of Estado del Desarrollo de PostgreSQL-9.0

  

FLISOL 2010Estado del desarrollo de

PostgreSQL-9.0

Ing. Marcos Ortíz Valmasedamlortiz@uci.cu

  

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

  

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)

  

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

  

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)

  

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)

  

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

  

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

  

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)

  

Ejemplos Permisos por columnas:

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

Para TRUNCATE:

GRANT TRUNCATE ON tabla TO usuario;

  

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)

  

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 ;

  

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;

  

Ejemplos LIMIT basado en una subconsulta:

SELECT title FROM film ORDER BY random()

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

  

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)

  

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

  

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

  

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

  

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

  

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

  

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

  

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.

  

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$$;

  

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

  

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

  

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

modificadas Ayudan a resolver problemas de TRIGGERS

circulares.

  

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();

  

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;

  

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

  

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>

  

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

  

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

  

Listas pgsql-es-ayuda@postgresql.org pgsql-performance@postgresql.org pgsql-sql@postgresql.org pgsql-hackers@postgresql.org pgsql-announce@postgresql.org pgsql-es-fomento@postgresql.org

  

ComentariosSugerencias