PostgreSQL Capacitación Nivel 1 Día 1. Agenda Introducción al Modelo Objeto-Relacional Introducción a la Arquitectura Cliente/Servidor. Breves comparaciones.

Slides:



Advertisements
Presentaciones similares
POSTGRESQL MI JUAN PABLO TORRES HERRERA UNIVERSIDAD AUTÓNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERÍA ENSENADA Agosto de 2006.
Advertisements

Cristian Alaniz - Daniel Hielpos. Agenda - Arquitectura - Tipos de Objetos - Lenguaje de Consulta - Transacciones - Backup y Recuperación - Seguridad.
Motores de almacenamiento en MySQL por Mario López y Juan A. Sánchez.
UNIVERSIDAD LATINA BASES DE DATOS.
UNIVERSIDAD NACIONAL AUTONOMA DE MEXICO MODULO IV ADMINISTRACIÓN DE BASES DE DATOS Administración del DBMS E.I. L.E. Prof. Ramón Castro Liceaga SEMINARIO.
PostgreSQL: Parte 1 Integrantes: Álvaro Marciales Claudio Torrez.
1 Sistemas Gestores de Bases de Datos MySQL vs PostgreSQL Leyre Pérez Alba & Marta Balbás Ostáriz Leyre Pérez Alba & Marta Balbás Ostáriz.
POSTGRESQL.
Manual violento de Navicat
SQL Server Compact Edition
 Trabaja con el esquema relacional surgido en los laboratorios de IBM  La instalación completa ocupa alrededor de 10 Mb incluyendo librerías, ejemplos.
