Sobre PostgreSQL

Introducción
Características
Historia
Ciclo de vida (EOL) y soporte


Introducción

PostgreSQL es un sistema de gestión de bases de datos objeto-relacional, distribuido bajo licencia BSD y con su código fuente disponible libremente. Es el sistema de gestión de bases de datos de código abierto más potente del mercado y en sus últimas versiones no tiene nada que envidiarle a otras bases de datos comerciales.

PostgreSQL utiliza un modelo cliente/servidor y usa multiprocesos en vez de multihilos para garantizar la estabilidad del sistema. Un fallo en uno de los procesos no afectará el resto y el sistema continuará funcionando.

A continuación teneis un gráfico que ilustra de manera general los componentes más importantes en un sistema PostgreSQL.

  • Aplicación cliente: Esta es la aplicación cliente que utiliza PostgreSQL como administrador de bases de datos. La conexión puede ocurrir via TCP/IP ó sockets locales.
  • Demonio postmaster: Este es el proceso principal de PostgreSQL. Es el encargado de escuchar por un puerto/socket por conexiones entrantes de clientes. Tambien es el encargado de crear los procesos hijos que se encargaran de autentificar estas peticiones, gestionar las consultas y mandar los resultados a las aplicaciones clientes
  • Ficheros de configuracion: Los 3 ficheros principales de configuración utilizados por PostgreSQL, postgresql.conf, pg_hba.conf y pg_ident.conf
  • Procesos hijos postgres: Procesos hijos que se encargan de autentificar a los clientes, de gestionar las consultas y mandar los resultados a las aplicaciones clientes
  • PostgreSQL share buffer cache: Memoria compartida usada por POstgreSQL para almacenar datos en caché.
  • Write-Ahead Log (WAL): Componente del sistema encargado de asegurar la integridad de los datos (recuperación de tipo REDO)
  • Kernel disk buffer cache: Caché de disco del sistema operativo
  • Disco: Disco físico donde se almacenan los datos y toda la información necesaria para que PostgreSQL funcione


Características

La última serie de producción es la 9.3. Sus características técnicas la hacen una de las bases de datos más potentes y robustas del mercado. Su desarrollo comenzo hace más de 16 años, y durante este tiempo, estabilidad, potencia, robustez, facilidad de administración e implementación de estándares han sido las características que más se han tenido en cuenta durante su desarrollo. PostgreSQL funciona muy bien con grandes cantidades de datos y una alta concurrencia de usuarios accediendo a la vez a el sistema.

A continuación teneis algunas de las características más importantes y soportadas por PostgreSQL:

Generales

  • Es una base de datos 100% ACID
  • Integridad referencial
  • Tablespaces
  • Nested transactions (savepoints)
  • Replicación asincrónica/sincrónica / Streaming replication - Hot Standby
  • Two-phase commit
  • PITR - point in time recovery
  • Copias de seguridad en caliente (Online/hot backups)
  • Unicode
  • Juegos de caracteres internacionales
  • Regionalización por columna
  • Multi-Version Concurrency Control (MVCC)
  • Multiples métodos de autentificación
  • Acceso encriptado via SSL
  • Actualización in-situ integrada (pg_upgrade)
  • SE-postgres
  • Completa documentación
  • Licencia BSD
  • Disponible para Linux y UNIX en todas sus variantes (AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris, Tru64) y Windows 32/64bit.

Programación / Desarrollo

  • Funciones/procedimientos almacenados (stored procedures) en numerosos lenguajes de programacion, entre otros PL/pgSQL (similar al PL/SQL de oracle), PL/Perl, PL/Python y PL/Tcl
  • Bloques anónimos de código de procedimientos (sentencias DO)
  • Numerosos tipos de datos y posibilidad de definir nuevos tipos. Además de los tipos estándares en cualquier base de datos, tenemos disponibles, entre otros, tipos geométricos, de direcciones de red, de cadenas binarias, UUID, XML, matrices, etc
  • Soporta el almacenamiento de objetos binarios grandes (gráficos, videos, sonido, ...)
  • APIs para programar en C/C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC, PHP, Lisp, Scheme, Qt y muchos otros.

SQL

  • SQL92,SQL99,SQL2003,SQL2008
  • Llaves primarias (primary keys) y foráneas (foreign keys)
  • Check, Unique y Not null constraints
  • Restricciones de unicidad postergables (deferrable constraints)
  • Columnas auto-incrementales
  • Indices compuestos, únicos, parciales y funcionales en cualquiera de los metodos de almacenamiento disponibles, B-tree, R-tree, hash ó GiST
  • Sub-selects
  • Consultas recursivas
  • Funciones 'Windows'
  • Joins
  • Vistas (views)
  • Disparadores (triggers) comunes, por columna, condicionales.
  • Reglas (Rules)
  • Herencia de tablas (Inheritance)
  • Eventos LISTEN/NOTIFY

