Charla sobre Postgresql para las Jornadas Regionales de Software

Anuncio
Charla sobre Postgresql
para las Jornadas Regionales de Software Libre
Emanuel Calvo Franco
Correo Argentino www.postgres­arg.org
Año 2008
Hecho con Open Office ­ impress
Presentacion

Es el SGBD Open Source mas potente del mercado.

Posee mas de 20 años de desarrollo.

Licencia BSD de Berkeley.


Es ACID.

Es segura.

Esta en la vanguardia de la investigacion en al tecnologia transaccional.
Tiene alternativas comerciales de muchisima calidad. Ej: EnterpriseDB (IBM), CyberTech(Alemania), etc.
Presentacion II

Relacional y Orientada a Objetos.

Cliente/servidor

Extensible


Multiples conectores desde lenguajes de programacion.
Lenguaje procedimental propio (PL/pgsql) y extendido (PL/PERL, PL/PYTHON, PL/JAVA, PL/RUBY...)
Presentacion III


Puede conectarse por OBDC, OLE DB y JBDC.
Especial para sistemas operativos basados en BSD.
history!
1977­1985 Michael Stonebraker Inicia postgreSQL como Ingres en la Universidad de Berkeley, California.
1986, comprado por Computer Associates..
1989, Liberada la primera versión de postgreSQL como Postgres.
1994­95 dos estudiantes graduados de Berkeley Jolly Chen y Andrew Yu añaden SQL a Postgres y lo llaman Postgres95.
1996, (1000 colaboradores) Se decidió quitar el 95 al nombre para liberarse de la cronología y nace PostgreSQL.
Caracteristicas Ppales.

El modelo es de cliente/servidor (hoy en dia el mas comun).



Esto permite mayor control en los servidores.
Su lenguaje procedimental es muy similar al PL de Oracle, logrando una migracion mas amena.
Se adapta estrictamente a los standares SQL:
2003.
Caracteristicas Ppales. II


Posee WAL (Write Ahead LOG).

Herencia de tablas.


Posee MVCC (Multi­Version Concurrency Control).
Puntos de recuperacion avanzados (savepoints, replicacion asincronica)
Optimizador de consultas.
Caracteristicas Ppales. III



Juegos de carcteres internacionales UNICODE e internacionalizacion.
No es recomendado para Web.
Tipo de tablas BerkeleyDB (las puede usar Mysql).
Adicionales

Tipos de datos accesorios:

Numeros de presicion arbitraria (creando numeros mas complejos)

Text de largo ilimitado.

Figuras geometricas, con funciones asociadas.

IpV4 y 6.

Mac Address.

Arrays.

Postgis (necesita un capitulo aparte).
Limites

Maximo de la BD: ilimitado.

de Tablas: 32 TB.

de tupla: 1.6 TB.

de campo: 1 GB

tuplas x tabla: ilimitado.

indices por tabla: ilimitado.
Indices

Pueden ser definidos por el usuario:

Binary Tree, x hashing y Gist.

Basados en expresiones.

parciales

bitmaps.
Avanzadas

Restricciones Referential Integrity Constraints. Evita dropeos accidentales.

Transacciones BEGIN – END­ SAVEPOINTS.

Anidacion de consultas avanzada.

Conexiones encriptadas via SSL.

Dominios, clustering, tablaspaces.

TOAST (atributos comprimidos largos)
Estructura
Arquitectura de servicios
Aplicacion
Postgres
postmaster
psql
Postgres
Ambitos y Esquemas de Conexion
Inicio de Conexion
postmaster
backend
backend
Auth
Query's
cliente
frontend
frontend
frontend
servidor
T
i
e
m
p
o
PostMaster

Proceso principal.

Se maneja como un servicio de sistema.

Levanta la memoria compartida.

Vigila solicitudes y esta al tanto de los movimientos.

Realiza el enlazado a los archivos de datos.

puede manejar varias bases de datos y usuarios.

Uno x CLUSTER.
Conexiones


La comunicacion entre Back y front se realiza mediante sockets a traves del puerto 5432 (por defecto).
Generalmente el archivo es /tmp/s.PGSQL.
5432.
Esquema Logico del cluster



Repositorio que engloba varias bases de datos.
Las bases de datos engloban un conjunto de esquemas, con 1 usuario minimo propietario.
La sesion se abre solo contra la Base de datos, no contra Cluster ni Tablas.

