Объектно-реляционная СУБД теперь известная как PostgreSQL (и ранее называемая Postgres95) ведёт свое происхождение от пакета POSTGRES, который был написан в департаменте Беркли, Калифорнийского Университета. Более чем десятилетняя разработка PostgreSQL сделала этот продукт одной из наиболее продвинутых СУБД с открытым исходным кодом в мире, предлагая многоверсионное управление параллельным доступом, поддерживая практически все конструкции SQL (включая подзапросы, транзакции и определяемые пользователем типы и функции) и имея широкий диапазон языков, с помощью которых можно работать с СУБД (включая C, C++, Java, Perl, Tcl и Python).
Реализация реляционной СУБД POSTGRES началась в 1986. Начальные концепции для этой системы были представлены в The design of POSTGRES, а определение начальной модели данных было осуществлено в The POSTGRES data model. Устройство системы управления на тот момент, было описано в The design of the POSTGRES rules system. Обоснование архитектуры и менеджеры хранения были детально описаны в The design of the POSTGRES storage system.
Затем вышло несколько версий Postgres. Первая "demoware" система заработала в 1987 и была продемонстрирована в 1988 на Конференции ACM-SIGMOD. Версия 1, описанная в The implementation of POSTGRES была выпущена в июне 1989 года и могла работать с несколькими внешними пользователями. В ответ на критику первого варианта системы управления, был сделан следующий вариант (вариант A commentary on the POSTGRES rules system) был переделан как (On Rules, Procedures, Caching and Views in Database Systems) и Версия 2, выпущенная в Июне 1990 года была основана на новой системе управления. Версия 3 выпущенная в 1991, включала в себя поддержку нескольких менеджеров хранения, улучшенный обработчик запросов и вновь переписанную систему управления. Большинство следующих версий до появления Postgres95 (см. ниже) были сфокусированы на вопросах переносимости и стабильности.
POSTGRES был использован для реализации многих различных исследований и написания приложений. Сюда вошли: система анализа финансовых данных, пакет мониторинга производительности струйных установок, база данных перемещений астероидов, база данных медицинской информации и несколько географических информационных систем. POSTGRES также использовался как средство обучения в нескольких университетах. Наконец компания Illustra Information Technologies (позднее влившаяся в компанию Informix, которой теперь владеет IBM.) взяла код этой СУБД и коммерциализировала его. POSTGRES стал приоритетным менеджером данных для проекта научных вычислений Sequoia 2000 после 1992 года.
Размер сообщества пользователей этого продукта удвоился в 1993 году. Стало весьма очевидно, что обслуживание прототипа кода и его поддержка занимают гораздо больше времени, чем сами исследования в области баз данных. Пытаясь снизить нагрузку, связанную с поддержкой, проект Беркли POSTGRES официально прекратил своё существование с выходом версии 4.2.
В 1994, Эндрю Ю (Andrew Yu) и Джолли Чен (Jolly Chen) добавили в POSTGRES интерпретатор языка SQL. Затем Postgres95 был выложен в Интернет, чтобы найти свой собственный путь в мире продуктов с открытым исходным кодом, как потомок, основанный на оригинальном коде Беркли POSTGRES.
Postgres95 был полностью приведён к стандарту ANSI C и сократил свой размер на 25%. Были внесены многие внутренние изменения, которые увеличили производительность и обслуживаемость кода. Postgres95 версий 1.0.x был быстрее на 30-50% согласно Wisconsin Benchmark по сравнению с POSTGRES, Version 4.2. За исключением исправления ошибок, были сделаны следующие серьёзные расширения:
Язык запросов PostQUEL был заменен на SQL (реализованный в этом сервере). Подзапросы не поддерживались вплоть до выхода PostgreSQL (см. ниже), но в Postgres95 их можно было симмитировать с помощью функций SQL, определяемых пользователем. Аггрегаты были переписаны. Также в запросы была добавлена поддержка GROUP BY. Интерфейс libpq остался доступным для программ на C.
В дополнении к программе monitor, была предоставлена новая программа (psql), которая использовала библиотеку GNU Readline и была предназначена для интерактивных SQL запросов.
Создана новая front-end библиотека, libpgtcl, поддерживающая клиентов, основанных на Tcl. Простая оболочка pgtclsh, предоставляющая новые команды Tcl для обеспечения взаимодействия Tcl программ и Postgres95.
Была тщательно пересмотрена работа с большими объектами. Инверсионные большие объекты представляли собой только механизм для хранения больших объектов. (Инверсионная файловая система была удалена).
Была удалена instance-level система управления. Правила были доступны как переписанные правила.
Вместе с исходным кодом стал поставляться краткий учебник по особенностям работы с SQL в Postgres95.
Для построения проекта стал использоваться GNU make (вместо BSD make). Также, Postgres95 был скомпилирован со стандартной версией GCC (выравнивание данных типа double было исправлено).
В 1996 году было решено, что имя "Postgres95" не соответствует настоящему времени. Мы выбрали новое имя PostgreSQL чтобы подчеркнуть отличие от оригинального POSTGRES и выход множества версий с поддержкой SQL. В тоже время, мы установили нумерацию версий начиная с 6.0, вернувшись обратно к нумерации, которую начали в проекте Беркли POSTGRES.
При разработке Postgres95 акцент ставился на обнаружение и понимание существующих проблем в коде продукта. В PostgreSQL акцент сместился на расширение возможностей и совместимости при продолжении работы во всех других областях.
Главные изменения в PostgreSQL включают:
Блокировка на уровне таблиц была заменена на многоверсионное управление параллельным доступом, что позволяет клиентам производящим чтение, продолжать чтение данных во время работы клиентов производящих запись, а также позволяет производить горячее резервное копирование программой pg_dump в то время, как база остается доступной для запросов.
Были реализованы такие важные возможности, как подзапросы, умолчания, ограничения целостности и триггеры.
Были добавлены возможности для обеспечения совместимости со стандартом SQL92, включая первичные ключи, идентификаторы запросов, literal string type coercion, создание типов, а также двоичный и шестнадцатеричный ввод целых чисел.
Были улучшенные встроенные типы данных, включая новые широкодиапазонные типы даты/времени и дополнительные геометрические типы данных.
Скорость работы backend кода была увеличена приблизительно на 20-40%, а время запуска backend'а было сокращено на 80% по сравнению с версией 6.0.