"Si he logrado ver más lejos ha sido porque he subido a hombros de gigantes" Isaac Newton
Curso de Aptitud Pedagógica 2006/2007 OpenOffice Base Introducción a las Bases de Datos.
Universidad Pedagógica Francisco Morazán Tema: SISTEMA DE BASE DE DATOS Grupo: 5 Integrantes: Danilo Hernán Lagos Avilés Erlinda Yohanna Díaz Elvir Indira.
I N F O R M I X EQUIPO No.1 INTEGRANTES: ALEJANDRA RUEDA D. ALEJANDRA RUEDA D. IRENE RUEDA D. IRENE RUEDA D. GUSTAVO DOMINGUEZ V. GUSTAVO DOMINGUEZ V.
Configuración de un servidor web 1. Una vez terminado el proceso de instalación de los paquetes a utilizarse vamos a empezar ingresando como administrador.
Gestor de paquetes Instalar y eliminar software (GUI y consola)
BASE DE DATOS EN LA WEB POR- OSIRYS MARCIAGA JESUS NIETO.
V 14: Nuevos Procedimientos
Servidor de aplicaciones
Conceptos generales de base de datos
Tema: Análisis de una red trocal multiservicio para encriptación de información sobre MPLS basada en el estándar IETF con el protocolo GETVPN Autor:
BASE DE DATOS.
L.I. MARISOL HUITRÓN RIVAS
Aidan Hogan CC Bases de Datos Primavera 2016 Clase 11: Integridad, Transacciones, ACID (I) Aidan Hogan
Conferencia 10. BD Cliente Servidor. Integridad Referencial
Wladimir Solano Marco Pascale
CC Bases de Datos Primavera Clase 12: Implementación de ACID
SEGURIDAD SQL Usuarios, privilegios y perfiles.
LOS DIFERENTES LENGUAJES DE PROGRAMACION PARA LA WEB
BASE DE DATOS INTRODUCCION.
MONOGRÁFICO TÉCNICO II – CAMBIO DE SERVIDOR
POSTGRESQL PARTE I Azuaje, Agustín Hevia, Andrés.
Sistema de Base de datos
MANEJADORES DE BASE DE DATOS. SGBDFICHA TECNICACARACTERISTICASVENTAJASDESVENTAJAS EMPRESAS QUE LO UTILIZAN sybase Creado en 1984 por holftman y bot cestein.
U.T. 11: Introducción A Las Bases De Datos
BASES DE DATOS.
PARCIAL III BASE DE DATOS.
INTRODUCCIÒN AL SISTEMA GESTOR DE BASE DE DATOS
Formación SICdrive Componentes de SICdrive El Backend El Frontend.
Unidad 7: Nivel Interno Algunos Conceptos Importantes
Novell Netware Autores: Cerrina Maria Josefina, Coto Marcelo,
Tarea 3: data warehouse y san
Modelo de 3 capas. Qué es la arquitectura de una aplicación? La arquitectura se refiere a la forma en la que es diseñada tanto física como lógicamente.
Conalep plantel Zitácuaro 240
Taller de Bases de Datos Ingeniería en Sistemas Computacionales Clave de la asignatura: SCA-1025 (Créditos) SATCA1: 0 – 4 – 4.
Conceptos Relacionados Unidad I. Parte A.
L.I. Manuel Antonio Cebreros Zazueta
PostgreSQL Herramienta para Administración
Sugiero cambios a lo de Amarillo / lo de azul no tiene expositor aun 1 concepto de transaccion (Tejada) 2. Fundamentos d elos procesos de Transaccion.
Introducción de Base de Datos
SECAP F NOMBRE: J MICHAEL EDUARDO QUEVEDO H. CURSO: I INFORMATICA B
Nuevas Características de SQL Server 2016
Tema: Componentes lógicos de un ordenador. Mediante el sistema de numeración binario, es decir, usando los dígitos 0 y 1. Lo único que transmite,
Universidad Alonso de Ojeda Facultad de Ingeniería
Entendiendo PHP En diseño de software en el Front-end es la parte del software que interactúa con los usuarios. Es la persona que se encarga del diseño.
POSTGRE SQL CONCEPTO El uso de caracteres en mayúscula en el nombre PostgreSQL puede confundir a algunas personas a primera vista. Las distintas pronunciaciones.
Docente: Valerio Herrera, Luis E. Experiencia Formativa III Semana 4: Servidores Web.
BASE DE DATOS (Parte N°1) Docente: Lic. David I. López Pérez.
Principales Características De Motores De Bases de Datos.
Características de los Sistemas Operativos
CARACTERÍSTICAS DEL MOTOR DE BASE DE DATOS POSTGRESQL ACID. Soporta distintos tipos de datos y permite la creación de tipos propios. Herencia entre tablas.
LOS SISTEMAS OPERATIVOS MENÚ SISTEMAS OPERATIVOS Introducción Definición Historia Funciones Tipos S.O. Algunos Existentes Conclusiones Referencias.
1 TEMA 10. SISTEMAS OPERATIVOS DISTRIBUIDOS Introducción Hardware Software Aspectos de diseño.
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS
Centro de estudios tecnológico industrial y de servicios No 37 López Barragán Alan Daniel 2514 Sub2 1.
Base de datos años  En la década de los años 80’, se desarrolló el SQL, un lenguaje de consultas que permite consultar, valga la redundancia,
ING. NANCY BASILIO MARCELO ADMINISTRACIÓN REDES DE COMPUTADORAS.
Taller de Bases de Datos Ingeniería en Sistemas Computacionales M. en I.S.C Mariana Carolyn Cruz Mendoza Por Alexis Orlando Rebollar Lopez.
Hilos de Procesamiento. Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java.
Transcripción de la presentación:

PostgreSQL Capacitación Nivel 1 Día 1

Agenda Introducción al Modelo Objeto-Relacional Introducción a la Arquitectura Cliente/Servidor. Breves comparaciones. Introducción a PostgreSQL. Arquitectura Procesamiento interno Esquema Lógico Herramientas ACID en Pgsql MVCC

Introducción al Model Objeto- Relacional

¿Porqué Bases de datos? Los SGBD nacieron con el propósito de solventar los siguientes problemas de los antiguos sistemas: Redundancia e inconsistencia de Datos. Dificultad en el acceso concurrente. Aislamiento de datos. Problemas de integridad. Problemas de atomicidad. Anomalías en el acceso concurrente. Problemas de Seguridad.

Visión de Datos –Nivel físico. –Es como se guardan los datos en disco. Solo es importante conocerlos si es DBA o desarrollador del motor. –Nivel Lógico. –Es el nivel en el cual trabaja el DBA y el Arquitecto de datos. –Nivel de vistas. –Es el nivel en el cual trabaja el desarrollador de la aplicación final y el cual verá el usuario de la misma.

