Бесплатная и открытая система управления объектно-реляционной базой данных
PostgreSQL ( -gres -kew- EL ) [11] [12] также известный как Postgres , является бесплатной и открытой реляционной системой управления базами данных (СУБД), подчеркивающей расширяемость и соответствие SQL . PostgreSQL имеет транзакции со свойствами атомарности , согласованности , изоляции , долговечности ( ACID ), автоматически обновляемые представления , материализованные представления , триггеры , внешние ключи и хранимые процедуры . [13]
Он поддерживается во всех основных операционных системах , включая Windows , Linux , macOS , FreeBSD и OpenBSD , и обрабатывает ряд рабочих нагрузок от отдельных машин до хранилищ данных , озер данных [ 14] или веб-сервисов со многими одновременными пользователями .
PostgreSQL Global Development Group фокусируется только на разработке ядра базы данных и тесно связанных с ним компонентов. Это ядро, технически, включает в себя сам PostgreSQL, но есть обширное сообщество разработчиков и экосистема, которые предоставляют другие важные наборы функций, которые традиционно могут быть предоставлены поставщиком фирменного программного обеспечения. К ним относятся функции ядра базы данных специального назначения, например, необходимые для поддержки геопространственной [ 15] или временной [16] базы данных или функции, которые эмулируют другие продукты баз данных. [17] [18] [19] [20]
Также от третьих сторон доступен широкий спектр функций пользовательского и машинного интерфейса, таких как графические пользовательские интерфейсы [21] [22] [23] или наборы инструментов балансировки нагрузки и высокой доступности . [24]
Большая сторонняя сеть поддержки PostgreSQL, состоящая из людей, компаний, продуктов и проектов, даже не являющаяся частью PostgreSQL Development Group, имеет важное значение для принятия и использования ядра базы данных PostgreSQL и составляет экосистему PostgreSQL в целом. [25]
PostgreSQL изначально назывался POSTGRES, что отсылает к его происхождению как преемника базы данных Ingres, разработанной в Калифорнийском университете в Беркли . [26] [27] В 1996 году проект был переименован в PostgreSQL,
чтобы отразить его поддержку SQL . После обзора в 2007 году команда разработчиков решила сохранить название PostgreSQL и псевдоним Postgres. [28]
История
PostgreSQL развился из проекта Ingres в Калифорнийском университете в Беркли. В 1982 году руководитель команды Ingres Майкл Стоунбрейкер покинул Беркли, чтобы создать собственную версию Ingres. [26] Он вернулся в Беркли в 1985 году и начал пост-Ingres-проект, направленный на решение проблем современных систем баз данных, которые становились все более очевидными в начале 1980-х годов. В 2014 году он получил премию Тьюринга за эти и другие проекты [29] и пионерские методы в них.
Новый проект POSTGRES был нацелен на добавление наименьшего количества функций, необходимых для полной поддержки типов данных . [30] Эти функции включали возможность определять типы и полностью описывать отношения — то, что широко использовалось, но поддерживалось исключительно пользователем. В POSTGRES база данных понимала отношения и могла извлекать информацию из связанных таблиц естественным образом с помощью правил . POSTGRES использовал многие идеи Ingres, но не его код. [31]
Начиная с 1986 года, были опубликованы статьи, описывающие основу системы, а прототипная версия была показана на конференции ACM SIGMOD 1988 года . Команда выпустила версию 1 для небольшого числа пользователей в июне 1989 года, за которой последовала версия 2 с переписанной системой правил в июне 1990 года. Версия 3, выпущенная в 1991 году, снова переписала систему правил и добавила поддержку нескольких менеджеров хранения [32] и улучшенный механизм запросов. К 1993 году количество пользователей начало перегружать проект запросами на поддержку и функции. После выпуска версии 4.2 [33] 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 Networking Services предоставил первый неуниверситетский сервер разработки для разработки с открытым исходным кодом. [3] При участии Брюса Момджяна и Вадима Б. Михеева началась работа по стабилизации кода, унаследованного от Беркли.
В 1996 году проект был переименован в PostgreSQL, чтобы отразить его поддержку SQL. Онлайн-присутствие на сайте PostgreSQL.org началось 22 октября 1996 года. [34] Первый релиз PostgreSQL сформировал версию 6.0 29 января 1997 года. С тех пор разработчики и волонтеры по всему миру поддерживают программное обеспечение как PostgreSQL Global Development Group. [2]
Проект продолжает выпускать релизы под своей бесплатной и открытой лицензией PostgreSQL. Код поступает из вкладов поставщиков фирменных продуктов, компаний поддержки и программистов открытого исходного кода.
Управление многоверсионным параллелизмом (MVCC)
PostgreSQL управляет параллелизмом с помощью многоверсионного управления параллелизмом (MVCC), которое дает каждой транзакции «моментальный снимок» базы данных, позволяя вносить изменения, не затрагивая другие транзакции. Это в значительной степени устраняет необходимость в блокировках чтения и гарантирует, что база данных поддерживает принципы ACID . PostgreSQL предлагает четыре уровня изоляции транзакций : Read Uncommitted, Read Committed, Repeatable Read и Serializable. Поскольку PostgreSQL невосприимчив к грязным чтениям, запрос уровня изоляции транзакции Read Uncommitted вместо этого обеспечивает read commited. PostgreSQL поддерживает полную сериализуемость с помощью метода изоляции сериализуемого моментального снимка (SSI). [35] Реализация PostgreSQL MVCC подвержена проблемам с производительностью, которые требуют настройки при большой нагрузке записи, которая обновляет существующие строки. [36]
Хранение и репликация
Репликация
PostgreSQL включает встроенную двоичную репликацию, основанную на асинхронной отправке изменений ( журналы упреждающей записи (WAL)) на узлы реплики с возможностью запуска запросов только для чтения на этих реплицированных узлах. Это позволяет эффективно разделять трафик чтения между несколькими узлами. Более раннее программное обеспечение репликации, которое позволяло аналогичное масштабирование чтения, обычно полагалось на добавление триггеров репликации к главному узлу, увеличивая нагрузку.
PostgreSQL включает встроенную синхронную репликацию [37] , которая гарантирует, что для каждой транзакции записи мастер ждет, пока хотя бы один узел реплики не запишет данные в свой журнал транзакций. В отличие от других систем баз данных, долговечность транзакции (будь то асинхронная или синхронная) может быть указана для каждой базы данных, для каждого пользователя, для каждого сеанса или даже для каждой транзакции. Это может быть полезно для рабочих нагрузок, которые не требуют таких гарантий, и может быть нежелательно для всех данных, поскольку это замедляет производительность из-за требования подтверждения транзакции, достигающей синхронного резерва.
Резервные серверы могут быть синхронными или асинхронными. Синхронные резервные серверы могут быть указаны в конфигурации, которая определяет, какие серверы являются кандидатами для синхронной репликации. Первый в списке, который активно транслирует, будет использоваться как текущий синхронный сервер. Когда он выходит из строя, система переключается на следующий в очереди.
Синхронная репликация с несколькими мастерами не включена в ядро PostgreSQL. Postgres-XC, основанный на PostgreSQL, обеспечивает масштабируемую синхронную репликацию с несколькими мастерами. [38] Он лицензируется по той же лицензии, что и PostgreSQL. Связанный проект называется Postgres-XL . Postgres-R — это еще один форк . [39] Двунаправленная репликация (BDR) — это асинхронная система репликации с несколькими мастерами для PostgreSQL. [40]
Такие инструменты, как repmgr, упрощают управление кластерами репликации.
Доступно несколько пакетов асинхронной репликации на основе триггера. Они остаются полезными даже после внедрения расширенных возможностей ядра для ситуаций, когда бинарная репликация полного кластера базы данных нецелесообразна:
- Слоны-I
- Londiste, часть SkyTools (разработано Skype )
- Репликация Bucardo с несколькими мастерами (разработано Backcountry.com ) [41]
- SymmetricDS с несколькими мастерами, многоуровневая репликация
Индексы
PostgreSQL включает встроенную поддержку обычных индексов B-дерева и хэш-таблицы , а также четыре метода доступа к индексам: обобщенные деревья поиска ( GiST ), обобщенные инвертированные индексы (GIN), пространственно-разделенный GiST (SP-GiST) [42] и индексы блочных диапазонов (BRIN). Кроме того, можно создавать определяемые пользователем методы индексов, хотя это довольно сложный процесс. Индексы в PostgreSQL также поддерживают следующие функции:
- Индексы выражений можно создавать с помощью индекса результата выражения или функции, а не просто значения столбца.
- Частичные индексы , которые индексируют только часть таблицы, можно создать, добавив предложение WHERE в конец оператора CREATE INDEX. Это позволяет создать меньший индекс.
- Планировщик может использовать несколько индексов одновременно для удовлетворения сложных запросов, используя временные операции с индексами битовой карты в памяти (полезно для приложений хранилищ данных для объединения большой таблицы фактов с таблицами измерений меньшего размера , например, организованными по схеме «звезда» ).
- Индексирование k -ближайших соседей ( k -NN) (также называемое KNN-GiST [43] ) обеспечивает эффективный поиск "ближайших значений" к указанному, что полезно для поиска похожих слов или близких объектов или местоположений с геопространственными данными. Это достигается без исчерпывающего сопоставления значений.
- Сканирование только индексов часто позволяет системе извлекать данные из индексов без необходимости доступа к основной таблице.
- Индексы блочных диапазонов (BRIN).
Схемы
Схемы PostgreSQL — это пространства имен , позволяющие объектам одного вида и имени сосуществовать в одной базе данных. Их не следует путать со схемой базы данных — абстрактной, структурной, организационной спецификацией, которая определяет, как данные каждой таблицы соотносятся с данными в других таблицах. Все объекты базы данных PostgreSQL, за исключением нескольких глобальных объектов, таких как роли и табличные пространства , существуют в схеме. Они не могут быть вложенными, схемы не могут содержать схемы. Система разрешений контролирует доступ к схемам и их содержимому. По умолчанию вновь созданные базы данных имеют только одну схему, называемую public, но можно добавлять другие схемы, и public схема не является обязательной.
Параметр search_path
определяет порядок, в котором PostgreSQL проверяет схемы на наличие неквалифицированных объектов (без префикса схемы). По умолчанию он установлен на $user, public
( $user
относится к текущему подключенному пользователю базы данных). Это значение по умолчанию может быть установлено на уровне базы данных или роли, но поскольку это параметр сеанса, его можно свободно изменять (даже несколько раз) во время сеанса клиента, влияя только на этот сеанс.
Несуществующие схемы или другие схемы, недоступные вошедшему в систему пользователю, перечисленные в search_path, автоматически пропускаются во время поиска объектов.
Новые объекты создаются в той допустимой схеме (к которой возможен доступ), которая первой появляется в search_path.
Типы данных
Поддерживается широкий спектр собственных типов данных , включая:
Кроме того, пользователи могут создавать свои собственные типы данных, которые обычно можно сделать полностью индексируемыми через индексные инфраструктуры PostgreSQL – GiST, GIN, SP-GiST. Примерами этого являются типы данных географической информационной системы (ГИС) из проекта PostGIS для PostgreSQL.
Также существует тип данных, называемый доменом , который является тем же самым, что и любой другой тип данных, но с дополнительными ограничениями, определенными создателем этого домена. Это означает, что любые данные, введенные в столбец с использованием домена, должны будут соответствовать любым ограничениям, которые были определены как часть домена.
Можно использовать тип данных, представляющий диапазон данных, которые называются типами диапазонов. Это могут быть дискретные диапазоны (например, все целые значения от 1 до 10) или непрерывные диапазоны (например, любое время между 10:00 и 11:00 ). Доступные встроенные типы диапазонов включают диапазоны целых чисел, больших целых чисел, десятичных чисел, временных меток (с часовым поясом и без него) и дат.
Пользовательские типы диапазонов могут быть созданы для того, чтобы сделать доступными новые типы диапазонов, такие как диапазоны IP-адресов, использующие тип inet в качестве базы, или диапазоны float, использующие тип данных float в качестве базы. Типы диапазонов поддерживают включающие и исключающие границы диапазонов с использованием символов []и соответственно. (например, представляет все целые числа, начиная с 4 и включая их, но не включая 9.) Типы диапазонов также совместимы с существующими операторами, используемыми для проверки на перекрытие, включение, право и т. д.()[4,9)
Пользовательские объекты
Могут быть созданы новые типы практически всех объектов внутри базы данных, включая:
- Отливки
- Конверсии
- Типы данных
- Домены данных
- Функции, включая агрегатные функции и оконные функции
- Индексы, включая пользовательские индексы для пользовательских типов
- Операторы (существующие могут быть перегружены )
- Процедурные языки
Наследование
Таблицы можно настроить на наследование характеристик родительской таблицы. Данные в дочерних таблицах будут выглядеть существующими в родительских таблицах, если только данные не будут выбраны из родительской таблицы с использованием ключевого слова ONLY, то есть . Добавление столбца в родительскую таблицу приведет к появлению этого столбца в дочерней таблице.SELECT * FROM ONLY parent_table;
Наследование можно использовать для реализации секционирования таблиц, используя триггеры или правила для направления вставок из родительской таблицы в соответствующие дочерние таблицы.
Эта функция поддерживается не полностью. В частности, ограничения таблиц в настоящее время не наследуются. Все проверочные ограничения и ограничения not-null родительской таблицы автоматически наследуются ее дочерними таблицами. Другие типы ограничений (уникальные, ограничения первичного ключа и ограничения внешнего ключа) не наследуются.
Наследование позволяет отображать особенности иерархий обобщения, изображенных на диаграммах «сущность-связь » (ERD), непосредственно в базе данных PostgreSQL.
Другие возможности хранения
- Ограничения ссылочной целостности , включая ограничения внешнего ключа , ограничения столбцов и проверки строк
- Двоичное и текстовое хранилище больших объектов
- Табличные пространства
- Сортировка по столбцам
- Резервное копирование онлайн
- Восстановление на определенный момент времени, реализованное с использованием упреждающей записи в журнал
- Обновления на месте с помощью pg_upgrade для сокращения времени простоя
Управление и связь
Внешние обертки данных
PostgreSQL может связываться с другими системами для извлечения данных через внешние оболочки данных (FDW). [46]
Они могут принимать форму любого источника данных, например файловой системы, другой системы управления реляционными базами данных (RDBMS) или веб-сервиса. Это означает, что обычные запросы к базе данных могут использовать эти источники данных как обычные таблицы и даже объединять несколько источников данных вместе.
Интерфейсы
PostgreSQL поддерживает бинарный протокол связи , который позволяет приложениям подключаться к серверу базы данных. Протокол имеет версию (в настоящее время 3.0, начиная с PostgreSQL 7.4) и подробную спецификацию. [47]
Официальной клиентской реализацией этого протокола связи является C API , libpq. [48] Кроме того, официально поддерживаемый инструмент ECPG позволяет встраивать команды SQL в код C. [49] Оба являются частью стандартного дистрибутива PostgreSQL. [50]
Сторонние библиотеки для подключения к PostgreSQL доступны для многих языков программирования , включая C++ , [51] Java , [52] Julia , [53] [54] [55] Python , [56] Node.js , [57] Go , [58] и Rust . [59]
Процедурные языки
Процедурные языки позволяют разработчикам расширять базу данных с помощью пользовательских подпрограмм (функций), часто называемых хранимыми процедурами . Эти функции могут использоваться для создания триггеров базы данных (функций, вызываемых при изменении определенных данных) и пользовательских типов данных и агрегатных функций . [60] Процедурные языки также могут быть вызваны без определения функции, используя команду DO на уровне SQL. [61]
Языки делятся на две группы: Процедуры, написанные на безопасных языках, изолированы и могут безопасно создаваться и использоваться любым пользователем. Процедуры, написанные на небезопасных языках, могут создаваться только суперпользователями , поскольку они позволяют обходить ограничения безопасности базы данных, но также могут получать доступ к источникам, внешним по отношению к базе данных. Некоторые языки, такие как Perl, предоставляют как безопасные, так и небезопасные версии.
PostgreSQL имеет встроенную поддержку трех процедурных языков:
- Простой SQL (безопасный). Более простые функции SQL могут быть развернуты в вызывающем (SQL) запросе, что экономит накладные расходы на вызов функции и позволяет оптимизатору запросов «видеть изнутри» функцию.
- Процедурный язык/PostgreSQL ( PL/pgSQL ) (безопасный), который напоминает процедурный язык Oracle для SQL ( PL/SQL ) и SQL/Persistent Stored Modules ( SQL/PSM ).
- C (небезопасный), который позволяет загружать одну или несколько пользовательских общих библиотек в базу данных. Функции, написанные на C, обеспечивают наилучшую производительность, но ошибки в коде могут привести к сбою и потенциальному повреждению базы данных. Большинство встроенных функций написано на C.
Кроме того, PostgreSQL позволяет загружать процедурные языки в базу данных через расширения. В PostgreSQL включены три языковых расширения для поддержки Perl , Tcl и Python . Для Python используется текущий Python 3 , а прекращенный Python 2 больше не поддерживается с PostgreSQL 15. Оба поддерживались ранее, по умолчанию использовался Python 2 , в то время как старые и новые версии не могли использоваться в одном сеансе. [62] Внешние проекты предоставляют поддержку многих других языков, [63] включая PL/ Java , JavaScript (PL/V8), PL/ Julia , [55] PL/ R , [64] PL/ 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. [65] [66] [67]
Правила
Правила позволяют переписывать «дерево запросов» входящего запроса; они представляют собой автоматически вызываемый макроязык для SQL. «Правила перезаписи запросов» прикрепляются к таблице/классу и «переписывают» входящий DML (выбор, вставка, обновление и/или удаление) в один или несколько запросов, которые либо заменяют исходный оператор DML, либо выполняются в дополнение к нему. Перезапись запросов происходит после разбора оператора DML и перед планированием запроса.
Функциональность, предоставляемая правилами, была, почти во всех отношениях, позже продублирована с введением новых типов триггеров. Использование триггеров обычно предпочтительнее, чем правил, поскольку легче рассуждать о поведении и взаимодействии триггеров, чем при использовании эквивалентных правил.
Другие функции запроса
- Транзакции
- Полнотекстовый поиск
- Просмотры
- Материализованные представления [68]
- Обновляемые представления [69]
- Рекурсивные представления [70]
- Внутренние, внешние (полные, левые и правые) и крестовые соединения
- Подвыборы
- Коррелированные подзапросы [71]
- Регулярные выражения [72]
- Общие табличные выражения и записываемые общие табличные выражения
- Зашифрованные соединения через Transport Layer Security (TLS); текущие версии не используют уязвимый SSL, даже с этой опцией конфигурации [73]
- Домены
- Точки сохранения
- Двухфазная фиксация
- Технология хранения атрибутов большого размера (TOAST) используется для прозрачного хранения больших атрибутов таблиц (например, больших вложений MIME или XML-сообщений) в отдельной области с автоматическим сжатием.
- Встроенный SQL реализуется с помощью препроцессора. Сначала код SQL пишется встроенным в код C. Затем код запускается через препроцессор ECPG, который заменяет SQL вызовами библиотеки кода. Затем код может быть скомпилирован с помощью компилятора C. Встраивание также работает с C++ , но оно не распознает все конструкции C++.
Модель параллелизма
Сервер PostgreSQL основан на процессах (не является потоковым) и использует один процесс операционной системы на сеанс базы данных. Несколько сеансов автоматически распределяются операционной системой по всем доступным ЦП. Многие типы запросов также могут быть распараллелены по нескольким фоновым рабочим процессам, используя преимущества нескольких ЦП или ядер. [74] Клиентские приложения могут использовать потоки и создавать несколько подключений к базе данных из каждого потока. [75]
Безопасность
PostgreSQL управляет своей внутренней безопасностью на основе ролей . Роль обычно рассматривается как пользователь (роль, которая может входить в систему) или группа (роль, членами которой являются другие роли). Разрешения могут быть предоставлены или отозваны для любого объекта вплоть до уровня столбца и могут разрешать или запрещать видимость/создание/изменение/удаление объектов на уровнях базы данных, схемы, таблицы и строки.
Функция SECURITY LABEL в PostgreSQL (расширение стандартов SQL) обеспечивает дополнительную безопасность; с помощью встроенного загружаемого модуля, который поддерживает обязательный контроль доступа (MAC) на основе меток, основанный на политике безопасности Security-Enhanced Linux (SELinux). [76] [77]
PostgreSQL изначально поддерживает широкий спектр внешних механизмов аутентификации, включая:
Методы GSSAPI, SSPI, Kerberos, peer, ident и certificate также могут использовать указанный файл «карты», в котором перечислены пользователи, соответствующие данной системе аутентификации, которым разрешено подключаться в качестве определенного пользователя базы данных.
Эти методы указаны в файле конфигурации аутентификации на основе хоста кластера ( pg_hba.conf), который определяет, какие соединения разрешены. Это позволяет контролировать, какой пользователь может подключаться к какой базе данных, откуда он может подключаться (IP-адрес, диапазон IP-адресов, сокет домена), какая система аутентификации будет применяться и должно ли соединение использовать Transport Layer Security (TLS).
Соответствие стандартам
PostgreSQL заявляет о высоком, но не полном соответствии с последним стандартом SQL («на момент выпуска версии 17 в сентябре 2024 года PostgreSQL соответствует как минимум 170 из 177 обязательных функций для соответствия SQL:2023 Core», и ни одна другая база данных не соответствовала ему полностью [79] ). Исключением является обработка идентификаторов без кавычек, таких как имена таблиц или столбцов. В PostgreSQL они внутренне сворачиваются в строчные символы [80] , тогда как стандарт гласит, что идентификаторы без кавычек должны быть свернуты в верхний регистр. Таким образом, Foo
должно быть эквивалентно FOO
не foo
в соответствии со стандартом. Другие недостатки касаются отсутствия временных таблиц, позволяющих автоматически регистрировать версии строк во время транзакций с возможностью просмотра во времени (предикат FOR SYSTEM TIME), [ необходима ссылка ], хотя доступны относительно совместимые с SQL сторонние расширения. [16]
Тесты и производительность
Было проведено множество неформальных исследований производительности PostgreSQL. [81] Улучшения производительности, направленные на улучшение масштабируемости, в значительной степени начались с версии 8.1. Простые тесты между версиями 8.0 и 8.4 показали, что последняя была более чем в десять раз быстрее при рабочих нагрузках только для чтения и по крайней мере в 7,5 раз быстрее при рабочих нагрузках как чтения, так и записи. [82]
Первый отраслевой стандартный и проверенный коллегами тест производительности был завершен в июне 2007 года с использованием Sun Java System Application Server (собственная версия GlassFish ) 9.0 Platform Edition, сервера Sun Fire на базе UltraSPARC T1 и PostgreSQL 8.2. [83] Этот результат 778,14 SPECjAppServer2004 JOPS@Standard выгодно отличается от результата 874 JOPS@Standard с Oracle 10 на системе HP-UX на базе Itanium . [81]
В августе 2007 года Sun представила улучшенный результат теста 813,73 SPECjAppServer2004 JOPS@Standard. С системой, которая тестировалась по сниженной цене, соотношение цена/производительность улучшилось с $84,98/JOPS до $70,57/JOPS. [84]
Конфигурация PostgreSQL по умолчанию использует только небольшой объем выделенной памяти для критически важных для производительности целей, таких как кэширование блоков базы данных и сортировка. Это ограничение в первую очередь связано с тем, что старые операционные системы требовали изменений ядра, чтобы разрешить выделение больших блоков разделяемой памяти . [85] PostgreSQL.org предоставляет советы по основным рекомендуемым практикам производительности в вики . [86]
В апреле 2012 года Роберт Хаас из EnterpriseDB продемонстрировал линейную масштабируемость процессора PostgreSQL 9.2, используя сервер с 64 ядрами. [87]
Matloob Khushi провел сравнительный анализ PostgreSQL 9.0 и MySQL 5.6.15 на предмет их способности обрабатывать геномные данные. В своем анализе производительности он обнаружил, что PostgreSQL извлекает перекрывающиеся геномные регионы в восемь раз быстрее, чем MySQL, используя два набора данных по 80 000 каждый, образуя случайные регионы человеческой ДНК. Вставка и загрузка данных в PostgreSQL также были лучше, хотя общая поисковая способность обеих баз данных была почти эквивалентной. [88]
Платформы
PostgreSQL доступен для следующих операционных систем: Linux (все последние дистрибутивы), 64-разрядные установщики ARM и x86-64, доступные и протестированные для macOS (OS X) [89] версии 10.14 и новее, Windows (с доступными и протестированными установщиками для 64-разрядных Windows Server 2022 и 2016 [90] ), FreeBSD , OpenBSD , [91] NetBSD , DragonFlyBSD , а также для тех, у которых нет официальных (хотя неофициальных, вероятно, доступных) исполняемых двоичных файлов, Solaris , [92] и illumos .
PostgreSQL, как ожидается, будет работать на любой из следующих архитектур набора инструкций (и операционных систем): 64-бит x86-64 и 32-бит x86 на Windows и других операционных системах; они поддерживаются не только на Windows: 64-бит ARM [93] и более старые 32-бит ARM , включая более старые, такие как ARMv6 в Raspberry Pi [94] ), RISC-V , z/Architecture , S/390 , PowerPC (включая 64-бит Power ISA ), SPARC (также 64-бит), MIPS и PA-RISC . Известно также, что он работает на некоторых других платформах (хотя не тестировался в течение многих лет, т. е. для последних версий). [95]
Администрирование базы данных
К открытым исходным кодам и инструментам для администрирования PostgreSQL относятся:
- psql
- Основной интерфейс для PostgreSQL — это
psql
программа командной строки , которая может использоваться для прямого ввода SQL-запросов или их выполнения из файла. Кроме того, psql предоставляет ряд метакоманд и различных функций оболочки для облегчения написания скриптов и автоматизации широкого спектра задач; например, автодополнение имен объектов и синтаксиса SQL. - pgAdmin
- Пакет pgAdmin — это бесплатный и открытый графический пользовательский интерфейс (GUI) для PostgreSQL, который поддерживается на многих компьютерных платформах. [96] Программа доступна более чем на дюжине языков. Первый прототип, названный pgManager, был написан для PostgreSQL 6.3.2 в 1998 году, а затем переписан и выпущен как pgAdmin под лицензией GNU General Public License (GPL) в последующие месяцы. Второе воплощение (названное pgAdmin II) было полностью переписано, впервые выпущено 16 января 2002 года. Третья версия, pgAdmin III, изначально была выпущена под лицензией Artistic License , а затем выпущена под той же лицензией, что и PostgreSQL. В отличие от предыдущих версий, написанных на Visual Basic , pgAdmin III написан на C++ с использованием фреймворка wxWidgets [97] , что позволяет ему работать на большинстве распространенных операционных систем. Инструмент запросов включает в себя язык сценариев pgScript для поддержки задач администрирования и разработки. В декабре 2014 года Дэйв Пейдж, основатель и главный разработчик проекта pgAdmin, [98] объявил, что с переходом на веб-модели началась работа над pgAdmin 4 с целью упрощения облачных развертываний. [99] В 2016 году был выпущен pgAdmin 4. Бэкэнд pgAdmin 4 был написан на Python с использованием Flask и фреймворка Qt . [100]
- phpPgAdmin
- phpPgAdmin — это веб-инструмент администрирования для PostgreSQL, написанный на PHP и основанный на популярном интерфейсе phpMyAdmin, изначально созданном для администрирования MySQL . [101]
- Студия PostgreSQL
- PostgreSQL Studio позволяет пользователям выполнять основные задачи разработки баз данных PostgreSQL из веб-консоли. PostgreSQL Studio позволяет пользователям работать с облачными базами данных без необходимости открывать брандмауэры. [102]
- КомандаPostgreSQL
- Веб-интерфейс на основе AJAX/JavaScript для PostgreSQL. Позволяет просматривать, поддерживать и создавать данные и объекты базы данных через веб-браузер. Интерфейс предлагает редактор SQL с вкладками и автодополнением, виджеты редактирования строк, навигацию по внешним ключам между строками и таблицами, управление избранным для часто используемых скриптов и другие функции. Поддерживает SSH как для веб-интерфейса, так и для подключений к базе данных . Доступны установщики для Windows, Macintosh и Linux, а также простой кроссплатформенный архив, который запускается из скрипта. [103]
- LibreOffice, OpenOffice.org
- LibreOffice и OpenOffice.org Base могут использоваться в качестве интерфейса для PostgreSQL. [104] [105]
- pgБарсук
- Анализатор журналов PostgreSQL pgBadger генерирует подробные отчеты из файла журнала PostgreSQL. [106]
- pgDevOps
- pgDevOps — это набор веб-инструментов для установки и управления несколькими версиями PostgreSQL, расширениями и компонентами сообщества, разработки SQL-запросов, мониторинга работающих баз данных и поиска проблем производительности. [107]
- Администратор
- Adminer — простой веб-инструмент администрирования для PostgreSQL и других СУБД, написанный на PHP.
- pgBackRest
- pgBackRest — это инструмент резервного копирования и восстановления для PostgreSQL, который обеспечивает поддержку полного, дифференциального и инкрементного резервного копирования. [108]
- pgaudit
- pgaudit — это расширение PostgreSQL, которое обеспечивает подробное ведение журнала аудита сеансов и/или объектов с помощью стандартного средства ведения журнала, предоставляемого PostgreSQL. [109]
- УОЛ-И
- WAL-E — это инструмент резервного копирования и восстановления для PostgreSQL, который обеспечивает поддержку физических ( на основе WAL ) резервных копий, написанный на Python. [110]
- DБивер
- DBeaver — это бесплатный и открытый исходный код GUI-инструмент администрирования для PostgreSQL, он имеет функции Visual Entity Diagrams и Intellisense . Он также имеет коммерческую лицензию PRO.
Ряд компаний предлагают собственные инструменты для PostgreSQL. Они часто состоят из универсального ядра, адаптированного для различных конкретных продуктов баз данных. Эти инструменты в основном разделяют функции администрирования с инструментами с открытым исходным кодом, но предлагают улучшения в моделировании данных , импорте, экспорте или отчетности.
Известные пользователи
Известные организации и продукты, использующие PostgreSQL в качестве основной базы данных:
- Microsoft , используется для аналитической панели мониторинга «Release Quality View» (RQV) петабайтного масштаба, которая отслеживает качество обновлений Windows, анализируя 20 тыс. типов показателей с более чем 800 млн устройств Windows. [111]
- В 2009 году сайт социальной сети Myspace использовал базу данных nCluster компании Aster Data Systems для хранения данных, которая была построена на немодифицированной PostgreSQL. [112] [113]
- Geni.com использует PostgreSQL в качестве своей основной генеалогической базы данных. [114]
- OpenStreetMap — совместный проект по созданию бесплатной редактируемой карты мира. [115]
- Afilias , регистраторы доменов .org , .info и других. [116] [117]
- Многопользовательские онлайн-игры Sony Online . [118]
- BASF , торговая платформа для их агропромышленного портала. [119]
- Сайт социальных новостей Reddit . [120]
- Приложение Skype VoIP, центральные бизнес- базы данных. [121]
- Sun xVM , пакет виртуализации и автоматизации центров обработки данных от Sun. [122]
- MusicBrainz , открытая онлайн-энциклопедия музыки. [123]
- Международная космическая станция – для сбора телеметрических данных на орбите и копирования их на Землю. [124]
- Сайт социальной сети MyYearbook . [125]
- Instagram , мобильный сервис обмена фотографиями. [126]
- Disqus , онлайн-сервис для обсуждения и комментирования.
- TripAdvisor , сайт с туристической информацией, в основном с пользовательским контентом. [128]
- Яндекс , российская интернет-компания, перевела свой сервис Яндекс.Почта с Oracle на Postgres. [129]
- Amazon Redshift , часть AWS, система колоночной онлайн-аналитической обработки (OLAP), основанная на модификациях Postgres от ParAccel .
- Национальная метеорологическая служба (NWS) Национального управления океанических и атмосферных исследований (NOAA ), интерактивная система подготовки прогнозов (IFPS), система, которая объединяет данные с метеорологических радаров NEXRAD , поверхностных и гидрологических систем для построения подробных локальных моделей прогнозов. [117] [130]
- Национальная метеорологическая служба Великобритании Met Office начала замену Oracle на PostgreSQL в рамках стратегии по развертыванию большего количества технологий с открытым исходным кодом. [130] [131]
- WhitePages.com использовал Oracle и MySQL , но когда дело дошло до перемещения основных каталогов в пределах компании, он обратился к PostgreSQL. Поскольку WhitePages.com необходимо объединять большие наборы данных из нескольких источников, способность PostgreSQL загружать и индексировать данные с высокой скоростью стала ключом к решению использовать PostgreSQL. [117]
- FlightAware , сайт отслеживания рейсов. [132]
- Grofers , онлайн-сервис доставки продуктов. [133]
- The Guardian перешел с MongoDB на PostgreSQL в 2018 году. [134]
- YugabyteDB реализует уровень запросов PostgreSQL в качестве режима SQL по умолчанию
- OpenAI использует PostgreSQL как часть своего основного API-сервиса. [135]
Реализации услуг
Некоторые известные поставщики предлагают PostgreSQL в качестве программного обеспечения как услуги :
- Heroku , платформа как поставщик услуг , поддерживает PostgreSQL с момента своего запуска в 2007 году. [136] Они предлагают дополнительные функции, такие как полный откат базы данных (возможность восстановления базы данных с любого указанного времени), [137] которая основана на WAL-E, программном обеспечении с открытым исходным кодом, разработанном Heroku. [138]
- В январе 2012 года EnterpriseDB выпустила облачную версию PostgreSQL и собственного Postgres Plus Advanced Server с автоматизированной подготовкой для отказоустойчивости, репликации, балансировки нагрузки и масштабирования. Он работает на Amazon Web Services . [139] С 2015 года Postgres Advanced Server предлагается как ApsaraDB для PPAS, реляционной базы данных как сервиса на Alibaba Cloud. [140]
- VMware предлагает vFabric Postgres (также называемый vPostgres [141] ) для частных облаков на VMware vSphere с мая 2012 года. [142] Компания объявила об окончании доступности (EOA) продукта в 2014 году. [143]
- В ноябре 2013 года Amazon Web Services объявили о добавлении PostgreSQL в свое предложение Relational Database Service . [144] [145]
- В ноябре 2016 года Amazon Web Services объявили о добавлении совместимости с PostgreSQL к своему облачному предложению управляемой базы данных Amazon Aurora . [146]
- В мае 2017 года Microsoft Azure анонсировала базы данных Azure для PostgreSQL. [147]
- В мае 2019 года Alibaba Cloud анонсировала PolarDB для PostgreSQL. [148]
- Jelastic Multicloud Platform as a Service предоставляет поддержку PostgreSQL на основе контейнеров с 2011 года. Она также предлагает автоматизированную асинхронную репликацию PostgreSQL по принципу «главный-подчиненный». [149]
- В июне 2019 года IBM Cloud анонсировала IBM Cloud Hyper Protect DBaaS для PostgreSQL. [150]
- В сентябре 2020 года Crunchy Data анонсировала Crunchy Bridge. [151]
- В июне 2022 года Neon.tech анонсировала Neon Serverless Postgres. [152]
- В октябре 2023 года Nile анонсировала платформу Nile Postgres. [153]
История релизов
Легенда:
Старая версия, не поддерживается
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий релиз
Смотрите также
Ссылки
- ^ "PostgreSQL" . Получено 21 сентября 2019 г. PostgreSQL
: самая передовая в мире реляционная база данных с открытым исходным кодом
- ^ ab "Профили участников". PostgreSQL Global Development Group . Получено 14 марта 2017 г.
- ^ ab "С днем рождения, PostgreSQL!". PostgreSQL Global Development Group. 8 июля 2008 г.
- ^ «PostgreSQL 17.1, 16.5, 15.9, 14.14, 13.17 и 12.21 выпущены!». 14 ноября 2024 г.
- ^ ab "Лицензия". PostgreSQL Global Development Group . Получено 20 сентября 2010 г.
- ^ "Лицензия PostgreSQL одобрена OSI". Crynwr. 18 февраля 2010 г. Архивировано из оригинала 8 августа 2016 г. Получено 18 февраля 2010 г.
- ^ ab "OSI PostgreSQL License". Open Source Initiative. 20 февраля 2010 г. Получено 20 февраля 2010 г.
- ^ "Debian -- Подробности пакета postgresql в sid". packages.debian.org . Получено 25 января 2021 г. .
- ^ "Лицензирование:Основное". FedoraProject .
- ^ "PostgreSQL". fsf.org .
- ^ "FAQ: Что такое PostgreSQL? Как это произносится? Что такое Postgres?". PostgreSQL Wiki . Сообщество PostgreSQL . Получено 2 октября 2021 г. .
- ^ "Аудиопример, 5.6k MP3".
- ^ "Что такое PostgreSQL?". Документация PostgreSQL 9.3.0 . PostgreSQL Global Development Group . Получено 20 сентября 2013 г.
- ^ "Parquet и Postgres в Data Lake | Crunchy Data Blog". Crunchy Data . 3 мая 2022 г. Получено 19 сентября 2024 г.
- ^ "PostGIS". postgis.net . 18 декабря 2023 г. . Получено 18 декабря 2023 г. PostGIS
расширяет возможности реляционной базы данных PostgreSQL, добавляя поддержку хранения, индексирования и запроса геопространственных данных.
- ^ ab "Temporal Extensions". PostgreSQL Wiki . 18 декабря 2023 г. Получено 18 декабря 2023 г.
Postgres можно расширить, чтобы он стал временной базой данных. Такие базы данных отслеживают историю содержимого базы данных с течением времени, автоматически сохраняя эту историю и позволяя изменять ее и запрашивать.
- ^ "Orafce - Функции и пакеты совместимости Oracle". GitHub.com . 17 декабря 2023 г. . Получено 18 декабря 2023 г. Функции
и операторы, которые эмулируют подмножество функций и пакетов из Oracle RDBMS.
- ^ "pg_dbms_job". GitHub.com . 8 ноября 2023 г. . Получено 18 декабря 2023 г.
Расширение PostgreSQL для планирования и управления заданиями в очереди заданий, аналогичное пакету Oracle DBMS_JOB.
- ^ "WiltonDB". WiltonDB . 2023 . Получено 18 декабря 2023 г.
WiltonDB [есть] в пакете для Windows. Он стремится быть пригодным для использования в качестве замены Microsoft SQL Server.
- ^ "Babelfish for PostgreSQL". babelfishpg.org . Получено 18 декабря 2023 г. Babelfish
for PostgreSQL ... предоставляет PostgreSQL возможность понимать запросы из приложений, написанных для Microsoft SQL Server.
- ^ "Клиенты PostgreSQL". wiki.postgresql.org . 18 октября 2023 г. . Получено 18 декабря 2023 г.
Эта страница представляет собой частичный список интерактивных клиентов SQL (с графическим интерфейсом или иным) ... в которые можно вводить SQL и получать от них результаты.
- ^ "Design Tools". wiki.postgresql.org . 23 октября 2023 г. . Получено 18 декабря 2023 г.
Инструменты, помогающие проектировать схему, путем создания диаграмм Entity-Relationship и т. п. Большинство из них имеют графический интерфейс.
- ^ "Руководство сообщества по инструментам PostgreSQL GUI". wiki.postgresql.org . 1 декабря 2023 г. . Получено 18 декабря 2023 г.
Эта страница представляет собой список различных утилит, которые работают с Postgres (например, загрузчики данных, компараторы и т. д.).
- ^ "Репликация, кластеризация и пул соединений". wiki.postgresql.org . 13 июля 2020 г. . Получено 18 декабря 2023 г.
Существует множество подходов к масштабированию PostgreSQL за пределами работы на одном сервере. ... Не существует универсального решения...
- ^ Это признается либеральным разрешением на использование имени PostgreSQL, как одобрено (для добросовестного использования, когда это не вводит людей в заблуждение относительно правовых отношений с фактическим проектом PostgreSQL) при использовании в поддержку PostgreSQL, в соответствии с Политикой в отношении товарных знаков PostgreSQL: «Политика в отношении товарных знаков». PostgreSQL.org . 8 декабря 2020 г. . Получено 17 декабря 2023 г. Мы
постараемся работать с вами, чтобы разрешить использование [имени PostgreSQL], которое поддерживает проект PostgreSQL и наше Сообщество.
- ^ ab Stonebraker, M.; Rowe, LA (май 1986 г.). Проектирование POSTGRES (PDF) . Proc. 1986 ACM SIGMOD Conference on Management of Data. Вашингтон, округ Колумбия . Получено 17 декабря 2011 г.
- ^ "PostgreSQL: История". PostgreSQL Global Development Group. Архивировано из оригинала 26 марта 2017 г. Получено 27 августа 2016 г.
- ^ «Название проекта – заявление основной команды». archives.postgresql.org. 16 ноября 2007 г. Получено 16 ноября 2007 г.
- ^ "Майкл Стоунбрейкер – Лауреат премии AM Тьюринга". amturing.acm.org . Получено 20 марта 2018 г. Методы
, впервые примененные в Postgres, получили широкое распространение [...] Стоунбрейкер – единственный лауреат премии Тьюринга, занимавшийся серийным предпринимательством в подобных масштабах, что дало ему особый взгляд на академический мир.
- ^ Стоунбрейкер, М.; Роу, Л. А. Модель данных POSTGRES (PDF) . Труды 13-й Международной конференции по сверхбольшим базам данных. Брайтон, Англия: Morgan Kaufmann Publishers. С. 83–96. ISBN 0-934613-46-X.
- ↑ Павел Стехуле (9 июня 2012 г.). «История проекта PostgreSQL» (на чешском языке).
- ^ Краткая история PostgreSQL «Версия 3 появилась в 1991 году и добавила поддержку нескольких менеджеров хранения, улучшенный исполнитель запросов и переписанную систему правил». postgresql.org . PostgreSQL Global Development Group , получено 18 марта 2020 г.
- ^ "Университет POSTGRES, Версия 4.2". 26 июля 1999 г.
- ^ Пейдж, Дэйв (7 апреля 2015 г.). "Re: 20th anniversary of PostgreSQL ?". pgsql-advocacy (список рассылки) . Получено 9 апреля 2015 г.
- ^ Дэн РК Портс; Кевин Гриттнер (2012). «Сериализуемая изоляция моментальных снимков в PostgreSQL» (PDF) . Труды VLDB Endowment . 5 (12): 1850–1861. arXiv : 1208.4179 . Bibcode : 2012arXiv1208.4179P. doi : 10.14778/2367502.2367523. S2CID 16006111.
- ^ Бохан Чжан; Энди Павло (2023). «Часть PostgreSQL, которую мы ненавидим больше всего». OtterTune (блог).
- ^ PostgreSQL 9.1 с синхронной репликацией (новости), H Online
- ^ "Страница проекта Postgres-XC" (веб-сайт). Postgres-XC. Архивировано из оригинала 1 июля 2012 г.
- ^ "Postgres-R: система репликации баз данных для PostgreSQL". Postgres Global Development Group. Архивировано из оригинала 29 марта 2010 г. Получено 27 августа 2016 г.
- ^ "Postgres-BDR". 2ndQuadrant Ltd. Получено 27 августа 2016 г.
- ↑ Марит Фишер (10 ноября 2007 г.). «Backcountry.com наконец-то возвращает что-то сообществу открытого исходного кода» (пресс-релиз). Backcountry.com. Архивировано из оригинала 26 декабря 2010 г.
- ^ Бартунов, О; Сигаев, Т (май 2011 г.). SP-GiST – новый фреймворк индексации для PostgreSQL (PDF) . PGCon 2011. Оттава, Канада . Получено 31 января 2016 г.
- ^ Бартунов, О; Сигаев, Т (май 2010). Поиск K-ближайшего соседа для PostgreSQL (PDF) . PGCon 2010. Оттава, Канада . Получено 31 января 2016 г.
- ^ "PostgreSQL, база данных NoSQL | Linux Journal". www.linuxjournal.com .
- ^ Гейган, Питер (23 марта 2014 г.). «Что я думаю о jsonb».
- ^ Obe, Regina; Hsu, Leo S. (2012). "10: Репликация и внешние данные". PostgreSQL: Up and Running (1-е изд.). Севастополь, Калифорния: O'Reilly Media, Inc. стр. 129. ISBN 978-1-4493-2633-3. Получено 17 октября 2016 г. .
Foreign Data Wrappers (FDW) [...] — это механизмы запросов к внешним источникам данных. PostgreSQL 9.1 представил эту функцию, соответствующую стандартам SQL/MED .
- ^ "Frontend/Backend Protocol". postgresql.org . 9 ноября 2023 г. . Получено 17 декабря 2023 г. В
этом документе описывается версия 3.0 протокола, реализованная в PostgreSQL 7.4 и более поздних версиях.
- ^ "libpq". postgresql.org . 9 ноября 2023 г. . Получено 17 декабря 2023 г. .
- ^ "Встроенный SQL в C". postgresql.org . 9 ноября 2023 г. . Получено 17 декабря 2023 г. .
- ^ "Клиентские интерфейсы". postgresql.org . 9 ноября 2023 г. . Получено 17 декабря 2023 г. .
- ^ "libpqxx" . Получено 4 апреля 2020 г. .
- ^ "PostgreSQL JDBC Driver" . Получено 4 апреля 2020 г. .
- ^ "[ANN] PostgresORM.jl: объектно-реляционное отображение для PostgreSQL". JuliaLang . 30 июня 2021 г. . Получено 26 августа 2021 г. .
- ^ "GitHub - invenia/LibPQ.jl: оболочка Julia для libpq" . Гитхаб . Проверено 26 августа 2021 г.
- ^ ab "PL/Julia extension ( minimum )". JuliaLang . 8 марта 2020 г. Получено 26 августа 2021 г.
- ^ "PostgreSQL + Python | Psycopg". initd.org .
- ^ "node-postgres" . Получено 4 апреля 2020 г. .
- ^ "Драйверы базы данных SQL". Перейти на wiki . golang.org . Получено 22 июня 2015 г. .
- ^ "Rust-Postgres" . Получено 4 апреля 2020 г. .
- ^ "Server Programming". Документация PostgreSQL . Получено 19 мая 2019 г.
- ^ "DO". Документация PostgreSQL . Получено 19 мая 2019 г.
- ^ "PL/Python - Python Procedural Language". Документация PostgreSQL . Получено 23 октября 2022 г.
- ^ "Процедурные языки". postgresql.org. 31 марта 2016 г. Получено 7 апреля 2016 г.
- ^ "postgres-plr/plr". 17 июня 2021 г. – через GitHub.
- ^ Chartier, Colin (8 ноября 2019 г.). «Системный дизайн-хак: Postgres — отличный сервер pub/sub и заданий». Блог LayerCI . Получено 24 ноября 2019 г.
- ^ "Выпуск 9.5". postgresql.org . 11 февраля 2021 г.
- ^ Рингер, Крейг (13 апреля 2016 г.). «Для чего нужна SKIP LOCKED в PostgreSQL 9.5?». 2nd Quadrant . Получено 24 ноября 2019 г. .
- ^ "Добавить материализованные отношения представления". 4 марта 2013 г. Получено 4 марта 2013 г.
- ^ "Поддержка автоматически обновляемых представлений". 8 декабря 2012 г. Получено 8 декабря 2012 г.
- ^ "Добавить синтаксис CREATE RECURSIVE VIEW". 1 февраля 2013 г. Получено 28 февраля 2013 г.
- ^ Momjian, Bruce (2001). "Подзапросы". PostgreSQL: Введение и концепции. Addison-Wesley. ISBN 0-201-70331-9. Архивировано из оригинала 9 августа 2010 г. . Получено 25 сентября 2010 г. .
- ↑ Бернье, Роберт (2 февраля 2006 г.). «Использование регулярных выражений в PostgreSQL». O'Reilly Media . Получено 25 сентября 2010 г.
- ^ "Несколько коротких заметок о PostgreSQL и POODLE". hagander.net .
- ^ Беркус, Джош (2 июня 2016 г.). «PostgreSQL 9.6 Beta и PGCon 2016». LWN.net .
- ^ "FAQ – PostgreSQL wiki". wiki.postgresql.org . Получено 13 апреля 2017 г. .
- ^ "Документация SEPostgreSQL – PostgreSQL wiki". wiki.postgresql.org .
- ^ "NB SQL 9.3 - SELinux Wiki". selinuxproject.org .
- ^ "Документация PostgreSQL 10: Приложение E. Заметки о выпуске". 12 августа 2021 г.
- ^ "PostgreSQL: About". www.postgresql.org . Получено 14 октября 2024 г. .
- ^ "Чувствительность к регистру идентификаторов". PostgreSQL Global Development Group. 11 ноября 2021 г.
- ^ ab Berkus, Josh (6 июля 2007 г.). "PostgreSQL публикует первый настоящий бенчмарк". Архивировано из оригинала 12 июля 2007 г. Получено 10 июля 2007 г.
- ↑ Вилмош, Дьёрдь (29 сентября 2009 г.). «История PostgreSQL» . Проверено 28 августа 2010 г.
- ^ "SPECjAppServer2004 Result". SPEC . 6 июля 2007 г. Получено 10 июля 2007 г.
- ^ "SPECjAppServer2004 Result". SPEC . 4 июля 2007 г. Получено 1 сентября 2007 г.
- ^ "Управление ресурсами ядра". Руководство PostgreSQL . PostgreSQL.org . Получено 12 ноября 2011 г.
- ^ Грег Смит (15 октября 2010 г.). PostgreSQL 9.0 High Performance. Packt Publishing . ISBN 978-1-84951-030-1.
- ↑ Роберт Хаас (3 апреля 2012 г.). «Я сказал 32 ядра? Как насчет 64?» . Получено 8 апреля 2012 г.
- ^ Khushi, Matloob (июнь 2015 г.). «Сравнительный анализ производительности базы данных для геномных данных». J Cell Biochem . 116 (6): 877–83. arXiv : 2008.06835 . doi : 10.1002/jcb.25049. PMID 25560631. S2CID 27458866.
- ^ "Пакеты Mac OS X". PostgreSQL Global Development Group . Получено 27 августа 2016 г.
- ^ "PostgreSQL: установщики Windows". www.postgresql.org . Получено 26 августа 2021 г. .
- ^ "postgresql-client-10.5p1 – PostgreSQL RDBMS (клиент)". Порты OpenBSD . 4 октября 2018 г. Получено 10 октября 2018 г.
- ^ "Установка и настройка PostgreSQL - Oracle Solaris Cluster Data Service для PostgreSQL Guide". docs.oracle.com . Получено 4 февраля 2023 г. .
- ^ "AArch64 планирует BoF на DebConf". debian.org .
- ^ Соуза, Рубенс (17 июня 2015 г.). «Шаг 5 (обновление): Установка PostgreSQL на мои Raspberry Pi 1 и 2». Raspberry PG . Получено 27 августа 2016 г. .
- ^ "Поддерживаемые платформы". PostgreSQL Global Development Group . Получено 6 апреля 2012 г.
- ^ "pgAdmin: инструменты администрирования и управления PostgreSQL". веб-сайт . Получено 12 ноября 2011 г.
- ^ "Debian -- Подробности пакета pgadmin3 в jessie" . Получено 10 марта 2017 г. .
- ^ "pgAdmin Development Team". pgadmin.org . Получено 22 июня 2015 г. .
- ^ Дэйв, Пейдж (7 декабря 2014 г.). "История pgAdmin". Блог Дэйва о Postgres . pgsnake.blogspot.co.uk . Получено 7 декабря 2014 г.
- ^ "pgAdmin 4 README". GitHub . Получено 15 августа 2018 г. .
- ^ Проект phpPgAdmin (25 апреля 2008 г.). "О phpPgAdmin" . Получено 25 апреля 2008 г. .
- ^ PostgreSQL Studio (9 октября 2013 г.). "О PostgreSQL Studio". Архивировано из оригинала 7 октября 2013 г. Получено 9 октября 2013 г.
- ^ "TeamPostgreSQL website". 3 октября 2013 г. Получено 3 октября 2013 г.
- ^ oooforum.org (10 января 2010 г.). "Back Ends for OpenOffice". Архивировано из оригинала 28 сентября 2011 г. Получено 5 января 2011 г.
- ^ libreoffice.org (14 октября 2012 г.). "Базовые функции". Архивировано из оригинала 7 января 2012 г. Получено 14 октября 2012 г.
- ^ Грег Смит; Роберт Трит и Кристофер Браун. «Настройка сервера PostgreSQL». Wiki . PostgreSQL.org . Получено 12 ноября 2011 г. .
- ^ "pgDevOps". BigSQL.org . Архивировано из оригинала 1 апреля 2017 г. Получено 4 мая 2017 г.
- ^ "pgbackrest/pgbackrest". GitHub . 21 ноября 2021 г.
- ^ "pgaudit/pgaudit". GitHub . 21 ноября 2021 г.
- ^ "Вал-и / Вал-и" . 24 июня 2021 г. — через GitHub.
- ^ Клэр Джордано (31 октября 2019 г.). «Архитектура аналитики петабайтного масштаба путем масштабирования Postgres в Azure с расширением Citus». Блог . Сообщество Microsoft Tech.
- ^ Эммануэль Чеккет (21 мая 2009 г.). Создание хранилищ PetaByte с помощью немодифицированного PostgreSQL (PDF) . PGCon 2009. Получено 12 ноября 2011 г.
- ^ "MySpace.com масштабирует аналитику для всех своих друзей" (PDF) . пример. Aster Data. 15 июня 2010 г. Архивировано (PDF) из оригинала 14 ноября 2010 г. Получено 12 ноября 2011 г.
- ^ "Отключение в прошлые выходные". Блог . Geni. 1 августа 2011 г.
- ^ "База данных". Wiki . OpenStreetMap.
- ^ Домен PostgreSQL affiliates .ORG, Австралия: Computer World, 24 августа 2023 г.
- ^ abc W. Jason Gilmore; RH Treat (2006). Начало PHP и PostgreSQL 8: От новичка до профессионала. Apress. ISBN 978-1-43020-136-6. Получено 30 августа 2017 г. .
- ^ Sony Online выбирает базу данных с открытым исходным кодом вместо Oracle, Computer World
- ^ «Исследование PostgreSQL в Web Commerce Group» (PDF) (1.2 ред.). PostgreSQL.
- ^ "Обзор архитектуры". Reddit software wiki . Reddit. 27 марта 2014 г. Получено 25 ноября 2014 г.
- ^ Пихлак, Мартин. «PostgreSQL @Skype» (PDF) . wiki.postgresql.org . Проверено 16 января 2019 г.
- ^ «Сколько вы платите за свою базу данных?». Блог Sun Microsystems. 2007. Архивировано из оригинала 7 марта 2009 г. Получено 14 декабря 2007 г.
- ^ "База данных – MusicBrainz". MusicBrainz Wiki . Получено 5 февраля 2011 г.
- ↑ Данкаваж, Дэниел П. (13 июля 2010 г.). «NASA нуждается в помощи Postgres-Nagios».
- ^ Рой, Гэвин М (2010). "PostgreSQL at myYearbook.com" (обсуждение). USA East: PostgreSQL Conference. Архивировано из оригинала 27 июля 2011 г.
- ^ «Поддержание Instagram на должном уровне с более чем миллионом новых пользователей за двенадцать часов». Instagram-engineering.tumblr.com. 17 мая 2011 г. Получено 7 июля 2012 г.
- ^ Келли, Мэтью (27 марта 2015 г.). В сердце гиганта: Postgres на TripAdvisor. PGConf US 2015. Архивировано из оригинала 23 июля 2015 г. Получено 23 июля 2015 г.(Видеопрезентация)
- ^ "Yandex.Mail's successful migration from Oracle to Postgres [pdf]". Hacker News: news.ycombinator.com . Получено 28 сентября 2016 г. .
- ^ аб С. Риггс; Дж. Чолли; Х. Кросинг; Г. Бартолини (2015). Пособия по администрированию PostgreSQL 9 — второе издание. Пакет. ISBN 978-1-84951-906-9. Получено 5 сентября 2017 г. .
- ^ "Met Office меняет Oracle на PostgreSQL". computerweekly.com . 17 июня 2014 г. Получено 5 сентября 2017 г.
- ^ "Программное обеспечение с открытым исходным кодом". FlightAware . Получено 22 ноября 2017 г. .
- ^ "Ansible at Grofers (часть 2) — Управление PostgreSQL". Lambda - The Grofers Engineering Blog . 28 февраля 2017 г. Получено 5 сентября 2018 г.
- ^ Макмахон, Филипп; Чиориан, Мария-Ливия; Коулман, Сьюзи; Аскулум, Акаш (30 ноября 2018 г.). «Цифровой блог: Пока-пока, Монго, привет, Постгрес». The Guardian . ISSN 0261-3077.
- ^ "Повышенные ошибки в API и ChatGPT" . Получено 2 декабря 2023 г.
- ^ Алекс Уильямс (1 апреля 2013 г.). «Heroku заставляет клиентов обновиться, чтобы исправить критическую дыру в безопасности PostgreSQL». TechCrunch .
- ↑ Барб Дарроу (11 ноября 2013 г.). «Heroku улучшает Postgres с помощью отката базы данных и упреждающих оповещений». GigaOM.
- ^ Крейг Керстиенс (26 сентября 2013 г.). «WAL-E и непрерывная защита с Heroku Postgres». Блог Heroku.
- ^ "EnterpriseDB предлагает облачную базу данных Postgres Plus". Techweekeurope.co.uk. 27 января 2012 г. Получено 7 июля 2012 г.
- ^ "Alibaba Cloud расширяет техническое партнерство с EnterpriseDB". Milestone Partners . 26 сентября 2018 г. Получено 9 июня 2020 г.
- ^ О'Доэрти, Пол; Асселин, Стефан (2014). "3: Архитектура рабочего пространства VMware". VMware Horizon Suite: Создание служб для конечных пользователей. Технология VMware Press. Аппер Сэддл Ривер, Нью-Джерси: VMware Press. стр. 65. ISBN 978-0-13-347910-2. Получено 19 сентября 2016 г. .
В дополнение к версии PostgreSQL с открытым исходным кодом, VMware предлагает vFabric Postgres или vPostgres. vPostgres — это виртуальное устройство PostgreSQL, настроенное для виртуальных сред.
- ^ Эл Сарджент (15 мая 2012 г.). «Представляем VMware vFabric Suite 5.1: автоматизированное развертывание, новые компоненты и поддержка открытого исходного кода». Блоги VMware.
- ^ "VMware vFabric Suite EOA" (PDF) . 1 сентября 2014 г. . Получено 17 декабря 2023 г. .
- ^ Джефф (14 ноября 2013 г.). «Amazon RDS для PostgreSQL – теперь доступно». Блог Amazon Web Services.
- ^ Алекс Уильямс (14 ноября 2013 г.). «PostgreSQL теперь доступен на сервисе реляционных баз данных Amazon». TechCrunch .
- ^ "Amazon Aurora Update – PostgreSQL Compatibility". Блог AWS . 30 ноября 2016 г. Получено 1 декабря 2016 г.
- ^ "Анонс базы данных Azure для PostgreSQL". Блог Azure . 10 мая 2017 г. Получено 19 июня 2019 г.
- ^ "Aliyun PolarDB выпустила крупные обновления для поддержки миграции баз данных, таких как Oracle, в облако одним щелчком мыши". Develop Paper . 6 июля 2019 г.
- ^ "Асинхронная репликация Master-Slave баз данных PostgreSQL в один клик". DZone . Получено 26 мая 2017 г. .
- ^ "Документация IBM Cloud Hyper Protect DBaaS для PostgreSQL". cloud.ibm.com . Получено 24 июня 2020 г. .
- ^ «Crunchy Data продолжает поддерживать PostgreSQL с выпуском Crunchy Bridge». 18 сентября 2020 г.
- ^ "SELECT 'Hello, World' Serverless Postgres, созданный для облака". 15 июня 2022 г.
- ^ «Представляем Nile, Serverless Postgres для современных SaaS». 25 октября 2023 г.
- ^ "Политика управления версиями". PostgreSQL Global Development Group . Получено 4 октября 2018 г.
- ^ Ваас, Лиза (2 декабря 2002 г.). «Базы данных нацелены на предприятия». eWeek . Получено 29 октября 2016 г.
- ^ Крилл, Пол (20 ноября 2003 г.). «PostgreSQL повышает популярность баз данных с открытым исходным кодом». InfoWorld . Получено 21 октября 2016 г. .
- ^ Крилл, Пол (19 января 2005 г.). «База данных с открытым исходным кодом PostgreSQL может похвастаться ускорением Windows». InfoWorld . Получено 2 ноября 2016 г. .
- ^ Вайс, Тодд Р. (5 декабря 2006 г.). «Выпущена версия 8.2 базы данных PostgreSQL с открытым исходным кодом». Computerworld . Получено 17 октября 2016 г. .
- ^ Гилбертсон, Скотт (5 февраля 2008 г.). «PostgreSQL 8.3: база данных с открытым исходным кодом обещает молниеносную скорость». Wired . Получено 17 октября 2016 г. .
- ^ Хубер, Матиас (2 июля 2009 г.). «PostgreSQL 8.4 оказался богатым на возможности». Linux Magazine . Получено 17 октября 2016 г. .
- ^ Брокмейер, Джо (30 сентября 2010 г.). "Пять корпоративных функций PostgreSQL 9". Linux.com . Linux Foundation . Получено 6 февраля 2017 г. .
- ^ Тимоти Прикетт Морган (12 сентября 2011 г.). "PostgreSQL revs to 9.1, aims for enterprise". The Register . Получено 6 февраля 2017 г. .
- ^ "PostgreSQL: Выпущен PostgreSQL 9.2". www.postgresql.org . 10 сентября 2012 г.
- ^ «Повторное внедрение Hstore для PostgreSQL». InfoQ .
- ^ Ричард, Чиргвин (7 января 2016 г.). «Скажи ой, UPSERT в голове: вышла версия PostgreSQL 9.5». The Register . Получено 17 октября 2016 г.
- ^ "PostgreSQL: Документация: 10: Глава 31. Логическая репликация". www.postgresql.org . 12 августа 2021 г.
- ^ "PostgreSQL 11 Released". 18 октября 2018 г. Получено 18 октября 2018 г.
- ^ "PostgreSQLRelease Notes" . Получено 18 октября 2018 г. .
- ^ "PostgreSQL: PostgreSQL 12 выпущен!". Новости Postgresql . 3 октября 2019 г.
- ^ "Заметки о выпуске PostgreSQL 13". www.postgresql.org . 12 августа 2021 г.
- ^ "PostgreSQL 13 Released!". www.postgresql.org . 24 сентября 2020 г.
- ^ "Заметки о выпуске PostgreSQL 14". www.postgresql.org . 11 ноября 2021 г.
- ^ "PostgreSQL 14 Released!". www.postgresql.org . 30 сентября 2021 г.
- ^ «PostgreSQL 16 выпущен!». 14 сентября 2023 г.
- ^ «PostgreSQL 17 выпущен!». 26 сентября 2024 г.
Дальнейшее чтение
- Обе, Регина; Хсу, Лео (8 июля 2012 г.). PostgreSQL: Up and Running. O'Reilly . ISBN 978-1-4493-2633-3.
- Кросинг, Ханну; Ройбал, Кирк (15 июня 2013 г.). Программирование сервера PostgreSQL (второе издание). Packt Publishing . ISBN 978-1-84951-698-3.
- Риггс, Саймон; Кросинг, Ханну (27 октября 2010 г.). PostgreSQL 9 Administration Cookbook (второе издание). Packt Publishing . ISBN 978-1-84951-028-8.
- Смит, Грег (15 октября 2010 г.). Высокая производительность PostgreSQL 9. Packt Publishing . ISBN 978-1-84951-030-1.
- Gilmore, W. Jason; Treat, Robert (27 февраля 2006 г.). Начало PHP и PostgreSQL 8: От новичка к профессионалу. Apress . стр. 896. ISBN 1-59059-547-5. Архивировано из оригинала 8 июля 2009 г. . Получено 28 апреля 2009 г. .
- Дуглас, Корри (5 августа 2005 г.). PostgreSQL (второе издание). Сэмс . стр. 1032. ISBN 0-672-32756-2.
- Мэтью, Нил; Стоунз, Ричард (6 апреля 2005 г.). Beginning Databases with PostgreSQL (второе изд.). Apress . стр. 664. ISBN 1-59059-478-9. Архивировано из оригинала 9 апреля 2009 г. . Получено 28 апреля 2009 г. .
- Worsley, John C.; Drake, Joshua D. (январь 2002 г.). Practical PostgreSQL . O'Reilly Media . стр. 636. ISBN 1-56592-846-6.
Внешние ссылки
На Викискладе есть медиафайлы по теме PostgreSQL .
В Wikibooks есть книга по теме: PostgreSQL
- Официальный сайт , и вики
- Каталог программного обеспечения связанных проектов и продуктов
- Официальный основной репозиторий исходного кода (для просмотра) и FAQ для разработчиков
- Официальный справочник для авторов документации PostgreSQL
- Все официальные репозитории исходного кода PostgreSQL
- PostgreSQL на GitHub