downloading - PostgreSQL Argentina
Transcription
downloading - PostgreSQL Argentina
POSTGRESQL 8.4 Una fotografía del nuevo release Emanuel Calvo Franco efranco@siu.edu.ar postgres.arg@gmail.com Disertante: Emanuel Calvo Franco Miembro de la comunidad del Arpug (Postgresql Argentina) y de la comunidad del AoSUG (Open Solaris). Actualmente trabajo como DBA y consultor en Bases de datos en el consorcio SIU (www.siu.edu.ar) dependiente del Ministerio de Educación. Sitio personal: www.emanuelcalvofranco.com.ar Trabajo con gestores como Postgresql, Mysql, Oracle, Informix, Sqlite, Hsql. Agenda Breve Brief. Porque utilizar Postgresql. Porque migrar? Compilación en diversas plataformas. Contribs Prestaciones nuevas. Algunas cosas para OLAP. Proyectos. Posibles prestaciones para 8.5 Postgresql Brief Base de datos Objeto-Relacional. Basada en el trabajo pionero de Stonebraker. Versionado de tres dígitos. <Mayor>.<Nuevas Prestaciones>.<Patches> 8.4.0. , 8.3.7, 8.2.11 ... Soporta varios sistemas operativos. Desarrollado integramente en standard C89. Seguridad transaccional. ¿Porque tengo que usar pgsql 8.4? (1) Reducción del TCO. Licencia BSD. Exelente soporte a través de las listas. Crecimiento de soporte comercial en Argentina y en otros países. Exelente documentación. Rendimiento acorde a prestaciones. Prestaciones a 0 costo. Extensibilidad. ¿Porque tengo que usar pgsql 8.4? (2) Full-text search MVCC PostGIS PL/* Por defecto es quizás la base de datos más segura del mercado. Compatibilidad con el estándar (créanme, es importante) Soporte Nativo de XML (--with-xml) One-click installer para varios sistemas operativos. 2-Phase Commit ¿Porque tengo que usar pgsql? (3) Particionado de tablas básico a través de herencia. RANGE HASH? Soporte de consultas complejas. Ventajas de determinadas extensiones de objetos: funciones polimórficas, herencia, operadores sobrecargados, identificadores de instancias (tuplas con OID o CTID) INHERITS Select * from tabla where ctid = $$(0,64)$$; Vistas Materializadas, implementadas a través de RULES. ¿Porqué tengo que migrar? (1) Mejora de rendimiento en herramientas de DBA (VACUUM y pg_restore). Mapa de Visibilidad. Mayor énfasis en BI y OLAP. Más objetos (OPERATOR FAMILY CLASS, entre otros). Mayor integración con Dtrace (+ probes) Más sencillez para la puesta a punto (adiós max_fsm_pages!). Características propias de bases privativas a 0 costo (window functions, recursive, etc). Mejora del Soporte a plataformas uindous. ¿Porqué tengo que migrar? (2) Mejoras al psql (cliente de consola). variadic functions Case-insensitive text (citext) Disparadores en llamadas a TRUNCATE Soporte para busqueda parcial en índices GIN (ex r- tree) y Full Text Search. ALTER SEQUENCE ... RESTART LIMIT (SELECT...) AS optional in SELECT Common Table Expressions & Recursive Queries ¿Porqué tengo que migrar ? (3) current_query() generate_subscripts() time-based generate_series() select * from generate_series(CURRENT_DATE::timestamp, (CURRENT_DATE+10)::timestamp,'1 day'::interval); array_agg() y unnest() Mejoras al Warm Standby Permisos a nivel de columna y para la acción TRUNCATE. quote_nullable() (convierte NULL en “NULL”) :o ¿Porqué tengo que migrar ? (4) Metodo de hash para las consultas que utilizan DISTINCT/ UNION/ INTERSECT/ EXCEPTION (ya no vendrán ordenadas, a menos que utlices ORDER BY). Mejoras en índices hash (en especial en columnas con ID). Parámetros de cantidad variable (variadic functions) Valores por defecto en parametros de funciones. CASE Control Structure in PL/pgSQL RETURN QUERY EXECUTE support in PL/pgSQL Foreign Data Wrapper (para uso con DBlink y PL/PRoxy) suppress_redundant_updates_trigger() Basta! Vamos a mirar! Compilación en Solaris con Sun Studio 12: A tener en cuenta: No se puede utilizar la librería readline. Debemos utilizar Gmake (no el make por defecto) Instalar Sun Studio (si es que queremos utilizarlo para compilar). ./configure --prefix=/usr/local/pgsql84 CC=/opt/SUNWspro/bin/cc 'CFLAGS=-xO3 -xarch=native -xspace -W0,-Lt -W2,-Rcond_elim -Xa -xildoff -xc99=none -xCC' --datadir=/usr/local/pgsql84/data84 --enable-dtrace --enable-cassert --with-perl --with-python --with-libxml --with-libxslt --without-readline Compilación en Debian y derivados. Instalar build-essentials En uindous Se puede compilar con mingw y con Visual Studio 2005. Tiene una serie de requerimientos previos como: instalación de Active Perl. Consideraciones luego de compilar Se crea automáticamente un directorio data. NO utilizarlo, es un template de cluster. Iniciar el cluster con initdb -D <directorio> Contribs incluidos (extensiones al kernel) Ya arrancó! Nuevas asignaciones de permisos: Por columna: GRANT SELECT (year), INSERT (valor), UPDATE (otrovalor) ON tabla TO usuario; Para truncate: GRANT TRUNCATE ON tabla TO usuario; Funciones internas del windowing functions: row_number() Rank() dense_rank() lag() lead() dense_rank() first_value() percent_rank() last_value() cume_dist() nth_value() ntile() Windowing Functions - Sum + windowing funct. rank() GAP Otro ejemplo con sum... Más ejemplos: Cláusula WITH Pertenece a la novedad de CTE (Common table Expressions). Se convirtió en estándar en el 2008. WITH simple: Explaneando el WITH ':| WITH recursivo simple: With recursivo complejo con EXPLAIN With recursive (Hausdorf-Besicovich) WITH RECURSIVE Z(Ix, Iy, Cx, Cy, X, Y, I) AS ( SELECT Ix, Iy, X::float, Y::float, X::float, Y::float, 0 FROM (SELECT -2.2 + 0.031 * i, i FROM generate_series(0,101) AS i) AS xgen(x,ix) CROSS JOIN (SELECT -1.5 + 0.031 * i, i FROM generate_series(0,101) AS i) AS ygen(y,iy) UNION ALL SELECT Ix, Iy, Cx, Cy, X * X - Y * Y + Cx AS X, Y * X * 2 + Cy, I + 1 FROM Z WHERE X * X + Y * Y < 16::float AND I < 27 ), ...continuing (2) --FILTER Zt (Ix, Iy, I) AS ( SELECT Ix, Iy, MAX(I) AS I FROM Z GROUP BY Iy, Ix ORDER BY Iy, Ix ) --DISPLAY SELECT array_to_string( array_agg( SUBSTRING( ' .,,,-----++++%%%%@@@@#### ', GREATEST(I,1), 1 ) ), '' ) FROM Zt GROUP BY Iy ORDER BY Iy; WOW! Restauración de dumps con threads pg_restore --multi-thread=5 dump.sql dump.dump pg_restore Performance mejorada posix_fadvice ( pre solicitud de I/O para discos en RAID) VACUUM solo sobre la data modificada. Autoconfiguración del max_fsm_pages y max_fsm_relations (Free Space Map). Anteriormente, podiamos ver si necesitabamos aumentar este parámetro con VACUUM ANALYZE (HINT: ...) Pre-fetch I/O RAID QUERY 1 2 3 Localización por DB CREATE DATABASE nuevita WITH ENCODING ’UTF8’ COLLATE ’en_GB.UTF8’ CTYPE ’en_GB.UTF8’; Mejoras al PL/pgsql y funciones CREATE FUNCTION f101 (int, int DEFAULT 9) .... No más IF -END IF. CASE se utilizará en estos casos, inclusive mejorado para soportar BETWEEN. RETURNS TABLE (Alias para SETOF) Array_Agg | Unnest emanuel=# select array_agg(valor) from winpro where year = 2010; array_agg ----------{9,7,7} (1 row) emanuel=# select unnest(array_agg(valor)) from winpro where year = 2010; unnest -------9 7 7 (3 rows) N° parametros variable CREATE OR REPLACE FUNCTION sumito(VARIADIC v int[]) RETURNS int AS $$ DECLARE s int; i int; BEGIN s:=0; FOR i IN SELECT generate_subscripts(v,1) LOOP s := s + i; END LOOP; RETURN s; END; $$ LANGUAGE 'plpgsql'; Algunas 'cosillas' para OLAP... Instalar un contrib... Debemos tener en cuenta que debemos compilar con lo que necesite el contrib que querramos utilizar. Xml2 → libxml Ejemplo con tablefunc= # cd contrib # gmake #gmake install $ psql -Upostgres <base> < tablefunc.sql Connectby (Jerarquía) emanuel=# SELECT * FROM connectby('connectby_tree', 'keyid', 'parent_keyid', 'row2', 0, '-') AS t(keyid text, parent_keyid text, level int, branch text);emanuel-# keyid | parent_keyid | level | branch -------+--------------+-------+---------------row2 | | 0 | row2 row4 | row2 | 1 | row2-row4 row6 | row4 | 2 | row2-row4-row6 row5 | row2 | 1 | row2-row5 (4 rows) Crosstab (cube) Proyectos interesantes a nivel comunidad Certificación Oficial. Empresas sponsor que se dedican integramente al desarrollo sobre Postgresql (Enterprise, Command Prompt, PGX) En Argentina: Posible certificación a nivel nacional. Fuerte calendario de capacitaciones en el interior y charlas. Posibles prestaciones para 8.5 Permisos a nivel de tupla con SE-Postgresql Consultas de solo lectura para archivado continuo en esclavos (hot standby) Streaming de archivado continuo (log streaming) Index-only scans (covering index) Simplified table partitioning Automatically updatable views Vistas con CHECK OPTION Bibliografía www.postgresql.org Presentación 8.4 de Hitoshi Harada, David Fetter y Bruce Momjian Manual 8.4