Independecia Física Físico – Disposición de elementos del motor sobre los sistemas de almacenamiento. – Ayuda a mejorar la performance. Lógico – Disposición de los objetos dentro de la base. – Ayuda a mejorar la comprensión. – Característica que puede adicionar seguridad a nivel de gestor.

Modelos Lógicos Modelo Entidad Relación (DER) Modelo Orientado a Objetos. Modelo de datos semántico. Modelo de datos funcional. Indican el diseño lógico de datos, No indican datos reales o ya implementados

Modelos lógicos basados en registros Ojeto-Relacional. Postgresql, Oracle Modelo relacional Mysql, DB2, SQLServer El modelo de red El modelo jerárquico Sistemas de Archivos (pueden ser considerados Bases de Datos). Orientado a Objetos DB4O

Arquitecturas Archivo/ s Datos Servid or Backe nd Proceso Servidor / Cluster de servidores Client e Derby – BerkeleyD B Mysql – Postgresql - Firebird Oracle – DB2 - Greenplum...

El punto de vista de Stonebraker Capacidades De búsqueda /soporte multiusuario Complejidad de los datos y ampliabilidad Sistemas De archivos SGBD relacion al SGBD O-R SGBD OO Derb y Mysq l Postgresq l DB4O Mayor velocidad Menor velocidad

Principios de la integridad de datos Atomicidad Consistencia Aislamiento (Isolation) Durabilidad NOTA: PostgreSQL es ACID

Transacciones Colección de operaciones (sucesión de acciones) que forman una unidad lógica de trabajo, y que posiblemente actualice varios elementos de datos. Transacción 2 Transacción 1Commit Log de transaccione s Base de Datos

Estados transaccionales Activa Parcialmente comprometida Fallida Abortada Comprometida (COMMIT) Rollback (No se aborta, se vuelve a un determinado punto o inicio de transacción)

Introducción a Postgresql

Historia Michael Stonebraker Inicia postgreSQL como Ingres en la Universidad de Berkeley, California. 1986, comprado por Computer Associates. 1989, Liberada la primera versión como Postgres dos estudiantes graduados de Berkeley Jolly Chen y Andrew Yu añaden SQL a Postgres y lo llaman Postgres , (1000 colaboradores) Se decidió quitar el 95 al nombre para liberarse de la cronología y nace PostgreSQL. Ultima version al momento 8.4 y 8.5 en desarrollo. 12/msg00033.php

Historia (2) OMFG!

Su hermandad con Informix Stonebraker empezó Ingres (1977). Luego de varias empresas, desembarcó en Illustra. Después (1995) unos estudiantes tomaron POSTGRES y lo siguieron desarrollando, le pusieron Postgres95 y después se pasó a llamar PostgreSQL. En 1996 la empresa que hacía Informix compró Illustra y dejaron de lado la base de datos Illustra, y en cambio usaron los ingenieros y la tecnología para avanzar un poco más con Informix. En el 2001 la empresa Informix se dividió en dos y la parte que tenía que ver con la base de datos fue a parar a IBM.

Informix desde ECPG

Postgresql, descripción Es el SGBD Open Source mas potente del mercado. Posee casi 30 años de desarrollo. Licencia BSD de Berkeley. Esta en la vanguardia de la investigacion en al tecnología transaccional. Es ACID. Es segura. Tiene alternativas comerciales de muchísima calidad. Ej: EnterpriseDB, CyberTech(Alemania), etc. Tiene otras alernativas (forks) FastDB, Bizgres, etc.

Postgresql, descripción (2) Es un motor Objeto-Relacional [*]. Cliente/servidor Extensible Multiples conectores desde lenguajes de programación. Lenguaje procedimental propio (PL/pgsql) y extendido (PL/PERL, PL/PYTHONu, PL/JAVA, PL/RUBY, PL/R, C, C++...)

Postgresql, descripción (3)

SQL:2003 El estandar SQL:2003 define las siguientes características que se peuden implementar en las bases Objeto relacionales: – Rowtype – Tipos definidos y rutinas por usuario. – Poliformismo – Herencia – Tipos de referencia e identidad de objetos (el OID es uno de ellos) – Tipos de colección (ARRAY, MULTISET, SET, LIST) – Ampliación del SQL para hacerlo computacionalmente completo. – Soporte para objetos de gran tamaño (BLOB y CLOB) – Recursión.

