Algunos conceptos sobre PostgreSQL

Transcripción

Algunos conceptos sobre PostgreSQL
POSTGRESQL 8.4
Una fotografía del nuevo release
Em anuel Calvo Franco
efranco@ siu.edu.ar
postgres.arg@ gm ail.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 SIU (Sistemas de Integración
Universitarios / 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! Vam os a m irar!
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 com pilar con m ingw y con V isual Studio 2005.
Tiene una serie de requerim ientos previos com o: instalación de A ctive 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
O tro ejem plo con sum ...
M ás ejem plos:
C láusula W ITH
Pertenece a la novedad de CTE (Com m on table Expressions).
Se convirtió en estándar en el 2008.
W ITH sim ple:
Explaneando el W ITH ':|
W ITH recursivo sim ple:
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;
W OW !
Restauración de dumps con
threads
pg_restore ­­m ulti­thread=5 dum p.sql dump.dump
pg_restore
Perform ance m ejorada
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 R AID
Q U ERY
1
2
3
Localización por D B
CREA TE D A TA BA SE nuevita
W ITH EN CO D IN G ’U TF8’
CO LLA TE ’en_G B.U TF8’
CTY PE ’en_G B.U TF8’;
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 | U nnest
em anuel=# select array_agg(valor) from w inpro w here year = 2010;
array_agg ­­­­­­­­­­­
{9,7,7}
(1 row )
em anuel=# select unnest(array_agg(valor)) from w inpro w here year = 2010;
unnest ­­­­­­­­
9
7
7
(3 row s)
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)
C rosstab (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
Capacitación Interna
Bibliografía
w w w .postgresql.org
 Presentaci
ón 8.4 de H itoshi H arada, D avid Fetter y Bruce M om jian
 M anual
8.4


Documentos relacionados