PostgreSQL

редактировать
Бесплатная система управления реляционными базами данных с открытым исходным кодом

PostgreSQL
The World's Most Advanced Open Source Relational Database[1] Самая продвинутая в мире реляционная база данных с открытым исходным кодом
Разработчик (и) Global Development Group PostgreSQL
Первоначальный выпуск8 июля 1996 г.;. 24 года назад (1996-07-08)
Стабильный выпуск 13.0 / 24 сентября 2020; 40 дней назад (24 сентября 2020 г.)
Репозиторий Измените это в Викиданных
Написано наC
Операционная система FreeBSD, Linux, macOS, OpenBSD, Windows
Тип СУБД
Лицензия Лицензия PostgreSQL (бесплатно и с открытым исходным кодом, разрешающий )
Веб-сайтpostgresql.org
Лицензия PostgreSQL
Издатель PostgreSQL Группа глобального развития. Регенты Калифорнийского университета
Совместимость с Debian FSG Да
FSF одобрено Да
OSI одобрено Да
Совместимость с GPL Да
Копилефт No
Ссылка из кода с другой лицензией Да
Веб-сайтpostgresql.org / о / license

PostgreSQL (), также известный как Postgres, является бесплатным и открытым исходным кодом система управления реляционными базами данных (СУБД), подчеркивающая расширяемость и соответствие SQL. со юзник по имени POSTGRES, ссылаясь на его происхождение как преемника базы данных Ingres, разработанной в Калифорнийском университете в Беркли. В 1996 году проект был переименован в PostgreSQL, чтобы отразить поддержку SQL. После обзора в 2007 году группа разработчиков решила сохранить имя PostgreSQL и псевдоним Postgres.

PostgreSQL включает транзакции с атомарностью, согласованностью, изоляцией, долговечностью (ACID), автоматически обновляемые представления, материализованные представления, триггеры, внешние ключи и хранимые процедуры. Он для обработки ряда рабочих нагрузок, от отдельных компьютеров до хранилищ данных или веб-сервисов с множеством одновременных пользователей. Это база данных по умолчанию для macOS Server, а также для Linux, FreeBSD, OpenBSD и Windows.

Содержание
  • 1 История
  • 2 Многовариантный контроль параллелизма (MVCC)
  • 3 Хранение и репликация
    • 3.1 Репликация
    • 3.2 Индексы
    • 3.3 Схемы
    • 3.4 Типы данных
    • 3.5 Пользовательские объекты
    • 3.6 Наследование
    • 3.7 Другие функции хранения
  • 4 Управление и связь
    • 4.1 Оболочки сторонних данных
    • 4.2 Интерфейсы
    • 4.3 Процедурные языки
    • 4.4 Триггеры
    • 4.5 Асинхронные записи
    • 4.6 Правила
    • 4.7 Другие функции запросов
    • 4.8 Модель параллелизма
  • 5 Безопасность
  • 6 Соответствие стандартам
  • 7 Тесты и производительность
  • 8 Платформы
  • 9 Администрирование баз данных
  • 10 Известные пользователи
  • 11 Реализации службы
  • 12 История выпусков
  • 13 См. Также
  • 14 Ссылки
  • 15 Дополнительная литература
  • 16 Внешние ссылки
История

PostgreSQL произошел от проекта Ingres в университете. Калифорнии, Беркли. В 1982 году лидер команды Ingres, Майкл Стоунбрейкер, покинул Беркли, чтобы создать частную версию Ingres. Он вернулся в Беркли в 1985 году и начал пост-Ingres решение проблемы с современными системами баз данных, которые стали все более очевидными в начале 1980-х. Он выиграл Премию Тьюринга в 2014 году за эти и другие проекты и впервые примененные в них методы.

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

SIGMOD 1988 года, начиная с 1986 года, опубликована основа системы, прототипная версия описанных данных. Конференция. Команда выпустила версию 1 для небольшого числа пользователей в июне 1989 г., а затем версию 2 с переписанной системой правил в июне 1990 г. Версия 3, выпущенная в 1991 г., снова переписала систему правил и добавила поддержку нескольких менеджеров хранения и улучшенный механизм запросов. К 1993 году количество пользователей начало заваливать проект просьбами о поддержке и функциях. После выпуска версии 4.2 30 июня 1994 г. - в первую очередь очистки - проект завершился. Беркли выпустил POSTGRES в соответствии с использованием лицензии MIT, что позволяет другим разработчикам использовать код для любого использования. В то время POSTGRES использовал интерпретатор языка запросов POSTQUEL под регионом Ingres, который можно интерактивно использовать с консольным приложением с именем monitor.