Podeis consultar la lista completa en ingles de características disponibles en todas las versiones en la dirección http://www.postgresql.org/about/featurematrix

Algunos de los limites de PostgreSQL son:

Límite Valor
Máximo tamaño base de dato Ilimitado (Depende de tu sistema de almacenamiento)
Máximo tamaño de tabla 32 TB
Máximo tamaño de fila 1.6 TB
Máximo tamaño de campo 1 GB
Máximo numero de filas por tabla Ilimitado
Máximo numero de columnas por tabla 250 - 1600 (dependiendo del tipo)
Máximo numero de indices por tabla Ilimitado


Historia

El proyecto PostgreSQL tal y como lo conocemos hoy en dia empezó en 1996, aunque las bases y el trabajo en la que se asienta tienen sus comienzos en la decada de los 70. A continuación teneis una corta descripción de la historia de PostgreSQL.

Ingres 1977-1985 - "El comienzo"

La década de los 70 fue una década de desarrollos y pruebas de nuevos conceptos en el nuevo mundo de los gestores de bases de datos.

IBM habia estado trabajando desde 1973 con los primeros conceptos, ideas y teorias sobre bases de datos relacionales. Su proyecto "System R" fue entre otras cosas la primera implementación del lenguaje SQL (Structured Query Language). Este proyecto, sus decisiones de diseño y muchos de los algoritmos usados, influenciaron muchos de los sistemas de bases de datos relacionales que aparecieron posteriormente.

Por aquel entonces un profesor de la Universidad de Berkeley, Michael Stonebraker, leyo unos artículos publicados por IBM sobre "System R" que le hicieron interesarse en el tema. Utilizando el dinero de otro proyecto que ya tenia asignado, Ingres (INteractive Graphics REtrieval System), Stonebraker empezo a desarrollar sus ideas sobre bases de datos relacionales. Durante estos años Ingres mantuvo su código fuente abierto y permanecio en gran medida similar en conceptos a "System R".

A principio de los 80, Ingres estuvo compitiendo con Oracle por el liderazgo en el mundo de bases de datos relacionales y su código e implementación evolucionaron y fueron el origen de otras bases de datos relacionales, entre ellas podemos citar a Informix, NonStop SQL y Sybase (Microsoft SQL Server fue una versión licenciada de Sybase hasta su version 6.0).

Michael Stonebraker dejo la Universidad de Berkeley en 1982 para comercializar Ingres pero volvio a la misma en 1985 con nuevas ideas.

Postgres 1986-1994 - Despues (post) de ingres

Despues de su vuelta a Berkeley en 1985, Michael Stonebraker lideró un nuevo proyecto llamado Postgres (despues de Ingres) patrocinado por la Defense Advanced Research Projects Agency (DARPA), la Army Research Office (ARO), la National Science Foundation (NSF), y ESL, Inc. Con este proyecto y basandose en la experiencia obtenida con Ingres, Stonebraker tenia como meta mejorar lo que habian conseguido y aprendido en el desarrollo de Ingres. Y aunque se baso en muchas ideas de Ingres, no se baso en el código fuente del mismo.

Los objetivos iniciales de este proyecto fueron:

  • Proporcionar un mejor soporte para objetos complejos
  • Proporcionar a los usuarios la posibilidad de extender los tipos de datos, operadores y métodos de acceso.
  • Proporcionar los mecanismos necesarios para crear bases de datos activas (triggers, etc)
  • Simplificar el código encargado de la recuperación del sistema despues de una caída del mismo
  • Hacer cambios mínimos (preferiblemente ninguno) en el modelo relacional.
  • Mejorar el lenguaje de consulta QUEL heredado de Ingres (POSTQUEL).

Para los interesados en el tema, teneis disponibles una serie de artículos originales y completos en ingles relacionados con el proyecto Postgres:

La última versión de Postgres en este projecto fue la versión 4.2.

Postgres95 1994-1995 - Nueva vida en el mundo opensource

En 1994, dos estudiantes de Berkeley, Andrew Yu y Jolly Chen, empezaron a trabajar con el código de Postgres (versión 4.2) y llamaron al proyecto Postgres95. Hicieron una limpieza general del código, arreglaron errores en el mismo, e implementaron otras mejoras, entre las que destacan:

  • Sustitución de POSTQUEL por un interprete del lenguaje SQL
  • Reimplementación de las funciones agregadas
  • psql fue creado para ejecutar consultas SQL
  • El interface de objetos grandes (large-object) fue revisado
  • Un pequeño tutorial sobre Postgres fue creado
  • Postgres se pudo empezar a compilar con GNU make y GCC sin parchear

La versión 1.0 de Postgre95 vio la luz en 1995, el código era 100% ANSI C, un 25% más corto en relación con la versión 4.2 y un 30-50% más rápido. El código fue publicado en la web y liberado bajo una licencia BSD, y más y más personas empezaron a utilizar y a colaborar en el proyecto.