Carácterísticas El modelo es de cliente/servidor (hoy en día el más común, pero no el único). Su lenguaje procedimental es muy similar al PL de Oracle, logrando una migración mas amena. Se adapta a los standares SQL:2003. Posee MVCC (Multi-Version Concurrency Control). Fue una de las pioneras (la primera fue InterBase) Posee WAL (Write Ahead LOG). Herencia de tablas. Puntos de recuperacion avanzados (savepoints, replicacion asincronica) Optimizador de consultas. Juegos de caracteres UNICODE e internacionalización.

Características (2) Tipos de datos accesorios: – Números de presición arbitraria (creando numeros más complejos) – Text de largo ilimitado. – Figuras geometricas, con funciones asociadas. (Cube, contrib) – IpV4 y 6. – Mac Address. – Arrays (Nuevas funciones en 8.4) – Postgis (necesita un capítulo aparte). – Citext (insensitive case text type - 8.4)

Características - Límites Maximo de la BD: ilimitado. De Tablas: 32 TB. De tupla: 1.6 TB. De campo: 1 GB Tuplas x tabla: ilimitado. Índices por tabla: ilimitado. Bloque: 8k

Características - Índices Pueden ser definidos por el usuario: – Btree (por defecto y el más común), Hash, GIN (Generalized Inverted, ex RTree) y Gist (Generalized Index Storage). Basados en expresiones. Parciales Bitmaps. Gin es más lento para inserciones pero más rápido para búsqueda de texto (se usa para Full Text Search). Gist es bueno para datos complejos o raros (figuras geométricas, tsvector, etc)

Características - Avanzadas Restricciones Referential Integrity Constraints. Evita eliminaciones accidentales. Transacciones BEGIN – END- SAVEPOINTS. Anidación de consultas avanzadas. Conexiones encriptadas vía SSL. Dominios, clustering, tablespaces, schemas y otros objetos de agrupación. TOAST (atributos comprimidos largos, transparente al usuario). Soporte de funciones de ventana y recursivas.

Vista lógica del funcionamiento Aplicacion Postgres postmaster psql Postgres

Vista más detallada

Vista ++ detallada Acceso desde diversos conectores.

Bloque I/O Block 8k Tabla Block 8k Leído Cache Hit LRU (Last Recently Used)

Dentro de un bloque Tupl a

Cache Pg + Kernel Se utiliza gran parte del cache de buffer del kernel. n.us/main/wri tings/pgsql/h w_performan ce/

Autenticación – Saludo de 3 vías postmas ter backend frontend backend frontend Servido r Client e TiempoTiempo Inicio de Conexion Auth Query's

Listado de Procesos

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.

Datos técnicos La comunicación entre Back y front se realiza mediante sockets a través del puerto 5432 (por defecto). Generalmente el archivo es /tmp/s.PGSQL.5432.

Procesamiento Interno

Esquema Interno Parseo de comando Analizamiento de consulta Ejecutor de consulta

La ruta de una consulta 1. Una conexión desde una aplicación al servidor Pgsql debe ser establecida. La aplicación transmite la consulta y espera a los resultados. 2. El 'parseador' chequea que la consulta transmitida por la aplicación tenga una sintaxis correcta y crea el árbol de consulta (ADC). 3. El sistema de reescritura(SDR) toma el ADC y busca cualquier regla (almacenada en los catalogos de sistema) para aplicar el ADC. Ejecuta transformaciones dadas en los cuerpos de las reglas. Una aplicación del SDR es la realización de vistas. Cuando sea una consulta sobre una vista, el SDR reescribe la consulta para acceder a la tabla. 4. El planeador/optimizador toma la reescrita consulta y crea un plan, el cual será la entrada del ejecutor. Com primera instancia creará todas las posibles rutas que tengan el mismo resultado. Seguido, el costo por cada ejecución es estimado para elegir el menos costoso. Ese mismo es expandido para que el ejecutor pueda usarlo. 5. El ejecutor rescursivamente pasa a través del árbol del plan y devuelve las filas. Hace uso del sistema de almacenamiento mientras realiza las tareas del plan y finalmente retorna los resultados.

