Группа разработчиков PostgreSQL объявила о выходе PostgreSQL 12, новейшей версии реляционной системы управления базами данных с открытым исходным кодом.
В PostgreSQL 12 значительно улучшена производительность запросов – особенно это касается работы с большими объёмами данных, также произведена оптимизация использования дискового пространства в целом.
Среди новых возможностей:
- реализация языка запросов JSON Path (важнейшей части стандарта SQL/JSON);
- оптимизация исполнения общих табличных выражений (WITH);
- поддержка генерируемых столбцов
Также сообщество продолжает работу над расширяемостью и надёжностью PostgreSQL, развивая поддержку интернационализации, возможностей аутентификации, предоставляя более простые пути администрирования системы.
В этот релиз вошла реализация интерфейса подключаемых движков хранения, что отныне позволяет разработчикам создавать свои собственные методы хранения данных.
Улучшения производительности
PostgreSQL 12 включает существенные улучшения производительности и процедур обслуживания для систем индексирования и секционирования.
Индексы B-tree — стандартный тип индексирования в PostgreSQL, были оптимизированы в версии 12 для нагрузок, предполагающих частые модификации индексов. Использование эталонного теста TPC-C для PostgreSQL 12 продемонстрировало сокращение использования пространства в среднем на 40% и общий прирост производительности запросов.
Запросы к секционированным таблицам получили заметные улучшения, особенно для таблиц, состоящих из тысяч секций, предполагающих работу только с ограниченными частями массивов данных. Была улучшена производительность добавления данных в секционированные таблицы с помощью INSERT и COPY, а также возможность подсоединения новой секции без блокирования выполняемых запросов.
В PostgreSQL 12 были произведены дополнительные усовершенствования в индексировании, которые влияют на общую производительность, включая:
- снижение накладных расходов при генерации WAL для типов индексов GiST, GIN и SP-GiST;
- возможность создавать так называемые покрывающие индексы (covering indexes, предложение INCLUDE) на GiST-индексы;
- возможность выполнять запросы «ближайших соседей» (k-NN search) с помощью оператора расстояния (<->) и использованием индексов SP-GiST;
- поддержку сбора статистики наиболее распространенных значений (most-common value, MCV) с помощью CREATE STATISTICS, что помогает получать лучшие планы выполнения запросов при использовании столбцов, значения для которых распределены неравномерно.
JIT-компиляция с использованием LLVM, появившаяся в PostgreSQL 11, теперь включена по умолчанию. JIT-компиляция позволяет повышать производительность при работе с выражениями в предложениях WHERE, целевых списках, агрегатах и некоторых внутренних операциях. Она доступна, если вы скомпилировали PostgreSQL с LLVM или используете пакет PostgreSQL, который был создан с включённым LLVM.
Улучшения возможностей языка SQL и совместимости со стандартом
В PostgreSQL 12 появилась возможность выполнять запросы к документам JSON с использованием выражений пути JSON, определенных в стандарте SQL/JSON. Такие запросы могут использовать существующие механизмы индексации для документов, хранящихся в формате JSONB, для эффективного извлечения данных.
Общие табличные выражения, также известные как запросы с WITH, в PostgreSQL 12 теперь могут автоматически исполняться с применением подстановки, что, в свою очередь, может помочь повысить производительность многих существующих запросов. В новой версии часть запроса WITH может выполняться с подстановкой, только если она не является рекурсивной, не имеет побочных эффектов и на неё ссылаются только один раз в последующей части запроса.
В PostgreSQL 12 появляется поддержка «генерируемых столбцов». Описанный в стандарте SQL, этот тип столбца вычисляет значение на основе содержимого других столбцов в той же таблице. В этой версии PostgreSQL поддерживает «хранимые генерируемые столбцы», где вычисленное значение хранится на диске.
Интернационализация
PostgreSQL 12 расширяет поддержку ICU-сопоставлений, разрешая пользователям определять «недетерминированные сопоставления», которые могут, например, позволять сравнения без учёта регистра или ударения.
Аутентификация
PostgreSQL расширяет свою поддержку надёжных методов аутентификации с помощью нескольких улучшений, которые обеспечивают дополнительную безопасность и функциональность. В этом выпуске представлено шифрование на стороне клиента и на стороне сервера для аутентификации через интерфейсы GSSAPI, а также возможность PostgreSQL обнаруживать серверы LDAP, если PostgreSQL скомпилирован с OpenLDAP.
Кроме того, PostgreSQL 12 теперь поддерживает вариант многофакторной аутентификации. Теперь сервер PostgreSQL может затребовать у клиента предоставление валидного SSL-сертификата с соответствующим именем пользователя с использованием clientcert=verify-full, и комбинировать это с отдельным требованием метода аутентификации (например, scram-sha-256).
Администрирование
В PostgreSQL 12 появилась возможность выполнять неблокирующее перестроение индексов с помощью команды REINDEX CONCURRENTLY. Это позволяет пользователям избегать простоя в работе СУБД при длительном перестроении индексов.
Кроме того, в PostgreSQL 12 можно включать или отключать контрольные суммы страниц в кластере, находящемся в выключенном состоянии, с помощью команды pg_checksums. Ранее контрольные суммы страниц — функцию, помогающую проверить целостность данных, хранящихся на диске, — можно было включить только в момент инициализации кластера PostgreSQL с помощью initdb.
>>> Источник