Por defecto se crean Template 0, ...1 y postgres.

Tablaspaces no se crean por defecto.

Roles. usuarios. Son independientes del sistema.
Jerarquia de Objetos


Tablas

Vistas

Tipos

Funciones
Esquemas

Sequences
...


Procedures
Replicacion


Funciones y Triggers
Tablespaces.

Dominios
Roles Group y User.

agregados y conversiones
Servidores

Bases de datos





Cast
Lenguajes
Organizacion Directorios
Organización directorios II
Instalacion
Instalacion Recomendada


En linux a traves de RPM o APT­GET (Ej: ”rpm ­i postgresql­8.2.rpm” o ”apt­get install postgresql­8.3”).
En Windows tiene un asistente.
Lo que hay que saber por si las...
#export PGDATA='/usr/local/postgresql/data'
#su postgres
/usr/lib/postgresql/<ver>/bin$initdb ­l /var/log (...parametros extra)
SE CREA UN CLUSTER NECESARIO PARA ARRANCAR
#postmaster ­D $PGDATA
o
#pg_ctl start & (para que quede en segundo plano)
Extensiones de Instalacion



tsearch2: soporte de indexacion Gist.
dblink: linkear varias bases de datos apra realizar consultas compartidas.
Como?

$cd $PGSRC/contrlib/

$psql ­Upostgres template1 < tsearch2.sql

o en la base postgres...
pg_ctl

start

stop (pg_ctl stop ­m s[mart] f[ast] i[nmediate])

status

restart

kill

register y unregister

ps ­ef |grep postgres .... ps ­A |grep postgres
Arranque automatico


chmod a+x postgresql­8.3

ln ­s /etc..sql /etc/rc3.d/S12postgresql

idem K02

copiar el script de postgresql de las contrib a et/init.d/
o en debian con: update­rc.d postgresql defaults 98 02
Configuracion y herramientas principales
Archivos

postgresql.conf

pg_hba.conf

pg_ident.conf

main.pid

(son iguales tambien en windows)

