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