. В 1994 году аспиранты Беркли Эндрю Ю и Джолли Чен заменили интерпретатор языка запросов POSTQUEL на интерпретатор для языка запросов SQL, создаваемый Postgres95. monitorтакже был заменен на psql. Ю и Чен объявили о первой версии (0.01) для бета-тестеров 5 мая 1995 года. Версия 1.0 Postgres95 была анонсирована 5 сентября 1995 года с более либеральной лицензией, которая позволяетла свободно программное обеспечение..

8 июля 1996 года Марк Фурнье из Hub.org Сетевые службы предоставил первый неуниверситетский сервер разработки для разработки с открытым исходным кодом. При участии Брюса Момджяна и Вадима Б. Михеева началась работа по стабилизации кода, унаследованного от Беркли.

В 1996 году был проект переименован в PostgreSQL, чтобы отразить поддержку SQL. Онлайн-присутствие на веб-сайте PostgreSQL.org началось 22 октября 1996 года. Первый выпуск PostgreSQL образовал версию 6.0 29 января 1997 года. С тех пор разработчики и добровольцы по всему миру программного обеспечения как The PostgreSQL Global Development Group.

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

Управление многоверсионным параллелизмом (MVCC)

PostgreSQL управляет параллелизмом через управление многоверсионным параллелизмом (MVCC), которое дает каждую транзакцию «моментальный снимок» базы данных, позволяющая вносить изменения, не рассматривающая другие транзакции. Это в степени устраняет необходимость в блокировках чтения и гарантирует, что база данных поддерживает принципы ACID. PostgreSQL предлагает три уровня изолированной транзакции : фиксированное чтение, повторное чтение и сериализуемый. PostgreSQL невосприимчив к грязному чтению, запрос уровня изоляции транзакции Прочитать без фиксации вместо этого обеспечивает фиксацию чтения. PostgreSQL поддерживает полную сериализуемость с помощью сериализуемого метода изоляции моментальных снимков (SSI).

Хранение и репликация

Репликация

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

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

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

Синхронная репликация с использованием мастеров не включена в ядро ​​PostgreSQL. Postgres-XC, основанный на PostgreSQL, обеспечивает масштабируемую синхронную репликацию с использованием мастерами. Он находится под той же лицензией, что и PostgreSQL. Связанный проект называется Postgres-XL. Postgres-R - это еще один форк . Двунаправленная репликация (BDR) - это асинхронная система репликации с использованием мастеров для PostgreSQL.

Такие инструменты, как repmgr, упрощают управление кластерами репликации.

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

  • Slony-I
  • Londiste, часть SkyTools (разработано Skype )
  • Bucardo репликация с территории мастерами (обеспечивается Backcountry.com )
  • SymmetricDS с использованием мастерами, многоуровневая репликация

YugabyteDB - это база данных, которая использует интерфейс PostgreSQL с дополнительными возможностями NoSQL -подобный бэкэнд. Он решает проблемы репликации с помощью реализации идей из Google Spanner. Такие базы данных называются NewSQL и включают в себя, его можно другую базу данных, по сути рассматривать это PostgreSQL с помощью других бэкэнд-хранилищ. Среди прочего, CockroachDB и TiDB.

Индексы