a partir del 8 se guardan en la ruta de PGDATA (anteriormente en /etc/postgresql/<ver>
postgresql.conf

Principales:

listen_addresses='*'

log_destination=stderr

port

log_rotatio_age

max_connections

log_rotation_size

ssl

vacuum

cliente

max_stack_depth=2048 (pila)
pg_hba.conf


Controla accesos de users desde ip's
Tipos de conexiones TRUST, REJECT, MD5, PASSWD, CRYPT, KRB5....
TYPE­DATABASE­USR­ADDRESS­METHOD
local all all 127.0.0.1/32 md5
Servidores Dedicados


$sysctl ­w vm.overcommit_memory=2
es por que el kernel 2.4 y superior mata al postmaster...
ACID
Que es?

[A]tomicidad (transacciones indivisibles)

[C]onsistencia


[I]solation ,aislamiento (no se pueden ver entre transacciones)
[D]urabilidad: exito de una transaccion que perdura.
Solucion para [A]

sentencias de BEGIN, END, ROLLBACK, COMMIT y SAVEPOINT.
Solucion [C]

A partir de 7.*, gestor de integridad:

not null

check

unique

primary key

fk ­match full y partial
Solucion [I]

MVCC
Solucion [D]


WAL (write Ahead Log) /var/pg_xlog
Acelera los tiempos de commit y de insercion y update.
Monitoreo basico
monitor

a traves de ps o top, free, vmstat, iostat.

tablas de catalogo:

pg_stat_activity

pg_stat_database

pg_stat_all_databases

pg_stat_all_indexes

pg_locks ....
monitoreando discos con psql


SELECT relfilenode, relpages FROM pg_class WHERE relname='tabla'
SELECT ..... WHERE relname IN ('pg_toast_relfilenode','pg_toast','relfilenode') –
desborde de TOAST.
psql
ingreso

psql ­Upostgres ­Ddatabase

o, si estamos logueados... psql
desde afuera...


psql ­l ­Upostgres (lista las bases)
psql template1 postgres ­A ­t ­c ”select * from pg_database where encoding = 6” | while read D; do (tira el result set a $D)
metacomandos

\c (conecta con otra base)

\?

\h <comando sql>

\l (lista bases)

\d[t|i|s|S|v]

\o (redirecciona output)

\H (html)

\i (ejecutar comandos desde archivos)
SQL
DML

SELECT [ALL|DISTINCT] {expresion as alias ,....} FROM tables, .... WHERE condiciones [OR|AND|XOR|NAND] GROUP BY nombre atributo HAVING grupo OREDER BY campo
Anidacion
SELECT *
FROM part
WHERE price < (SELECT price FROM part
WHERE pname = 'tornillos');
DDL

CREATE TABLE

CREATE INDEX

CREATE VIEW

CREATE SEQUENCE... ETC
Mantenimiento




VACCUM y VACCUM FULL (se puede ejecutar tanto desde el shell como desde el cliente psql). Se recomienda VACCUM seguido y no VACCUM FULL.
PG_RESETXLOG (resetea el log extendido)
PG_CTL (maneja la base). Aunque por experiencia suelo utilizar el script de inicio (/etc/init.d/postgresql)
IPCCLEAN (limpia los buffers compartidos de un postgres con caida abrupta)
Mantenimiento II


PG_RESTORE y PG_DUMP. es para realizar backups y restaurar las bases de datos (pg_dumpall, backapea todas las bases).
REINDEXDB (reindiza la base de datos).
Información
Información detallada de #pg_controldata DATADIR
(en 8.x /usr/local/pgsql/data)
pg_control version number: 833
Catalog version number: 200711281
Database system identifier: 5231128524019644351
Database cluster state: shut down
pg_control last modified: mié 20 ago 2008 13:15:25 ART
Latest checkpoint location: 0/43FA08
Prior checkpoint location: 0/43F9C8
Latest checkpoint's REDO location: 0/43FA08
Latest checkpoint's TimeLineID: 1
Latest checkpoint's NextXID: 0/387
Latest checkpoint's NextOID: 11512
Latest checkpoint's NextMultiXactId: 1
Latest checkpoint's NextMultiOffset: 0
Time of latest checkpoint: mié 20 ago 2008 13:15:25 ART
Minimum recovery ending location: 0/0
Maximum data alignment: 4
Database block size: 8192
Blocks per segment of large relation: 131072
WAL block size: 8192
Bytes per WAL segment: 16777216
Maximum length of identifiers: 64
Maximum columns in an index: 32
Maximum size of a TOAST chunk: 2000
Date/time type storage: floating­point numbers
Maximum length of locale name: 128
LC_COLLATE: es_AR.UTF­8
LC_CTYPE: es_AR.UTF­8
Información II
#pg_config
­­bindir show location of user executables
­­docdir show location of documentation files
­­includedir show location of C header files of the client
interfaces
­­pkgincludedir show location of other C header files
­­includedir­server show location of C header files for the server
­­libdir show location of object code libraries
­­pkglibdir show location of dynamically loadable modules
­­localedir show location of locale support files
­­mandir show location of manual pages
­­sharedir show location of architecture­independent support files
­­sysconfdir show location of system­wide configuration files
­­pgxs show location of extension makefile
­­configure show options given to "configure" script when
PostgreSQL was built
­­cc show CC value used when PostgreSQL was built
­­cppflags show CPPFLAGS value used when PostgreSQL was built
­­cflags show CFLAGS value used when PostgreSQL was built
­­cflags_sl show CFLAGS_SL value used when PostgreSQL was built
­­ldflags show LDFLAGS value used when PostgreSQL was built
­­ldflags_sl show LDFLAGS_SL value used when PostgreSQL was built
­­libs show LIBS value used when PostgreSQL was built
­­version show the PostgreSQL version
­­help show this help, then exit
Herramientas Adicionales
Slony­I / postgres­r (Replicación)
●
Pgmonitor (monitor)
●
Pgadmin III (administración gráfica)
●
Toad Data Modeler (Quest)
●
PhpPGadmin (administrador)
●
Empresas que trabajan con PG
Argentinas:
SIEMENS IT SOL.
Bibliografia Recomendada

Practical Postgresql (www.commandprompt.org
)

www.postgresql.org

www.pgfoundry.org

www.planetpostgresql.org

www.postgres­arg.org
Fin
Gracias por asistir!
Emanuel Calvo Franco
www.postgres­arg.org
Descargar