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