PostgreSQL

PostgreSQL
PostgreSQL
Postgresql elephant.svg
Логотип PostgreSQL
Тип

Объектно-реляционная СУБД

Разработчик

сообщество PostgreSQL

Написана на

C

Операционная система

Кроссплатформенное программное обеспечение

Последняя версия

9.2.2[1] (6 декабря 2012)

Лицензия

BSD

Сайт

www.postgresql.org

PostgreSQL (произносится «Пост-Грес-Кью-Эль»[2], в профессиональной среде коротко называется «постгрес») — свободная объектно-реляционная система управления базами данных (СУБД).

Существует в реализациях для множества UNIX-like платформ, включая AIX, различные BSD-системы, HP-UX, IRIX, Linux, Mac OS X, Solaris/OpenSolaris, Tru64, QNX, а также для Microsoft Windows.

Содержание

Поддержка стандартов, возможности, особенности

PostgreSQL базируется на языке SQL и поддерживает многие из возможностей стандарта SQL:2003 (ISO/IEC 9075)[3].

На данный момент (версия 9.2.1), в PostgreSQL имеются следующие ограничения:[4]

Максимальный размер базы данных Нет ограничений
Максимальный размер таблицы 32 Тбайт
Максимальный размер записи 1,6 Тбайт
Максимальный размер поля 1 Гбайт
Максимум записей в таблице Ограничено размером таблицы
Максимум полей в таблице 250—1600, в зависимости от типов полей
Максимум индексов в таблице Нет ограничений

Сильными сторонами PostgreSQL считаются:

  • поддержка БД практически неограниченного размера;
  • мощные и надёжные механизмы транзакций и репликации;
  • расширяемая система встроенных языков программирования: в стандартной поставке поддерживаются PL/pgSQL, PL/Perl, PL/Python и PL/Tcl; дополнительно можно использовать PL/Java, PL/PHP, PL/Py, PL/R, PL/Ruby, PL/Scheme и PL/sh, а также имеется поддержка загрузки C-совместимых модулей[5];
  • наследование;
  • легкая расширяемость.

Исторический очерк

PostgreSQL ведет свою «родословную» от некоммерческой СУБД Postgres, разработанной, как и многие open-source проекты, в Калифорнийском университете в Беркли. К разработке Postgres, начавшейся в 1986 году, имел непосредственное отношение Майкл Стоунбрейкер, руководитель более раннего проекта Ingres, на тот момент уже приобретённого компанией Computer Associates. Само название «Postgres» расшифровывалось как «Post Ingres», соответственно, при создании Postgres были применены многие уже ранее сделанные наработки.

Стоунбрейкер и его студенты разрабатывали новую СУБД в течение восьми лет, с 1986 по 1994 год. За этот период в синтаксис были введены процедуры, правила, пользовательские типы и многие другие компоненты. Работа не прошла даром — в 1995 году разработка снова разделилась: Стоунбрейкер использовал полученный опыт в создании коммерческой СУБД Illustra, продвигаемой его собственной одноимённой компанией (приобретённой впоследствии компанией Informix), а его студенты разработали новую версию Postgres — Postgres95, в которой язык запросов POSTQUEL — наследие Ingres — был заменен на SQL.

В этот момент разработка Postgres95 была выведена за пределы университета и передана команде энтузиастов. С этого момента СУБД получила имя, под которым она известна и развивается в текущий момент — PostgreSQL.

Основные возможности

Функции

Функции являются блоками кода, исполняемыми на сервере, а не на клиенте БД. Хотя они могут писаться на чистом SQL, реализация дополнительной логики, например, условных переходов и циклов, выходит за рамки собственно SQL и требует использования некоторых языковых расширений. Функции могут писаться с использованием одного из следующих языков:

  • Встроенный процедурный язык PL/pgSQL, во многом аналогичный языку PL/SQL, используемому в СУБД Oracle;
  • Скриптовые языки — PL/Lua, PL/LOLCODE, PL/Perl, plPHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl и PL/Scheme;
  • Классические языки — C, C++, Java (через модуль PL/Java);
  • Статистический язык R (через модуль PL/R).

PostgreSQL допускает использование функций, возвращающих набор записей, который далее можно использовать так же, как и результат выполнения обычного запроса.

Функции могут выполняться как с правами их создателя, так и с правами текущего пользователя.

Иногда функции отождествляются с хранимыми процедурами, однако между этими понятиями есть различие. С девятой версии возможно написание автономных блоков, которые позволяют выполнять код на процедурных языках без написания функций, непосредственно в клиенте.

Триггеры

Триггеры определяются как функции, инициируемые DML-операциями. Например, операция INSERT может запускать триггер, проверяющий добавленную запись на соответствия определённым условиям. При написании функций для триггеров могут использоваться различные языки программирования (см. выше).

Триггеры ассоциируются с таблицами. Множественные триггеры выполняются в алфавитном порядке.

Правила и представления