Como se establecen conexiones Un proceso por usuario. – Pro » Esto es importante debido a que provee de mayor estabilidad en ambientes muy concurrentes. » En mayor concurrencia hace mejor aprovechamiento de multinucleos y recursos. – Contras » Como contra, en ambientes de menor concurrencia, suele tener menos performance que varios usuarios por proceso manejados por hilos.

Como se establecen conexiones (2) El proceso maestro (postgres) escucha su socket a través de TCP/IP (puerto por defecto 5432) Estos procesos se comunican entre si para mantener la integridad de los datos. Se puede conectar con cualquier aplicación – driver que entienda el protocolo de Postgresql. » Mayor detalle en el manual, capítulo “Frontend/Backend Protocol” (45 en versión 8.4)

Binarios escenciales postgres » Servidor psql » No olbligatorio, pero extremadamente útil. pg_ctl » Administra el arranque o la parada del servidor. pg_config » Provee información sobre la instalación de la base pg_controldata » Información del Cluster de datos reindexdb – vacuumdb » Herramientas de mantenimiento Initdb » Inicializa un cluster de bases de datos. Ipcclean » Limpia la memoría compartida de consultas canceladas.

Instalación

Elección del SO La elección del SO es crucial para la instalación de nuestro motor. Influirá: – Escalamiento. – Mantenimiento. – Funcionalidad. – Estabilidad. – Herramientas. – Seguridad.

Caso: Windows En el caso de utilizarse Windows como plataforma servidor, se recomienda la serie 'server' o superior. Preferentemente 2000 o superior. Imposibilidad de utilizar sistemas de ficheros ajenos a su licencia (NTFS -FAT). Soporte no tan poblado como en otras plataformas.

Caso: Derivado Linux Es el más soportado. Posibilidad de utlización de varios sistemas de ficheros (xfs, jfs, reiserfs, ext2-3, etc.) Económico. Escalable. Fácil de configurar.

Caso: BSD Bastante similar a Linux en cuanto a posibles problemas y soporte. Soporta ZFS.

Caso: Solaris Estable. Soporta varios sistemas de archivo incluido ZFS. Soporta herramientas de administración avanzada. Soporta herramientas de debug avanzadas. » Postgresql incluye 'probes' para ser traceado con DTRACE. Exelente rendimiento en ambientes muy concurrentes y de alta carga de datos.

Instalación Homo Paquetus – Es la forma más común de instalación. – Existen en forma de paquetes.deb,.rpm,.pkg, one-click- installers (varias plataformas, gracias al aporte de EnterpriseDB y traducción de SistemasAgiles) Homo compilatis – En linux es necesario el build-essential (se puede descargar desde los repositorios de derivados de Debian). – En Solaris se puede compilar con gcc o con SunStudio. No soporta readline. Se debe instalar gmake. – En windows se puede compilar con Visual Studio (más info en

Homo paquetus Buscamos: Instalamos:

Homo compilatis Instalamos el build-essential (Debian*). Configuramos la instalación con 'configure'. Compilamos e instalamos con gmake. Copiar los scripts de arranque. Verificar si existe el usuario postgres o el que será dueño del cluster. Inicializar el cluster. Arrancar el motor.

Script de arranque (derivados Linux)

Nivel de arranque Los directorios rc.d nos indican el orden de la ejecución de los scripts de inicio. Aquí podemos configurar en que nivel arrancar el gestor de datos. Para administrar esto, utilizar el script 'update-rc.d', incorporado en las distros derivadas de Debian. Esta imagen nos indica que esta en todos los niveles de init.

Estructura del cluster en el sistema de ficheros Aquí se encuentran: – Datos y bases. – WAL – Archivos de configuración – Logs – etc...

Dentro del data/ Oid2name es un contrib que permite ver el nombre de acuerdo a los OID de cada objeto.

Output pg_config

Script init

Habilitar conexiones remotas postgresql.conf listen_addresses (pueden estar separadas por coma o especificar todas con '*') Port (recordar que debe estar habilitado desde el firewall) pg_hba.conf (mejora sustancial en 8.4) – local database user auth-method [auth-options] – host database user CIDR-address auth-method [auth-options] – hostssl database user CIDR-address auth-method [auth-options] – hostnossl database user CIDR-address auth-method [auth-options] – host database user IP-address IP-mask auth-method [auth-options] – hostssl database user IP-address IP-mask auth-method [auth-options] – hostnossl database user IP-address IP-mask auth-method [auth-options] pg_ident.conf – Asigna alias para los usuarios.

Diferencias e/versiones devel8.5 Cada aprox. 6 meses se completa el ciclo de desarrollo. Los parches constantemente se van 'comiteando' Las versiones de segundo dígito adhieren nuevas prestaciones.

Herramientas Stack Builder: permite instalar aditamentos para desarrollo, como conectores desde lenguajes y drivers. PgAdmin: Administrador gráfico.

Localización Se puede crear el cluster con la opción 'initdb –locale=es_AR' LC_COLLATE, Orden de cadenas LC_CTYPE, Clasificación de caracteres. LC_MESSAGES, Lenguaje de mensajes LC_MONETARY, Formato de dinero LC_NUMERIC, Formato de numeros LC_TIME, Formato de fechas y timestamps

Notas sobre localización Afecta a: – Ordenamiento en consultas que utilizan ORDER BY o los operadores de consulta tradicionales en textos. – La utilización de usos de índices con la cláusula LIKE. – A las funciones upper, lower e initcap. – A la familiar de funciones de to_char.

Set de caracteres Como se especifica? – initdb -E UTF8 – createdb -E UTF8 -T template0 --lc-collate=es_AR.utf8 -- lc-ctype=es_AR.UTF8 – CREATE DATABASE prueba WITH ENCODING 'UTF8' LC_COLLATE='es_AR.utf8' LC_CTYPE='es_AR.utf8' TEMPLATE=template0; Los más comunes que utilizaremos son: – UTF8 – SQL-ASCII – WIN1252 – LATIN1

Verificar las bases (1) Podemos verificar el encoding de nuestras bases:

Verificar las bases (2) La salida del 8.4 es un poco más completa:

Cambio de set \encoding de psql permite cambiar el encoding client 'on the fly'. Existe un listado de conversión automática de set de caracteres.

¿Como postgres promete ACID?

Soluciones para ACID [A]tomicidad (transacciones indivisibles) [C]onsistencia [I]solation,aislamiento (no se pueden ver entre transacciones) [D]urabilidad: éxito de una transaccion que perdura.

Solución para [A] Sentencias de BEGIN, END, ROLLBACK, COMMIT y SAVEPOINT.

Solución para [C] A partir de 7.*, gestor de integridad: – not null – check – unique – primary key – fk -match full y partial

Solución para [I] MVCC – Multi Versión Concurrency Control Impide el bloqueo de la tabla

Solución para [D] WAL (write Ahead Log) /var/pg_xlog Acelera los tiempos de commit y de insercion y update. En caso de caída, las transacciónes comprometidas que no llegaron a la base, permanecen en la WAL.

MVCC

EXPLAIN MVCC;

EXPLAIN ANALYZE MVCC; Cada consulta ve unicamente las transacciones completadas antes de comenzar. Al comienzo de la consulta, Pgsql guarda: El contador de transacciones. (de ahi que es importante mantener en estado con VACUUM FREEZE si tenemos un número muy alto de transacciones, para resetearlo) Todos los identificadores que estan en proceso. En una transacción de multi-cláusulas, las previas transacciones propias a la actual son visibles Se toma por defecto el nivel de read committed isolation level

EXPLAIN ANALYZE VERBOSE MVCC; Las tuplas deben tener un transaction id que: – Es una transacción comprometida. – Es menor al contador de la transacción almacenado al comienzo de la consulta y... – No estar en proceso al comienzo de la consulta. El transaction id de las tuplas visibles expiran cuando: – Esta en blanco o abortado – Es mayor al contador y.. – Estar en proceso al inicio de la consulta Búsqueda Secuencial Contador de transacciones al comienzo de la consulta: 100 Transacciones abiertas :25,50,75 Por simplicidad, se asume que el resto estan comprometidas

Bibliografía wiki.postgresql.org Documentación 8.3.x y 8.4 Presentación B. Momjian (Postgresql Internals throw pictures)

Gracias!