PostgreSQL (произносится «Пост-Грес-Кью-Эл») — свободная объектно-реляционная система управления базами данных (СУБД).
Существует в реализациях для множества UNIX-подобных платформ, включая различные BSD-системы, IRIX, Linux, macOS, Solaris/OpenSolaris, Tru64, QNX, а также для Microsoft Windows.
Поддержка стандартов, возможности, особенности PostgreSQL базируется на языке SQL и поддерживает многие из возможностей стандарта SQL:2011«Appendix D. SQL Conformance» . PostgreSQL 9 Documentation . PostgreSQL Global Development Group. 2009 . Retrieved 2013-04-01.«SQL Conformance» . postgresql.org. 2013-04-04. Retrieved 2013-08-28. и ряд возможностей SQL:2016 в части работы с данными в формате JSON.
В PostgreSQL есть следующие ограничения:
Максимальный размер базы данныхНет ограниченийМаксимальный размер таблицы32 ТбайтМаксимальный размер поля1 ГбайтМаксимум записей в таблицеОграничено размерами таблицыМаксимум полей в записи250—1600, в зависимости от типов полейМаксимум индексов в таблицеНет ограничений
Сильными сторонами PostgreSQL считаются: высокопроизводительные и надёжные механизмы транзакций и репликации; расширяемая система встроенных языков программирования: в стандартной поставке поддерживаются , PL/Perl, PL/Python и ; дополнительно можно использовать PL/Java, PL/PHP, PL/Py, PL/R, PL/Ruby, PL/Scheme, PL/sh и PL/V8, а также имеется поддержка загрузки модулей расширения на языке C;
наследование; возможность индексирования геометрических (в частности, географических) объектов и наличие базирующегося на ней расширения PostGIS; встроенная поддержка слабоструктурированных данных в формате JSON с возможностью их индексации; расширяемость (возможность создавать новые типы данных, типы индексов, языки программирования, модули расширения, подключать любые внешние источники данных).
История PostgreSQL создана на основе некоммерческой СУБД Postgres, разработанной как open-source проект в Калифорнийском университете в Беркли. К разработке Postgres, начавшейся в 1986 году, имел непосредственное отношение Майкл Стоунбрейкер, руководитель более раннего проекта Ingres, на тот момент уже приобретённого компанией Computer Associates. Название расшифровывалось как «Post Ingres», и при создании Postgres были применены многие ранние наработки.
Стоунбрейкер и его студенты разрабатывали новую СУБД в течение восьми лет с 1986 по 1994 годы. За этот период в синтаксис были введены процедуры, правила, пользовательские типы и другие компоненты. В 1995 году разработка снова разделилась: Стоунбрейкер использовал полученный опыт в создании коммерческой СУБД Illustra, продвигаемой его собственной одноимённой компанией (приобретённой впоследствии компанией Informix), а его студенты разработали новую версию Postgres — Postgres95, в которой язык запросов POSTQUEL — наследие Ingres — был заменен на SQL.
Разработка Postgres95 была выведена за пределы университета и передана команде энтузиастов. Новая СУБД получила имя, под которым она известна и развивается в текущий момент — PostgreSQL. Старое название «Postgres» по-прежнему используется в сообществе наряду с «PostgreSQL», так как для многих оно удобнее в произношении.
+ История версий Версия Дата первого релиза Последняя минорная версия Дата последнего релиза Окончание поддержки Реализованные возможности 6.0 1997-01-29 Формально первый выпуск PostgreSQL. Уникальные индексы, утилита pg_dumpall, аутентификация с использованием ident 6.1 1997-06-08 1997-07-22 Многоколоночные индексы, последовательности, тип данных money, GEQO (GEnetic Query Optimizer) 6.2 1997-10-02 1997-10-17 Интерфейс JDBC, триггеры, интерфейс программирования сервера, ограничения 6.3 1998-03-01 1998-04-07 2003-03-01 Поддержка subselect из SQL-92, PL/pgTCL 6.4 1998-10-30 1998-12-20 2003-10-30 Поддержка VIEW (только в режиме read-only) и правил, PL/pgSQL 6.5 1999-06-09 1999-10-13 2004-06-09 MVCC, временные таблицы, поддержка новых операторов SQL (CASE, INTERSECT и EXCEPT) 7.0 2000-05-08 2000-11-11 2004-05-08 Внешние включи, синтаксис SQL-92 для соединений (JOIN) 7.1 2001-04-13 2001-08-15 2006-04-13 Упреждающая журнализация, OUTER JOIN 7.2 2002-02-04 2005-05-09 2007-02-04 PL/Python, поле OID становится необязательным в таблицах, интернационализация и локализация сообщений 7.3 2002-11-27 2008-01-07 2007-11-27 схемы, табличные функции, подготовленные запросы 7.4 2003-11-17 2010-10-04 2010-10-01 Оптимизация в JOINах и функции data warehouse 8.0 2005-01-19 2010-10-04 2010-10-01 Версия для Microsoft Windows, точки сохранения в транзакциях, табличные пространства, point-in-time recovery 8.1 2005-11-08 2010-12-16 2010-11-08 Оптимизация производительности, двухфазный commit, секционирование таблиц, index bitmap scan в планировщике SQL-запросов, разделяемый режим блокировки на уровне строк, роли 8.2 2006-12-05 2011-12-05 2011-12-05 Оптимизация производительности, построение индексов без остановки работы, рекомендательные блокировки, режим «тёплого резерва» при восстановлении базы по записям WAL 8.3 2008-02-04 2013-02-07 2013-02-07 Механизм Heap-only tuples, полнотекстовый поиск, SQL/XML, типы ENUM, типы UUID 8.4 2009-07-01 2014-07-24 2014-07-24 Оконные функции, права доступа на уровне полей (колонок) таблицы, параллельное восстановление базы, правила сортировки на уровне базы, общие табличные запросы и рекурсивные запросы 9.0 2010-09-20 2015-10-08 2015-10-08 Встроенная потоковая двоичная репликация, режим горячего резерва, обновление без остановки сервера, поддержка 64-битных версий Windows 9.1 2011-09-12 2016-10-27 2016-10-27 Синхронная репликация, правила сортировки, задаваемые для отдельных колонок, нелоггируемые таблицы, уровень изоляции транзакций «сериализуемая изоляция снимков», возможность записи в общих табличных запросах SQL, интеграция с SELinux, расширения, внешние таблицы 9.2 2012-09-10 2017-11-09 2017-11-09 Каскадная потоковая репликация, сканирование только индекса, прямая поддержка JSON, улучшенное управление блокировками, диапазонные типы, утилита pg_receivexlog, индексы space-partitioned GiST 9.3 2013-09-09 2018-11-08 2018-11-08 Настраиваемые фоновые рабочие процессы, контрольные суммы страниц для обнаружения повреждённых данные, операторы JSON, LATERAL JOIN, ускорена работа pg_dump, новая утилита pg_isready для мониторинга сервера, доработанные возможности триггеров и представлений базы (view), записываемые внешние таблицы, материализованные представления, улучшения репликации 9.4 2014-12-18 2020-02-13 2020-02-13 Тип данных JSONB, Оператор ALTER SYSTEM для изменения значений в конфигурации системы, возможность обновлять материализованные представления без блокировки чтения, динамическая регистрация/запуск/остановка фоновых рабочих процессов, API логического декодирования для подключения к БД, улучшение работы индексов GIN, поддержка страниц типа huge для Linux, перезагрузка кэша базы данных с использованием pg_prewarm, новая ускоренная версия Hstore позиционируемая как предпочтительный способ хранения колоночных данных 9.5 2016-01-07 2021-02-11 2021-02-11 UPSERT, политики защиты строк, TABLESAMPLE, CUBE/ROLLUP, GROUPING SETS, и новый тип индекса BRIN 9.6 2016-09-29 2021-11-11 2021-11-11 Поддержка параллельных запросов, усовершенствования функционала PostgreSQL для работы со сторонними данными (FDW) — добавлен параметр pushdown для sort/join, множественные синхронные сервера горячего резерва, ускорена операция vacuum на больших таблицах 10 2017-10-05 2022-11-10 2022-11-10 Логическая репликация, декларативное секционирование таблиц, улучшенное параллельное выполнение в запросах 11 2018-10-18 2023-11-09 2023-11-09 Улучшены устойчивость и производительность при секционировании, поддержка транзакций в хранимых процедурах, улучшенные возможности для параллельного выполнения в запросах, just-in-time (JIT) компиляция выражений 12 2019-10-03 2024-11-21 2024-11-21 Ускорение запросов и более экономное использование дискового пространства; поддержка выражений языка путей SQL/JSON; генерируемые столбцы; улучшения в интернационализации и аутентификации; новый интерфейс для создания подключаемых движков работы с таблицами 13 2020-09-24 2025-11-13 2025-11-13 Дедупликация узлов в индексах B-tree ускорена и требует меньше места, увеличена производительность запросов, которые используют агрегаты или секционированные таблицы, улучшено планирование запросов при использовании расширенной статистики, распараллелено вакуумирование индексов, инкрементальная сортировка 14 2021-09-30 2026-08-13 2026-11-12 Разрешены определённые стандартом SQL опции SEARCH и CYCLE в общих табличных запросах, разрешено добавлять DISTINCT к GROUP BY152022-10-13 2026-08-132027-11-11 Поддержка команды SQL MERGE Выборочная публикация содержимого таблиц в публикациях логической репликации благодаря возможности указывать списки столбцов и условия фильтрации строк Дополнительные возможности сжатия, включая поддержку сжатия Zstandard (zstd). Сюда входит поддержка выполнения сжатия на стороне сервера во время pg_basebackup Поддержка структурированного вывода журналов сервера в формате JSON Улучшена производительность, особенно при сортировке в памяти и на диске162023-09-14 2026-08-132028-11-09 Возможность распараллеливания FULL и внутренних правых OUTER хэш-соединений Возможность логической репликацию с резервных серверов Возможность подписчикам логической репликации выполнять большие транзакции параллельно Возможность мониторинга статистики ввода-вывода с использованием нового представления pg_stat_io Добавление конструкторов SQL / JSON и функций идентификации Улучшение производительности заморозки сборки мусора Добавлена поддержка сопоставления регулярных выражений имен пользователей и баз данных в pg_hba.conf и имен пользователей в pg_ident.conf172024-09-26 2026-08-132029-11-08 Новая система управления памятью для VACUUM, которая снижает потребление памяти и может повысить общую производительность сборки мусора Новые возможности SQL / JSON, включая конструкторы, функции идентификации и функцию JSON_TABLE(), которая преобразует данные JSON в табличное представление Различные улучшения производительности запросов, в том числе для последовательного чтения с использованием потокового ввода-вывода, пропускной способности записи при высоком параллелизме и поиска по нескольким значениям в индексе btree Улучшения логической репликации, включая: Управление отказоустойчивостью pg_createsubscriber, утилита, создающая логические копии из физических резервных копий pg_upgrade теперь сохраняет слоты репликации как у издателей, так и у подписчиков Новая опция подключения на стороне клиента, sslnegotiation = direct, которая выполняет прямое «рукопожатие» TLS, чтобы избежать повторного согласования pg_basebackup теперь поддерживает инкрементное резервное копирование COPY добавляет новую опцию ON_ERROR ignore, которая позволяет продолжить операцию копирования в случае ошибки 18 2025-09-25 2026-08-13 2030-11-14 Новая подсистема ввода-вывода и улучшения асинхронного ввода-вывода. 19 2025-09-25 2026-08-13
Основные возможности
Функции Функции являются блоками кода, исполняемыми на сервере, а не на клиенте БД. Хотя они могут писаться на чистом SQL, реализация дополнительной логики, например, условных переходов и циклов, выходит за рамки SQL и требует использования некоторых языковых расширений. Функции могут писаться с использованием одного из следующих языков: Встроенный процедурный язык PL/pgSQL, во многом аналогичный языку PL/SQL, используемому в СУБД Oracle; Скриптовые языки — PL/Lua, PL/LOLCODE, PL/Perl, PL/PHP, PL/Python, PL/Ruby, PL/sh, PL/Tcl, PL/Scheme, PL/v8 (Javascript); Классические языки — C, C++, Java (через модуль PL/Java); Статистический язык R (через модуль PL/R). PostgreSQL допускает использование функций, возвращающих набор записей, который далее можно использовать так же, как и результат выполнения обычного запроса.
Функции могут выполняться как с правами их создателя, так и с правами текущего пользователя.