Механизм правил (англ. rules) представляет собой механизм создания пользовательских обработчиков не только DML-операций, но и операции выборки. Основное отличие от механизма триггеров заключается в том, что правила срабатывают на этапе разбора запроса, до выбора оптимального плана выполнения и самого процесса выполнения. Правила позволяют переопределять поведение системы при выполнении SQL-операции к таблице. Хорошим примером является реализация механизма представлений (англ. views): при создании представления создается правило, которое определяет, что вместо выполнения операции выборки к представлению система должна выполнять операцию выборки к базовой таблице/таблицам с учетом условий выборки, лежащих в основе определения представления. Для создания представлений, поддерживающих операции обновления, правила для операций вставки, изменения и удаления строк должны быть определены пользователем.

Индексы

В PostgreSQL имеется поддержка индексов следующих типов: B-дерево, хэш, R-дерево, GiST, GIN. При необходимости можно создавать новые типы индексов, хотя это далеко не тривиальный процесс. Индексы в PostgreSQL обладают следующими свойствами:

  • возможен просмотр индекса не только в прямом, но и в обратном порядке — создание отдельного индекса для работы конструкции ORDER BY ... DESC не нужно;
  • возможно создание индекса над несколькими столбцами таблицы, в том числе над столбцами различных типов данных;
  • индексы могут быть функциональными, то есть строиться не на базе набора значений некоего столбца/столбцов, а на базе набора значений функции от набора значений;
  • индексы могут быть частичными, то есть строиться только по части таблицы (по некоторой её проекции); в некоторых случаях это помогает создавать намного более компактные индексы или достигать улучшения производительности за счёт использования разных типов индексов для разных (например, с точки зрения частоты обновления) частей таблицы;
  • планировщик запросов может использовать несколько индексов одновременно для выполнения сложных запросов.

Многоверсионность (MVCC)

PostgreSQL поддерживает одновременную модификацию БД несколькими пользователями с помощью механизма Multiversion Concurrency Control (MVCC). Благодаря этому соблюдаются требования ACID, и практически отпадает нужда в блокировках чтения.

Типы данных

PostgreSQL поддерживает большой набор встроенных типов данных:

  • Численные типы
    • Целые
    • С фиксированной точкой
    • С плавающей точкой
    • Денежный тип (отличается специальным форматом вывода, а в остальном аналогичен числам с фиксированной точкой с двумя знаками после запятой)
  • Символьные типы произвольной длины
  • Двоичные типы (включая BLOB)
  • Типы «дата/время» (полностью поддерживающие различные форматы, точность, форматы вывода, включая последние изменения в часовых поясах)
  • Булев тип
  • Перечисление
  • Геометрические примитивы
  • Сетевые типы
  • UUID-идентификатор
  • XML-данные
  • Массивы
  • Идентификаторы объектов БД
  • Псевдотипы

Более того, пользователь может самостоятельно создавать новые требуемые ему типы и программировать для них механизмы индексирования с помощью GiST.

Пользовательские объекты

PostgreSQL может быть расширен пользователем для собственных нужд практически в любом аспекте. Есть возможность добавлять собственные:

  • Преобразования типов
  • Типы данных
  • Домены (пользовательские типы с изначально наложенными ограничениями)
  • Функции (включая агрегатные)
  • Индексы
  • Операторы (включая переопределение уже существующих)
  • Процедурные языки

Наследование

Таблицы могут наследовать характеристики и наборы полей от других таблиц (родительских). При этом данные, добавленные в порождённую таблицу, автоматически будут участвовать (если это не указано отдельно) в запросах к родительской таблице.

Данная функциональность в текущее время не является полностью завершённой. Однако она достаточна для практического использования.

Прочие возможности

расширения для написания сложных выборок, отчётов и другую функциональность (API открыт).

  • Средства для генерации совместимого с другими системами SQL-кода и импорта из других систем.
  • Автономные блоки на доступных языках, а не только SQL

Надёжность

Согласно результатам автоматизированного исследования различного ПО на предмет ошибок, в исходном коде PostgreSQL было найдено 20 проблемных мест на 775 000 строк исходного кода (в среднем, одна ошибка на 39 000 строк кода)[6]. Для сравнения: MySQL — 97 проблем, одна ошибка на 4 000 строк кода; FreeBSD (целиком) — 306 проблем, одна ошибка на 4 000 строк кода; Linux (только ядро) — 950 проблем, одна ошибка на 10 000 строк кода.

Коммерческие расширения

На базе PostgreSQL компанией EnterpriseDB созданы более мощные варианты этой СУБД, являющиеся платными для коммерческого использования — Postgres Plus (состоит целиком только из продуктов с открытыми исходными кодами; плата требуется только при необходимости приобретения коммерческой поддержки продукта) и Postgres Plus Advanced Server (расширение PostgreSQL специальными возможностями для обеспечения совместимости с Oracle Database)[7]. В комплекте поставки данных продуктов содержится большой набор ПО для разработчиков и DBA:

  • Postgres Studio — более мощный аналог pgAdmin;
  • Postgres Plus Debugger — отладчик для кода на PL/pgSQL, интегрированный с предыдущим пакетом;
  • Migration Studio — инструмент для автоматического преобразования баз данных из MySQL/Oracle в PostgreSQL

