PostgreSQL

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
PostgreSQL
Postgresql elephant.svg
Тип

реляционная СУБД

Разработчик

сообщество PostgreSQL

Написана на

Си[1] и SQL[1]

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

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

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

9.5.4 (11 августа 2016)[2],
9.4.9 (11 августа 2016)[2],
9.3.14 (11 августа 2016)[2],
9.2.18 (11 августа 2016)[2],
9.1.23 (11 августа 2016)[2]

Бета-версия

9.6 Beta 4 (11 августа 2016)[3]

Лицензия

лицензия PostgreSQL[d] и лицензия BSD

Сайт

postgresql.org

Commons-logo.svg PostgreSQL на Викискладе

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

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

Поддержка стандартов, возможности, особенности[править | править вики-текст]

PostgreSQL базируется на языке SQL и поддерживает многие из возможностей стандарта SQL:2011[5][6].

В PostgreSQL версии 9.5.3 есть следующие параметры:[7]

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

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

История[править | править вики-текст]

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

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

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

Основные возможности[править | править вики-текст]

Функции[править | править вики-текст]

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

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-данные
  • Массивы
  • JSON
  • Идентификаторы объектов БД
  • Псевдотипы

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

Пользовательские объекты[править | править вики-текст]

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

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

Наследование[править | править вики-текст]

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

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

Прочие возможности[править | править вики-текст]

  • Соблюдение принципов ACID
  • Соответствие стандартам ANSI SQL-92 и SQL-99
  • Поддержка запросов с OUTER JOIN, UNION, UNION ALL, EXCEPT, INTERSECT и подзапросов
  • Последовательности
  • Контроль целостности
  • Репликация
  • Общие табличные выражения и рекурсивные запросы
  • Аналитические функции
  • Поддержка Юникода (UTF-8)
  • Поддержка регулярных выражений в стиле Perl
  • Встроенная поддержка SSL, SELinux и Kerberos
  • Протокол разделяемых блокировок
  • Подгружаемые расширения, поддерживающие SHA1, MD5, XML
  • Расширения для написания сложных выборок, отчётов и т. д. (API открыт)
  • Средства для генерации совместимого с другими системами SQL-кода и импорта из других систем
  • Автономные блоки на доступных языках, а не только SQL

Надёжность[править | править вики-текст]

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

Коммерческие расширения[править | править вики-текст]

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

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

Открытые расширения[править | править вики-текст]

В 2016 году в реестр российского ПО вошла[11] СУБД Postgres Pro российской компании Postgres Professional. Эта СУБД представляет собою версию PostgreSQL с патчами для ядра PostgreSQL, которые уже приняты сообществом и внесены в основную ветку, а также с собственными расширениями, разработанными компанией Postgres Professional. Таким образом обеспечивается доступ к полезной функциональности и обновлениям почти за год до выхода нового релиза PostgreSQL.

История развития[править | править вики-текст]

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

8.3[править | править вики-текст]

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

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
  • Многоуровневая потоковая репликация

9.3[править | править вики-текст]

  • Прозрачная запись во внешние таблицы
  • Материализованные представления
  • SQL синтаксис LATERAL (аналог ROLLUP в некоторых СУБД)
  • Триггеры на события (все, кроме login/logout)
  • Диагностика повреждений файлов СУБД
  • Улучшенное использование памяти на больших серверах
  • Уменьшение числа блокировок, связанных с внешними ключами
  • Расширения функционала для работы с типом JSON

9.4[12][править | править вики-текст]

  • Изменения в автообновляемых представлениях
  • Изменение в материализированных представлениях
  • Команда ALTER SYSTEM для установки конфигурационных параметров
  • Опция WITH ORDINALITY для функций, возвращающих набор строк
  • Новые функции для агрегированных данных
  • Улучшения для индексов GIN и GiST
  • Улучшенный вывод команды EXPLAIN
  • Разогрев кэша
  • Триггеры для внешних таблиц
  • Изменения для json и новый тип данных jsonb

9.5[править | править вики-текст]

  • UPSERT
  • Безопасность на уровне строк
  • Интеграция с Big Data (BRIN-индексы, ускоренная сортировка, CUBE, ROLLUP и GROUPING SETS)

9.6[править | править вики-текст]

  • Распараллеливание некоторых операций при выполнении запросов
  • Расширение функционала оператора COPY
  • Множество мелких улучшений

Дальнейшие планы[править | править вики-текст]

  • Дальнейшие планы по развитию СУБД в рамках свободного сообщества находятся на сайте разработчиков[13]
  • 2 июня 2015 года Минкомсвязь России издала «Протокол экспертной оценки проектов по импортозамещению инфраструктурного программного обеспечения», в котором проект «СУБД PostgreSQL и связанные с ним решения», занимает 1-е место по направлению «Системы управления базами данных» протокола экспертной оценки[14].

Примечания[править | править вики-текст]

  1. 1 2 https://github.com/postgres/postgres
  2. 1 2 3 4 5 2016-08-11 Security Update Release
  3. PostgreSQL 9.6 Beta 4 Released
  4. Согласно FAQ, а также в соответствии с аудиозаписью эталонного произношения, встречается произношение «Постгре-Эс-Кью-Эл», которое не вполне согласуется с историей наименования (нет отдельного слова «Postgre», а частица «-gres» встречается в названиях многих реляционных СУБД).
  5. «Appendix D. SQL Conformance». PostgreSQL 9 Documentation. PostgreSQL Global Development Group. 2009 [1996]. Retrieved 2013-04-01.
  6. «SQL Conformance». postgresql.org. 2013-04-04. Retrieved 2013-08-28.
  7. PostgreSQL: About. www.postgresql.org. Проверено 15 августа 2016.
  8. PostgreSQL: Documentation: 8.4: Procedural Languages. www.postgresql.org. Проверено 15 августа 2016.
  9. PostgreSQL Achieves Coverity Quality Certification (англ.). PostgreSQL Global Development Group (24.07.2005). — Новость о результатах сертификации качества. Проверено 8 сентября 2009. Архивировано из первоисточника 24 августа 2011.
  10. Подход к миграции баз данных с Oracle на EnterpriseDB (рус.). Бюро Соломатина (13.12.2010). — Подход к миграции баз данных с Oracle на EnterpriseDB. Проверено 13 декабря 2010. Архивировано из первоисточника 24 августа 2011.
  11. СУБД Postgres Pro. Единый реестр российских программ. reestr.minsvyaz.ru. Проверено 8 августа 2016.
  12. blackmaster. PostgreSQL 9.4 Что нового? (29 августа 2014 в 03:09).
  13. То, что необходимо сделать.
  14. Минкомсвязь России. Протокол экспертной оценки проектов по импортозамещению инфраструктурного программного обеспечения, соответствующего пунктам 4-8 плана импортозамещения программного обеспечения (02 июня 2015 года).

Ссылки[править | править вики-текст]