El sistema de gestión de bases de datos objeto-relacionales conocido hoy en día como PostgreSQL se deriva del paquete POSTGRES escrito en la Universidad de California en Berkeley. Con décadas de desarrollo a sus espaldas, PostgreSQL es ahora la base de datos de código abierto más avanzada disponible en cualquier lugar.
Otra perspectiva sobre la historia presentada aquí se puede encontrar en el artículo del Dr. Joe Hellerstein “Looking Back at Postgres” (Mirando hacia atrás a Postgres) [hell18].
El proyecto POSTGRES, liderado por el profesor Michael Stonebraker, fue patrocinado por la Agencia de Proyectos de Investigación Avanzados de Defensa (DARPA), la Oficina de Investigación del Ejército (ARO), la Fundación Nacional de Ciencias (NSF) y ESL, Inc. La implementación de POSTGRES comenzó in 1986. Los conceptos iniciales para el sistema se presentaron en [ston86], y la definición del modelo de datos inicial apareció en [rowe87]. El diseño del sistema de reglas en ese momento se describió en [ston87a]. La justificación y arquitectura del gestor de almacenamiento se detallaron en [ston87b].
POSTGRES ha pasado por varias versiones principales desde entonces. El primer sistema tipo “demostración” (demoware) comenzó a funcionar en 1987 y se mostró en la conferencia ACM-SIGMOD de 1988. La versión 1, descrita en [ston90a], se entregó a unos pocos usuarios externos en junio de 1989. En respuesta a una crítica del primer sistema de reglas ([ston89]), el sistema de reglas fue rediseñado ([ston90b]), y la versión 2 fue lanzada en junio de 1990 con el nuevo sistema de reglas. La versión 3 apareció en 1991 y agregó soporte para múltiples gestores de almacenamiento, un ejecutor de consultas mejorado y un sistema de reglas reescrito. En su mayor parte, las versiones posteriores hasta Postgres95 (ver más abajo) se centraron en la portabilidad y la confiabilidad.
POSTGRES se ha utilizado para implementar muchas aplicaciones diferentes de investigación y producción. Estas incluyen: un sistema de análisis de datos financieros, un paquete de monitoreo del rendimiento de motores a reacción, una base de datos de seguimiento de asteroides, una base de datos de información médica y varios sistemas de información geográfica. POSTGRES también se ha utilizado como herramienta educativa en varias universidades. Finalmente, Illustra Information Technologies (más tarde fusionada con Informix, que ahora pertenece a IBM) tomó el código y lo comercializó. A finales de 1992, POSTGRES se convirtió en el gestor de datos principal para el proyecto de computación científica Sequoia 2000 descrito en [ston92].
El tamaño de la comunidad de usuarios externos casi se duplicó durante 1993. Se hizo cada vez más evidente que el mantenimiento y soporte del código prototipo consumían una gran cantidad de tiempo que debería haberse dedicado a la investigación de bases de datos. En un esfuerzo por reducir esta carga de soporte, el proyecto POSTGRES de Berkeley finalizó oficialmente con la versión 4.2.
En 1994, Andrew Yu y Jolly Chen agregaron un intérprete del lenguaje SQL a POSTGRES. Bajo un nuevo nombre, Postgres95 fue posteriormente liberado en la web para encontrar su propio camino en el mundo como un descendiente de código abierto del código original de POSTGRES de Berkeley.
El código de Postgres95 era completamente ANSI C y se redujo en tamaño en un 25%. Muchos cambios internos mejoraron el rendimiento y la mantenibilidad. La versión 1.0.x de Postgres95 funcionó aproximadamente entre un 30 y un 50% más rápido en el Wisconsin Benchmark en comparación con POSTGRES, versión 4.2. Además de la corrección de errores, las siguientes fueron las mejoras principales:
El lenguaje de consulta PostQUEL fue reemplazado con SQL
(implementado en el servidor). (La biblioteca de interfaz
libpq fue nombrada por PostQUEL). Las subconsultas
no fueron soportadas hasta PostgreSQL (ver más abajo),
pero podían imitarse en Postgres95 con funciones
SQL definidas por el usuario. Las funciones de agregación fueron
reimplementadas. También se agregó soporte para la cláusula de consulta
GROUP BY.
Se proporcionó un nuevo programa (psql) para consultas SQL interactivas, que utilizaba GNU Readline. Esto reemplazó en gran medida al antiguo programa monitor.
Una nueva biblioteca de front-end, libpgtcl, daba soporte
a clientes basados en Tcl. Un intérprete de comandos de
ejemplo, pgtclsh, proporcionaba nuevos comandos Tcl para
conectar programas Tcl con el servidor
Postgres95.
Se reformó la interfaz de objetos grandes (large objects). Los objetos grandes de tipo inversión (inversion large objects) eran el único mecanismo para almacenar objetos grandes. (Se eliminó el sistema de archivos de inversión).
Se eliminó el sistema de reglas a nivel de instancia. Las reglas siguieron estando disponibles como reglas de reescritura.
Junto con el código fuente se distribuyó un breve tutorial que presentaba las características normales de SQL, así como las de Postgres95.
Se utilizó GNU make (en lugar de BSD make) para la compilación. Además, Postgres95 se podía compilar con un GCC sin parches (se corrigió la alineación de datos de los valores double).
Para 1996, se hizo evidente que el nombre “Postgres95” no resistiría el paso del tiempo. Elegimos un nuevo nombre, PostgreSQL, para reflejar la relación entre el POSTGRES original y las versiones más recientes con capacidad SQL. Al mismo tiempo, establecimos la numeración de versiones para comenzar en 6.0, volviendo a colocar los números en la secuencia iniciada originalmente por el proyecto POSTGRES de Berkeley.
Postgres todavía se considera un nombre oficial del proyecto, tanto por tradición como porque a la gente le resulta más fácil pronunciar Postgres que PostgreSQL.
El énfasis durante el desarrollo de Postgres95 estuvo en identificar y comprender los problemas existentes en el código del servidor. Con PostgreSQL, el énfasis se ha trasladado a aumentar las características y capacidades, aunque el trabajo continúa en todas las áreas.
Los detalles sobre lo que ha sucedido en cada versión de PostgreSQL desde entonces se pueden encontrar en https://www.postgresql.org/docs/release/.