PostgreSQL 1996-actualidad - Proyecto PostgreSQL

En 1996, Andrew Yu y Jolly Chen ya no tenian tanto tiempo para dirigir y desarrollar Postgres95. Algunos de los usuarios habituales de las listas de correo del proyecto decidieron hacerse cargo del mismo y crearon el llamado "PostgreSQL Global Development Team".

En un principio este equipo de desarrolladores al cargo de la organización del proyecto estuvo formado por Marc Fournier en Ontario, Canada, Thomas Lockhart en Pasadena, California, Vadim Mikheev en Krasnoyarsk, Rusia y Bruce Momjian in Philadelphia, Pennsylvania. El nombre fue cambiado de Postgres95 a PostgreSQL y lanzaron la versión 6.0 en enero de 1997.

Hoy en dia el grupo central (core team) de desarrolladores está formado por 6 personas, existen 38 desarrolladores principales y más 21 desarrolladores habituales. En total alrededor de 65 personas activas, contribuyendo con el desarrollo de PostgreSQL. Podeis encontrar más información sobre este equipo de desarrolladores en http://www.postgresql.org/community/contributors/

Existe tambien una gran comunidad de usuarios, programadores y administradores que colaboran actívamente en numerosos aspectos y actividades relacionadas con el proyecto. Informes y soluciones de problemas, tests, comprobación del funcionamiento, aportaciones de nuevas ideas, discusiones sobre características y problemas, documentación y fomento de PostgreSQL son solo algunas de las actividades que la comunidad de usuarios realiza.

No tenemos que olvidar tampoco que existen muchas empresas que tambien colaboran con dinero y/ó con tiempo/personas en mejorar PostgreSQL. Muchos desarrolladores y nuevas características están muchas veces patrocinadas por empresas privadas.

En los últimos años los trabajos de desarrollo se han concentrado mucho en la velocidad de proceso y en características demandadas en el mundo empresarial. En este gráfico podeis ver cuando las diferentes versiones de PostgreSQL han visto la luz y las principales caracteristicas en las que se ha centrado el desarrollo.

Durante los años de existencia del Proyecto PostgreSQL, el tamaño del mismo, tanto en número de desarrolladores, como en números de linea de código, funciones y complejidad del mismo ha ido aumentando año a año. En el siguiente gráfico teneis una gráfica con la evolución del número de lineas de código en cada versión de PostgreSQL.

Los datos de este gráfico estan generados con CLOC. Contabilizamos como lineas de código a todas las lineas de código en diferentes lenguaje, más comentarios, menos lineas en blanco. Los ficheros HTML y CSS no se cuentan como código.

Usando el modelo de estimación de costes de software "COCOMOII" (Constructive COst MOdel) podemos obtener unos datos meramente orientativos pero que nos pueden ayudar a entender la complejidad del proyecto PostgreSQL y los recursos que se necesitarian para desarrollar un producto similar desde cero.

Según COCOMOII, obtendriamos estos números para PostgreSQL 9.0.0:

Descripción Valor
Números de lineas de código (PG-9.0.0) 969.562
Habilidad de los programadores (alta) 0,6
Complejidad del projecto (alta) 1,24
Precio/hora ($100.000/año - 1.875horas/año) $53,3
Programadores-año 618,71
Precio por linea de código $65,30
Precio Total $63.316.697
Lineas de código por persona/dia 7
Tiempo de desarrollo del proyecto (años) 3.6
Número medio de programadores 171,4

Ref: http://www.cms4site.ru/utility.php?ecur=1.24&eafcur=0.6&utility=cocomoii...


Ciclo de vida (EOL) y soporte

El Proyecto PostgreSQL tiene como objetivo mantener y soportar cada versión de PostgreSQL durante 5 años desde el momento de su lanzamiento. A continuación teneis un resumen del ciclo de vida de las diferentes versiones de PostgreSQL:

Versión Versión menor Soportada Lanzamiento Soporte
9.2 9.2.0 Si Sep 2012 Sep 2017
9.1 9.1.5 Si Sep 2011 Sep 2016
9.0 9.0.9 Si Sep 2010 Sep 2015
8.4 8.4.13 Si Jul 2009 Jul 2014
8.3 8.3.20 Si Feb 2008 Feb 2013
8.2 8.2.23 No Dic 2006 Dic 2011
8.1 8.1.23 No Nov 2005 Nov 2010
8.0 8.0.26 No Ene 2005 Oct 2010
7.4 7.4.30 No Nov 2003 Oct 2010
7.3 7.3.21 No Nov 2002 Nov 2007
7.2 7.2.8 No Feb 2002 Feb 2007
7.1 7.1.3 No Abr 2001 Abr 2006
7.0 7.0.3 No May 2000 May 2005
6.5 6.5.3 No Jun 1999 Jun 2004
6.4 6.4.2 No Oct 1998 Oct 2003
6.3 6.3.2 No Mar 1998 Mar 2003