История развития

Основные возможности СУБД по мере выхода новых версий

8.3

  • Интегрированный полнотекстовый поиск
  • Базовая поддержка для XML
  • Новый тип — перечисление
  • Массивы составных типов(структур в понимании С)
  • Новый тип — UUID(уникальный глобальный идентификатор)

8.4

  • Аналитические функции
  • Общие табличные выражения и рекурсивные запросы
  • Сопоставление локали(COLLATION) отдельно для каждой базы данных
  • Права доступа на колонку

9.0

  • Автономные блоки(использование любых разрешённых процедурных языков без создания самих процедур)
  • Асинхронная встроенная репликация с «тёплым резервом» посредством журнала транзакций
  • Поддержка 64 разрядных версий ОС WINDOWS
  • Облегчено администрирование прав на множества объектов
  • Триггеры могут быть ориентированы на отдельные столбцы и их комбинации
  • Отложенные до конца транзакции проверки уникальности
  • Ограничения типа Exclusion
  • Сверх-быстрый механизм извещений между сессиями(LISTEN/NOTIFY)

9.1

  • Синхронная репликация
  • Очень быстрые нежурналируемые таблицы
  • Сопоставление локали(COLLATION) вплоть до каждого столбца таблицы отдельно
  • Расширение возможностей общетабличных выражений для INSERT/UPDATE/DELETE
  • Доступ на чтение ко внешним источникам данных как к таблицам
  • Введён механизм пакетов расширений(extension)
  • Введён каноничный уровень изоляции serializable
  • Расширение функционала SELinux

9.2

  • Введён механизм index-only scan для планировщика
  • Новый тип данных — диапазоны(range data types)
  • Новый тип данных — JSON
  • Многоуровневая потоковая репликация

Дальнейшие планы

Дальнейшие планы по развитию СУБД находятся по адресу http://wiki.postgresql.org/wiki/Todo

Примечания

  1. http://wiki.postgresql.org/wiki/20120924updaterelease Details of 2012-09-24 Update Release
  2. Согласно FAQ, а также в соответствии с аудиозаписью эталонного произношения. Так же часто встречается произношение «Постгре-Эс-Кью-Эл», которое не вполне согласуется с историей наименования (нет отдельного слова «Postgre», а частица «-gres» встречается в названиях многих реляционных СУБД). В разделе «Исторический очерк» вы можете прочитать чем вызваны такие неопределённости.
  3. PostgreSQL 8.4.5 Documentation. Appendix D. SQL Conformance
  4. PostgreSQL: About
  5. PostgreSQL 8.4.5 Documentation. Chapter 37. Procedural Languages
  6. PostgreSQL Achieves Coverity Quality Certification  (англ.). PostgreSQL Global Development Group (24.07.2005). — Новость о результатах сертификации качества. Архивировано из первоисточника 24 августа 2011. Проверено 8 сентября 2009.
  7. Подход к миграции баз данных с Oracle на EnterpriseDB  (рус.). Бюро Соломатина (13.12.2010). — Подход к миграции баз данных с Oracle на EnterpriseDB. Архивировано из первоисточника 24 августа 2011. Проверено 13 декабря 2010.

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "PostgreSQL" в других словарях:

  • PostgreSQL — Developer(s) PostgreSQL Global Development Group Stable release 9.1.1[1] / 9.0.5 …   Wikipedia

  • PostgreSQL — Saltar a navegación, búsqueda PostgreSQL …   Wikipedia Español

  • PostgreSQL — Entwickler PostgreSQL Team Aktuelle Version 9.1.1 …   Deutsch Wikipedia

  • Postgresql — Entwickler: PostgreSQL Team Aktuelle Version …   Deutsch Wikipedia

  • PostgreSQL — Développeur Michael Stonebraker Première version 1995 Dernière version …   Wikipédia en Français

  • PostGreSQL — Développeur Michael Stonebraker Première version 1985 Derniè …   Wikipédia en Français

  • Postgresql — Développeur Michael Stonebraker Première version 1985 Derniè …   Wikipédia en Français

  • PostgreSQL — es un servidor de base de datos relacional libre, liberado bajo la licencia BSD. Es una alternativa a otros sistemas de bases de datos de código abierto (como MySQL, Firebird y MaxDB), así como sistemas propietarios como Oracle o DB2. A …   Enciclopedia Universal

  • PostgreSQL — eigentliche Schreibweise von postgresql …   Acronyms

  • PostgreSQL — eigentliche Schreibweise von postgresql …   Acronyms von A bis Z


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»