PostgreSQL включает встроенные -в поддержки обычных индексов B-tree и хэш-таблицы, а также четырех методов доступа к индексу: обобщенные деревья поиска (GiST ), обобщенные инвертированные индексы (GIN), GiST с разделением по пространству (SP-GiST) и индексы диапазонов блоков (BRIN). Кроме того, можно создать используемые методы индексции, хотя это довольно сложный процесс. Индексы в PostgreSQL также следующие функции: Индексы выражений могут быть созданы с помощью индекса результата выражения или функции, а не просто значения столбца.

  • Частичные индексы, которые индексируют часть таблицы, можно создать, добавить предложение ГДЕ в конец оператора СОЗДАТЬ ИНДЕКС. Это позволяет создать меньший индекс.
  • Планировщик может использовать несколько индексов вместе для удовлетворения сложных запросов, используя временные операции в памяти растрового индекса (полезно для данных Склад приложения для объединения большой таблицы фактов с меньшими таблицами измерений, например, расположенными в схеме звезда ).
  • k-ближайшие соседи (k -NN) индексирование (также называемое KNN-GiST) обеспечивает эффективный поиск « ближайших значений »к указанным, полезно для поиска похожих слов или близких объектов или местоположений с использует распространенные данные.
  • Сканирование только индекс часто позволяет системе извлекать данные из индексов,
  • Представлен PostgreSQL 9.5 Индексы диапазона блоков (BRIN).
  • Схемы

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

    A search_path Параметропределяет порядок, в котором PostgreSQL проверяет схемы на наличие неквалифицированных рабочих объектов (тех, у которых нет схемы с префиксом). По умолчанию установлено значение $ user, public($ userотносится к текущему подключенному пользователю базы данных). Это значение по умолчанию может быть установлено на уровне базы данных или роли, но, поскольку это параметр сеанса, его можно свободно использовать (даже несколько раз) во время сеанса клиента, влияя только на этот сеанс.

    Несуществующие схемы, перечисленные в search_path, автоматически пропускаются во время поиска объектов.

    Новые объекты в зависимости от того, какая действующая схема (существующая в настоящее время) появляется первой в search_path.

    Типы данных

    Поддерживается широкий спектр типов данных, в том числе:

    Кроме того, пользователи могут создать свои собственные данные, которые обычно можно сделать полностью индивидуальными exable через инфраструктуру индексирования PostgreSQL - GiST, GIN, SP-GiST. Примеры таких данных включают типы данных географической информационной системы (ГИС) из проекта PostGIS для PostgreSQL.

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

    Можно использовать тип данных, представляющий диапазон данных, называемый типом диапазона. Это могут быть дискретные диапазоны (например, все целые числа от 1 до 10) или непрерывные диапазоны (например, любое время между 10:00 и 11:00). Доступные встроенные типы диапазонов включают диапазоны целых чисел, большие целые числа, десятичные числа, отметки времени (с часовым поясом и без него) и даты.

    Пользовательские типы диапазонов могут быть созданы, чтобы сделать доступные новые типы диапазонов, например диапазоны IP-адресов, использующие тип inet в качестве основы, или диапазоны с плавающей запятой, использующие тип данных float в качестве основы. Типы диапазонов включающие и исключающие границы диапазона с использованием символов [/]и (/)соответственно. (например, [4,9)представляет все целые числа, начиная с 4 и заканчивая 9, но не включая его.) Типы диапазонов также совместимы с существующими операторами, используемыми для проверки перекрытия, включения, права на и его. т. д.

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

    Могут быть созданы новые типы почти всех объектов внутри базы данных, включая:

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

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

    Таблицы можно настроить так, чтобы они наследовали свои характеристики от родительской таблицы. Данные в дочерних таблицах будут существовать в родительских таблицах, если данные не выбраны из родительской таблицы ТОЛЬКО с помощью ключевого слова, т. Е. SELECT * FROM parent_table;. Добавление столбца в родительскую таблицу приведет к тому, что этот столбец появится в дочерней таблице.

    Наследование ca n можно использовать для реализации разделения таблицы с использованием триггеров или правил для направления вставок в роди тельскую таблицу в соответствующие дочерние таблицы.

    По состоянию на 2010 год эта функция еще не полностью поддерживается - в части ограничения таблицы в настоящее время не наследуются. Все проверочные ограничения и ограничения, не равные NULL в родительской таблице, автоматически наследуются ее дочерними элементами. Другие типы ограничений (ограничения уникальности, первичного ключа и внешнего ключа) не наследуются.

    Наследование позволяет отображать особенности иерархий обобщения, изображенные на диаграммах отношений сущностей (ERD), непосредственно в базу данных PostgreSQL.

    Другие функции хранения

    • Ограничения ссылочной целостности, включая ограничения внешнего ключа, ограничения столбца и проверки строк
    • Двоичные и текстовые хранилище больших объектов
    • Табличные пространства
    • Сортировка по столбцам
    • Онлайн-резервное копирование
    • Восстановление на определенный момент времени, реализованное с использованием журнала с упреждающей записью
    • In- размещайте обновления с помощью pg_upgrade для сокращения времени простоя (поддерживает обновления с 8.3.x и более поздних версий)
    Управление и связь

    Оболочки сторонних данных

    PostgreSQL может связываться с другими системами для получения данных через сторонние данные обертки (FDW). Они могут принимать форму любого источника данных, например файловой системы, другой реляционной базы данных системы управления (RDBMS) или веб-службы. Это означает, что обычные запросы к базе данных могут использовать эти источники данных как обычные таблицы и даже объединять несколько источников данных вместе.

    Интерфейсы

    Для подключения к приложениям PostgreSQL включает встроенные интерфейсы libpq (официальный интерфейс приложения C) и ECPG (встроенная система C). Сторонние библиотеки для подключения к PostgreSQL доступны для многих языков программирования, включая C ++, Java, Python, Node.js,Go и Rust.

    процедурные языки

    процедурные языки позволяют разработчикам расширять базу данных с помощью пользовательских подпрограмм (функций), часто называемых хранимых процедур. Эти функции могут использоваться для создания триггеров базы данных (функции, вызываемые при изменении определенных данных), а также пользовательских типов данных и агрегатных функций. Процедурные языки также могут быть вызваны без определения функции с помощью команды DO на уровне SQL.

    Языки делятся на две группы: Процедуры, написанные на безопасных языках, изолированы от и могут быть безопасно созданы и используется любым пользователем. Процедуры, написанные на небезопасных языках, могут быть созданы только суперпользователями, поскольку они позволяют обходить ограничения безопасности базы данных, но также могут обращаться к источникам, внешним по отношению к базе данных. Некоторые языки, такие как Perl, предоставляют как безопасные, так и небезопасные версии.

    PostgreSQL имеет встроенную поддержку трех процедурных языков:

    • Plain SQL (безопасный). Более простые функции SQL могут получить развернутый встроенный в вызывающий (SQL) запрос, что экономит накладные расходы на вызов функции и позволяет оптимизатору запросов «заглядывать внутрь» функции.
    • Процедурный язык / PostgreSQL ( PL / pgSQL ) (безопасный), который напоминает процедурный язык Oracle Procedural Language для SQL (PL / SQL ) и модули SQL / Persistent Stored Modules (SQL / PSM ).
    • C (небезопасно), что позволяет загружать в базу данных одну или несколько пользовательских разделяемых библиотек . Функции, написанные на C, обеспечивают лучшую производительность, но ошибки в коде могут привести к сбою и потенциально повреждению базы данных. Большинство встроенных функций написано на C.

    Кроме того, PostgreSQL позволяет загружать процедурные языки в базу данных через расширения. В PostgreSQL включены три языковых расширения для поддержки Perl, Python (по умолчанию Возможно Python 2 или Python 3) и Tcl. Существуют внешние проекты для добавления поддержки многих других языков, включая Java, JavaScript (PL / V8), R, Ruby и другие.

    Триггеры

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

    Триггеры полностью поддерживаются и могут быть прикреплены к таблицам. Триггеры могут быть для столбцов и условными, поскольку триггеры UPDATE могут быть нацелены на определенные столбцы таблицы, а триггерам можно указать для выполнения при наборе условий, указанных в предложении WHERE триггера. Триггеры могут быть прикреплены к представлениям с помощью условия INSTEAD OF. Несколько триггеров запускаются в алфавитном порядке. В дополнение к вызову функций, написанных на родном PL / pgSQL, триггеры также могут вызывать функции, написанные на других языках, таких как PL / Python или PL / Perl.

    Асинхронные уведомления

    PostgreSQL предоставляет систему асинхронного обмена сообщениями, доступ к которой осуществляется с помощью команд NOTIFY, LISTEN и UNLISTEN. Сеанс может выдать команду NOTIFY вместе с указанным пользователем каналом и дополнительной полезной нагрузкой, чтобы отметить происходящее конкретное событие. Другие сеансы могут обнаружить эти события, выполнив команду LISTEN, которая может прослушивать определенный канал. Эта функция может использоваться для самых разных целей, например, для сообщения другим сеансам информации об обновлении таблицы или для обнаружения отдельными приложениями, когда было выполнено определенное действие. Такая система предотвращает необходимость в непрерывном опросе приложениями, чтобы увидеть, не изменилось ли что-нибудь, и сокращает ненужные накладные расходы. Уведомления являются полностью транзакционными, поскольку сообщения не отправляются до тех пор, пока транзакция, из которой они были отправлены, не зафиксирована. Это устраняет проблему отправки сообщений о выполняемом действии, которое затем откатывается.

    Многие соединители для PostgreSQL обеспечивают поддержку этой системы уведомлений (включая libpq, JDBC, Npgsql, psycopg и node.js), поэтому ее могут использовать внешние приложения.

    PostgreSQL может действовать как эффективный, постоянный "pub / sub" сервер или сервер заданий, комбинируя LISTEN с FOR UPDATE SKIP LOCKED, комбинацию, которая существует с PostgreSQL версии 9.5

    Правила

    Правила позволяют переписывать «дерево запросов» входящего запроса. «Правила перезаписи запросов» прикрепляются к таблице / классу и «перезаписывают» входящий DML (выбор, вставка, обновление и / или удаление) в один или несколько запросов, которые либо заменяют исходный оператор DML, либо выполняются в дополнение к нему. Повторная запись запроса происходит после синтаксического анализа оператора DML, но до планирования запроса.

    Другие функции запросов

    • Транзакции
    • Полнотекстовый поиск
    • Представления
      • Материализованные представления
      • Обновляемые представления
      • Рекурсивные представления
    • Внутреннее, внешнее (полное, левое и правое) и перекрестное объединение
    • Подложка выбирает
      • Коррелированные подзапросы
    • Регулярные выражения
    • общие табличные выражения и доступны для записи общие табличные выражения
    • Зашифрованные соединения через Transport Layer Security (TLS); текущие версии не используют уязвимый SSL, даже с этой опцией конфигурации
    • Домены
    • Точки сохранения
    • Двухфазная фиксация
    • Техника хранения негабаритных атрибутов (TOAST) используется для прозрачного хранения больших таблиц атрибуты (например, большие вложения MIME или сообщения XML) в отдельной области с автоматическим сжатием.
    • Встроенный SQL реализован с использованием препроцессора. Код SQL сначала записывается встроенным в код C. Затем код запускается через препроцессор ECPG, который заменяет SQL вызовами библиотеки кода. Затем код можно скомпилировать с помощью компилятора C. Встраивание также работает с C ++, но оно не распознает все конструкции C ++.

    Модель параллелизма

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

    Безопасность

    PostgreSQL управляет своей внутренней безопасностью для каждой роли. Роль обычно рассматривается как пользователь (роль, которая может войти в систему) или группа (роль, членами которой являются другие роли). Разрешения могут быть предоставлены или отозваны для любого объекта до уровня столбца, а также могут разрешить / запретить создание новых объектов на уровне базы данных, схемы или таблицы.

    Функция SECURITY LABEL PostgreSQL (расширение стандартов SQL) обеспечивает дополнительную безопасность; со встроенным загружаемым модулем, который поддерживает управление принудительным доступом на основе меток (MAC) на основе политики безопасности Security-Enhanced Linux (SELinux).

    PostgreSQL изначально поддерживает большое количество внешних механизмов аутентификации, в том числе:

    Методы GSSAPI, SSPI, Kerberos, однорангового узла, идентификатора и сертификата также могут использовать указанный файл "карты", в котором перечислены пользователи, сопоставленные с этой системой аутентификации. подключиться как конкретные данные базовый пользователь.

    Эти методы указаны в файле конфигурации аутентификации на основе хоста кластера (pg_hba.conf), который определяет, какие соединения разрешены. Это позволяет контролировать, какой пользователь может подключаться к какой базе данных, откуда они могут подключаться (IP-адрес, диапазон IP-адресов, доменный сокет), какая система аутентификации будет применяться, и должно ли соединение использовать Transport Layer Security (TLS).

    Соответствие стандартам

    PostgreSQL заявляет о высоком, но не полном соответствии стандарту SQL. Единственным исключением является обработка идентификаторов без кавычек, таких как имена таблиц или столбцов. В PostgreSQL они сворачиваются внутри до символов нижнего регистра, тогда как в стандарте говорится, что идентификаторы без кавычек должны быть свёрнуты до верхнего регистра. Таким образом, Fooдолжен быть эквивалентен FOO, а не fooсогласно стандарту.

    Тесты и производительность

    Было проведено много неофициальных исследований производительности PostgreSQL. Улучшения производительности, направленные на улучшение масштабируемости, в значительной степени начались с версии 8.1. Простые тесты между версией 8.0 и версией 8.4 показали, что последняя была более чем в 10 раз быстрее для рабочих нагрузок только для чтения и как минимум в 7,5 раз быстрее для рабочих нагрузок чтения и записи.

    Первый отраслевой стандарт и одноранговый проверенный эталонный тест был завершен в июне 2007 г. с использованием сервера приложений Sun Java System (проприетарная версия GlassFish ) 9.0 Platform Edition, сервер Sun Fire на основе UltraSPARC T1 и PostgreSQL 8.2. Этот результат 778,14 JOPS @ Standard в SPECjAppServer2004 выгодно отличается от 874 JOPS @ Standard с Oracle 10 в системе Itanium HP-UX.

    В августе 2007 г., Sun представила улучшенный результат теста SPECjAppServer2004 JOPS @ Standard - 813,73. С тестируемой системой по сниженной цене соотношение цена / производительность улучшилось с 84,98 долл. / JOPS до 70,57 долл. США / JOPS.

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

    В апреле 2012 года Роберт Хаас из EnterpriseDB продемонстрировал линейную масштабируемость ЦП PostgreSQL 9.2 с использованием сервера с 64 ядрами.

    Matloob Khushi провели сравнительный анализ Postgresql 9.0 и MySQL 5.6.15 на их способность обрабатывать геномные данные. В своем анализе производительности он обнаружил, что PostgreSQL извлекает перекрывающиеся области генома в восемь раз быстрее, чем MySQL, используя два набора данных по 80000 в каждом, формируя случайные участки ДНК человека. Вставка и загрузка данных в PostgreSQL также были лучше, хотя общие возможности поиска в обеих базах данных были почти одинаковыми.

    Платформы

    PostgreSQL доступен для следующих операционных систем: Linux (все последние дистрибутивы), доступны 64-разрядные установщики для macOS (OS X) версии 10.6 и новее - Windows (с установщиками, доступными для 64-разрядной версии; протестировано на последних версиях и назад к Windows 2012 R2, в то время как для PostgreSQL версии 10 и старше доступен 32-разрядный установщик, который протестирован до 32-разрядной версии Windows 2008 R1; компилируется, например, Visual Studio, от версии 2013 до последней версии 2019) - FreeBSD, OpenBSD, NetBSD, AIX, HP-UX, Solaris и UnixWare ; и официально не тестировались: DragonFly BSD, BSD / OS, IRIX, OpenIndiana, OpenSolaris, OpenServer и Tru64 UNIX. Большинство других Unix-подобных систем также могут работать; самая современная вообще поддержка.

    PostgreSQL работает на любой из следующих архитектур набора команд : x86 и x86-64 в Windows и других операционных системах; они поддерживаются не в Windows: IA-64 Itanium (внешняя поддержка HP-UX), PowerPC, PowerPC 64, S / 390, S / 390x, SPARC, SPARC 64, ARMv8 -A (64-бит ) и более ранние версии ARM (32-бит, включая более старые, такие как ARMv6 в Raspberry Pi ), MIPS, MIPSel и PA-RISC. Также известно, что он работает на некоторых других платформах (хотя не тестировался годами, то есть для последних версий).

    Администрирование баз данных

    Интерфейсы с открытым исходным кодом и инструменты для администрирования PostgreSQL включают :

    psql
    Основным интерфейсом для PostgreSQL является psqlпрограмма командной строки, которую можно использовать для ввода Запросы SQL напрямую или их выполнение из файла. Кроме того, psql предоставляет ряд мета-команд и различных функций, подобных оболочке, для облегчения написания сценариев и автоматизации широкого спектра задач; например, завершение имен объектов с помощью табуляции и синтаксиса SQL.
    pgAdmin
    Пакет pgAdmin - это бесплатный графический пользовательский интерфейс с открытым исходным кодом (GUI) для администрирования PostgreSQL., который поддерживается на многих компьютерных платформах. Программа доступна более чем на десятке языков. The first prototype, named pgManager, was written for PostgreSQL 6.3.2 from 1998, and rewritten and released as pgAdmin under the GNU General Public License (GPL) in later months. The second incarnation (named pgAdmin II) was a complete rewrite, first released on January 16, 2002. The third version, pgAdmin III, was originally released under the Artistic License and then released under the same license as PostgreSQL. Unlike prior versions that were written in Visual Basic, pgAdmin III is written in C++, using the wxWidgets framework allowing it to run on most common operating systems. The query tool includes a scripting language called pgScript for supporting admin and development tasks. In December 2014, Dave Page, the pgAdmin project founder and primary developer, announced that with the shift towards web-based models, work has begun on pgAdmin 4 with the aim to facilitate cloud deployments. In 2016, pgAdmin 4 was released. pgAdmin 4 backend was written in Python, using Flask and Qt fram ework.
    phpPgAdmin
    phpPgAdmin - это веб-инструмент администрирования PostgreSQL, написанный на PHP и основанный на популярном интерфейсе phpMyAdmin, изначально написанном для администрирования MySQL. 331>
    PostgreSQL Studio
    PostgreSQL Studio позволяет пользователям выполнять важные задачи разработки баз данных PostgreSQL с веб-консоли. PostgreSQL Studio позволяет пользователям работать с облачными базами данных без необходимости открывать брандмауэры.
    TeamPostgreSQL
    Управляемый AJAX / JavaScript веб-интерфейс для PostgreSQL. Позволяет просматривать, поддерживать и создавать данные и объекты базы данных через веб-браузер. Интерфейс предлагает редактор SQL с вкладками с автозаполнением, виджеты редактирования строк, навигацию по внешнему ключу между строками и таблицами, управление избранным для часто используемых сценариев, а также другие функции. Поддерживает SSH как для веб-интерфейса, так и для соединений с базой данных. Доступны установщики для Windows, Macintosh и Linux, а также простой межплатформенный архив, запускаемый из сценария.
    LibreOffice, OpenOffice.org
    LibreOffice и OpenOffice.org Base может использоваться как интерфейс для PostgreSQL.
    pgBadger
    Анализатор журналов pgBadger PostgreSQL генерирует подробные отчеты из файла журнала PostgreSQL.
    pgDevOps
    pgDevOps - это набор веб-инструментов для установки и управления несколькими версиями PostgreSQL, расширений и компонентов сообщества, разработки SQL-запросов, мониторинга работающих баз данных и поиска проблем с производительностью.
    Adminer
    Adminer - это простой веб-инструмент администрирования PostgreSQL и других, написанный на PHP.

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

    Известные пользователи

    Известные организации и продукты, использующие PostgreSQL в качестве первичной базы данных, включают:

    Реализации служб

    Некоторые известные производители предоставляют PostgreSQL as программное обеспечение как услуга :

    • Heroku, платформа как поставщик услуг, поддерживает PostgreSQL с самого начала в 2007 году. Они предоставляют дополнительные функции, такие как полный откат базы данных, которая основана на WAL-E, программном блоке с открытым исходным кодом, разработанном Heroku.
    • В январе 2012 года EnterpriseDB выпустила облачную версию PostgreSQL, так и собственный проприетарный сервер Postgres Plus Advanced Server с автоматическим выделением ресурсов для аварийного переключения, репликации, балансировки нагрузки и масштабирования. Он работает на Amazon Web Services. С 2015 года предлагается Postgres Advanced Server как ApsaraDB для PPAS, реляционной базы данных как услуги в Alibaba Cloud.
    • VMware предлагает vFabric Postgres (также называемый vPostgres) для частных облаков на VMware vSphere с мая 2012 года. Компания объявила об окончании доступности (EOA) продукта в 2014 году.
    • В ноябре 2013 года Amazon Web Services объявили о добавлении PostgreSQL в свой Предложение службы реляционных баз данных.
    • В ноябре 2016 года Amazon Web Services объявила о добавлении совместимости с PostgreSQL к своему предложению облачных управляемых баз данных Amazon Aurora.
    • В мае 2017 года Microsoft Azure анонсировала базы данных Azure для PostgreSQL
    • В мае 2019 года Alibaba Cloud анонсировала PolarDB для PostgreSQL.
    • Jelastic Multicloud Платформа как услуга обеспечивает поддержку PostgreSQL на основе контейнеров с 2011 года. Они предоставляют автоматическую асинхронную репликацию Postgr в режиме master-slave. eSQL доступен на торговой площадке.
    • В июне 2019 года IBM Cloud анонсировала IBM Cloud Hyper Protect DBaaS for PostgreSQL.
    История выпусков
    История выпусков
    ВыпускПервый выпускПоследняя дополнительная версияПоследняя версияКонец. жизниОсновные этапы
    6.01997-01 -29Н / ДН / ПН / ППервый официальный выпуск PostgreSQL, уникальные индексы, pg_dumpall служебная программа, идентификация аутентификации
    6.11997-06-08Старая версия, больше не поддерживается: 6.1.11997-07-22Н / ДМногоколоночные индексы, используйте, денежный тип данных, GEQO (GEnetic Query Optimizer)
    6.21997-10-02Старая версия, больше не поддерживается: 6.2.11997-10-17Н / ДИнтерфейс JDBC, триггеры, интерфейс программирования сервера, ограничения
    6.31998- 03-01Старая версия, больше не поддерживается: 6.3.21998-04-072003-03-01S Возможность подвыбора QL-92, PL / pgTCL
    6.41998-10-30Старая версия, больше не поддерживается: 6.4.21998-12-20 202003-10-30ПРОСМОТРЫ (тогда только для чтения) и ПРАВИЛА, PL / pgSQL
    6.51999-06-09Старая версия, больше не поддерживается: 6.5.31999-10-132004-06-09MVCC, временные таблицы, пр. Поддержка операторов SQL (CASE, INTERSECT и EXCEPT)
    7.02008-05-08Старая версия, больше не поддерживается: 7.0.32000-11 -1108.05.2004Внешние ключи, синтаксис SQL-92 для объединений
    7.113.04.2001Старая версия, больше не поддерживается: 7.1.315.08.200113.04.2006Журнал упреждающей записи, внешние соединения
    7.204.02.2002Старая версия, больше не поддерживается: 7.2.82005-05-092007-02-04PL / Python, OID больше не требуется, интернационализация сообщений
    7.327.11.2002Старая версия, больше не поддерживается: 7.3.212007-01-072007-11-27Схема, табличная функция, подготовленный запрос
    7.417.11.2003Старая версия, больше не поддерживается: 7.4.3004.10.201001.10.2010Оптимизация JOINs и функций х ранилища данных
    8.02005-01-19Старая версия, больше не поддерживается: 8.0.2604.10.201001.10.2010Собственный сервер в Microsoft Windows, точки сохранения, табличные пространства, восстановление на момент времени
    8.12005-11-08Старая версия, больше не поддерживается: 8.1.2316.12.201008.11.2010Оптимизация производительности, двухэтапная фиксация, разделение таблицы , сканирование растрового изображения индекс, общая строка блокировка, роли
    8.205.12.2006Старая версия, больше не поддерживается: 8.2.2305.12.201105.12.2011Оптимизация производительности, построение онлайн-индексов, советник y блокировки, теплый режим ожидания
    8.304.02.2008Старая версия, больше не поддерживается: 8.3.2307.02.201307.02.2013Кортежи только в куче, полнотекстовый поиск, SQL / XML, типы ENUM, типы UUID
    8.401.07.2009Старая версия, больше не поддерживается: 8.4.2224.07.201424.07.2014Оконные функции, разрешение на уровне столбцов, параллельное восстановление базы данных, сортировка для каждой базы данных, общие табличные выражения и рекурсивные запросы
    9.02010-09-20Старая версия, больше не поддерживается: 9.0.2308.10.201508.10.2015Встроенная двоичная потоковая передача репликация, горячее резервирование, возможность обновления на месте, 64-битная Windows
    9.12011-09-12Старая версия, больше не поддерживается: 9.1.2427.10.201627.10.2016Синхронная репликация, сопоставления по столбцам , незарегистрированные таблицы, сериализуемый снимок изоляции, общие табличные выражения с помощью запи си, интеграция с SELinux, расширения, сторонние таблицы
    9.22012-09-10Старая версия, больше не поддерживается: 9.2.2409.11.201709.11.2017Каскадная потоковая репликация, сканирование только индекс, встроенная поддержка JSON, улучшенное управление блокировками, типы диапазонов, инструмент pg_receivexlog, индексы GiST с разделением по пространству
    9.309.09.2013Старая версия, больше не поддерживается: 9.3.2508.11.20132018-11-08Пользовательские фоновые рабочие процессы, контрольные суммы данных, выделенные операторы JSON, LATERAL JOIN, более быстрый pg_dump, новый инструмент мониторинга сервера pg_isready, функции триггеров, функции просмотра, внешние таблицы с помощью записи, материализованные представления, улучшения репликации
    9.418.12.2014Старая версия, больше не поддерживается: 9.4.262020-02-13202 0-02-13Тип данных JSONB, оператор ALTER SYSTEM для изменения значений конфигурации, возможность обновления мата эриализованные представления без блокировки чтения, динамическая регистрация / запуск / остановка фоновых рабочих процессов, API-кодирования, улучшение индекс GiN, поддержка огромных страниц в Linux, перезагрузка кеша базы данных через pg_prewarm, повторное введение Hstore в качестве типа столбца для данных в стиле документа.
    9.507.01.2016Старая версия, но все еще поддерживается: 9.5.2313.08.20202021 - 02-11UPSERT, безопасность на уровне строк, TABLESAMPLE, CUBE / ROLLUP, GROUPING SETS и новый индекс BRIN
    9.629.09.2016Старая версия, но все еще поддерживается: 9.6.1913.08.202011.11.2021Поддержка параллельных запросов, внешние данные PostgreSQL улучшения оболочки (FDW) с сортировкой / объединением, множественными синхронными резервными серверами, более быстрой очисткой большой таблицы
    1005.10.2017Старая версия, но все еще поддерживается : 10.142020-08-132022-11-10Логическая репликация, декларативное разбиение таблицы, изменение параллелизма запросов ed
    1118.10.2018Старая версия, но все еще поддерживается: 11.913.08.20182023-11-09Повышенная надежность и способность для секцио нирования, транзакции, поддерживаемые хранимыми процедурами, расширенные возможности для параллелизма запросов, JIT-компиляция для выражений
    122019-10-03Старая версия, но все еще поддерживается: 12.413.08.202014.11.2024Улучшения в запросе производительности и использовании пространства; Поддержка выражений пути SQL / JSON; сгенерированные столбцы; улучшения интернационализации и аутентификации; новый подключаемый интерфейс хранения таблиц.
    132020-09-24Текущая стабильная версия: 132020-09-172025-11-13Экономия места и повышение производительности за счет исключения дублирования индекса индексов B-дерева, повышение производительности запросов, использующих агрегаты или многораздельные таблицы, лучшее планирование запросов при использовании расширенной статистики, параллельная очистка индексов, инкрементная сортировка
    Условные обозначения: Старая версия Старая версия, все еще поддерживается Последняя версия Последняя предварительная версия Будущий выпуск
    См. также
    • Портал бесплатного программного обеспечения с открытым исходным кодом
    Ссылки
    Дополнительная литература
    ние ссылки
    На Викискладе есть материалы, связанные с PostgreSQL.
    В Викиучебниках есть книга по тема: PostgreSQL
    Последняя правка сделана 2021-06-02 12:38:44
    Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
    Обратная связь: support@alphapedia.ru
    Соглашение
    О проекте