WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
PostgreSQL
Тип реляционная СУБД
Автор Стоунбрейкер, Майкл[1]
Разработчик сообщество PostgreSQL
Написана на Си[2][3]
Операционная система FreeBSD[4], OpenBSD[4], Linux[4], macOS[4], Solaris[4] и Microsoft Windows[4]
Первый выпуск 1995
Последняя версия
Лицензия лицензия PostgreSQL[d]
Сайт postgresql.org
 PostgreSQL на Викискладе

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

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

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

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

В PostgreSQL версии 9.5.3 есть следующие ограничения:[9]

Максимальный размер базы данныхНет ограничений
Максимальный размер таблицы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 и PL/V8, а также имеется поддержка загрузки модулей расширения на языке C [10];
  • наследование;
  • возможность индексирования геометрических объектов и наличие базирующегося на ней расширения PostGIS;
  • встроенная поддержка слабоструктурированных данных в формате JSON с возможностью их индексации;
  • расширяемость (возможность создавать новые типы данных, типы индексов, языки программирования, модули расширения, подключать любые внешние источники данных).

История

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-дерево, хеш, GiST, GIN, BRIN, Bloom. При необходимости можно создавать новые типы индексов. Индексы в PostgreSQL обладают следующими свойствами:

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

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

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

Типы данных

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

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

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

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

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

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

Наследование и партицирование

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

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

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

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

Качество исходного кода

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

Производные продукты

Лицензия PostgreSQL позволяет на его основе создавать различные, в том числе коммерческие, форки. Их известно несколько десятков [12].

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

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

Примечания

  1. https://www.postgresql.org/docs/current/history.html
  2. https://github.com/postgres/postgres
  3. The postgres Open Source Project on Open Hub: Languages Page — 2006.
  4. 1 2 3 4 5 6 https://www.postgresql.org/download/
  5. PostgreSQL News Archive
  6. Согласно FAQ, а также в соответствии с аудиозаписью эталонного произношения, встречается произношение «Постгре-Эс-Кью-Эл», которое не вполне согласуется с историей наименования (нет отдельного слова «Postgre», а частица «-gres» встречается в названиях многих реляционных СУБД).
  7. «Appendix D. SQL Conformance». PostgreSQL 9 Documentation. PostgreSQL Global Development Group. 2009 [1996]. Retrieved 2013-04-01.
  8. «SQL Conformance». postgresql.org. 2013-04-04. Retrieved 2013-08-28.
  9. PostgreSQL: About. www.postgresql.org. Проверено 15 августа 2016.
  10. PostgreSQL: Documentation: 11: Procedural Languages. www.postgresql.org. Проверено 2 марта 2019.
  11. PostgreSQL Achieves Coverity Quality Certification (англ.). PostgreSQL Global Development Group (24.07.2005). — Новость о результатах сертификации качества. Проверено 8 сентября 2009. Архивировано 24 августа 2011 года.
  12. PostgreSQL derived databases. PostgreSQL Wiki.
  13. Подход к миграции баз данных с Oracle на EnterpriseDB. Бюро Соломатина (13.12.2010). — Подход к миграции баз данных с Oracle на EnterpriseDB. Проверено 13 декабря 2010. Архивировано 24 августа 2011 года. (недоступная ссылка с 07-03-2017 [727 дней])

Ссылки

  • Евгений Балдин. PostgreSQL. Серия из шести статей, опубликованных в журнале Linux Format (2006—2007)
  • Иван Панченко. PostgreSQL: вчера, сегодня, завтра. Открытые системы. СУБД, № 03, 2015. Проверено 16 марта 2016.
  • Александр Алексеев. Серия статей о PostgreSQL. Примеры использования физической и логической репликации, полнотекстового и пространственного поиска, автоматического восстановления после сбоев, написания расширений.


Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии