FLISOL 2010
 Estado del desarrollo de
       PostgreSQL-9.0


Ing. Marcos Ortíz Valmaseda
       mlortiz@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 Futuros
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
                   
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 2009
CommitFest 1/Período de             Julio 15 – Agosto 15 2009
desarrollo
CommitFest 2/Período de             Sept. 15 – Oct. 15 2009
desarrollo
CommitFest 3/Período de             Nov. 15 – Dic. 15 2009
desarrollo
CommitFest 4                        Enero 15 2010
Limpieza / Integración y Revisión   Febrero 15 2010
(2-4 semanas)
Liberación del Beta / Pruebas al    2-3 meses
beta
Liberación   Final 9.0/ Comienzo
                                    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 Procedurales
  DO $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/Seguridad
  8.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




                      
Comentarios
    Sugerencias




       

Estado del Desarrollo de PostgreSQL-9.0

  • 1.
    FLISOL 2010 Estadodel desarrollo de PostgreSQL-9.0 Ing. Marcos Ortíz Valmaseda mlortiz@uci.cu    
  • 2.
    Sumario  PostgreSQL  Características del gestor (Versión-8.4)  9.0 !!!!  Conclusiones    
  • 3.
    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)    
  • 4.
    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    
  • 5.
    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)    
  • 6.
    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)    
  • 7.
    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    
  • 8.
    PostgreSQL-8.4  Estructura de control CASE  Comando TABLE  Argumentos de funciones variables  Argumentos con valores por defecto  Triggers en TRUNCATE    
  • 9.
    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)    
  • 10.
    Ejemplos  Permisos por columnas: GRANT SELECT (year),INSERT (valor), UPDATE(otrovalor) ON tabla TO usuario;  Para TRUNCATE: GRANT TRUNCATE ON tabla TO usuario;    
  • 11.
    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)    
  • 12.
    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 ;    
  • 13.
    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;    
  • 14.
    Ejemplos  LIMIT basado en una subconsulta: SELECT title FROM film ORDER BY random() LIMIT (SELECT count(*)/10 FROM film WHERE rating = 'G');    
  • 15.
    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)    
  • 16.
    Planes Futuros 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    
  • 17.
    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    
  • 18.
    Plan de Desarrollo 9.0RC / Período de desarrollo 1ro de Julio del 2009 CommitFest 1/Período de Julio 15 – Agosto 15 2009 desarrollo CommitFest 2/Período de Sept. 15 – Oct. 15 2009 desarrollo CommitFest 3/Período de Nov. 15 – Dic. 15 2009 desarrollo CommitFest 4 Enero 15 2010 Limpieza / Integración y Revisión Febrero 15 2010 (2-4 semanas) Liberación del Beta / Pruebas al 2-3 meses beta Liberación   Final 9.0/ Comienzo   Junio-Julio 2010
  • 19.
    9.0 !!!  Rendimiento  Lenguajes Procedurales  Triggers  Administración/Seguridad    
  • 20.
    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    
  • 21.
    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    
  • 22.
    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.    
  • 23.
    Lenguajes Procedurales DO $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$$;   
  • 24.
    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    
  • 25.
    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    
  • 26.
    Triggers  Triggers en columnas  Sólo se disparan si ciertas columnas son modificadas  Ayudan a resolver problemas de TRIGGERS circulares.    
  • 27.
    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();    
  • 28.
    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;    
  • 29.
    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    
  • 30.
    Administración/Seguridad 8.4: ALTERDATABASE <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>    
  • 31.
    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    
  • 32.
    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    
  • 33.
    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    
  • 34.
    Comentarios Sugerencias