Релиз СУБД PostgreSQL 16

После 11 месяцев разработки опубликована новая стабильная ветка СУБД PostgreSQL 16. Обновления для новой ветки будут выходить в течение пяти лет до ноября 2028 года. Поддержка PostgreSQL 11.x, самой старой из поддерживаемых веток, будет прекращена 9 ноября.

Основные новшества:

  • Механизм логической репликации, позволяющий транслировать на другой сервер изменения, вносимые в БД в ходе добавления, удаления или обновления записей, расширен возможностью реплицирования изменений с резервного сервера (standby). Например, в случае высокой нагрузки на первичный сервер резервный сервер можно использовать для передачи изменений на остальные вторичные системы.
  • Добавлена поддержка двунаправленной логической репликации таблиц, позволяющая синхронизировать изменения в двух таблицах на разных серверах. Добавленные в PostgreSQL 16 возможности репликации позволяют создавать конфигурации с несколькими активными серверами (режим «active-active»), на которых одновременно можно выполнять операции «INSERT», «UPDATE», «DELETE».
  • Повышена производительность логической репликации. Например, реализована возможность использования параллельно выполняемых обработчиков при применении подписчиками больших транзакций. Добавлена возможность использования на стороне подписчика индексов B-tree для таблиц без первичных ключей, что позволяет обойтись без последовательного сканирования при поиске записей. Ускорено выполнение операций начальной синхронизации некоторых таблиц в бинарном формате.
  • Расширены средства управления доступом к логической репликации. Например, добавлена новая предопределённая роль «pg_create_subscription», позволяющая предоставить пользователям право на создание новых подписок.
  • Добавлена поддержка балансировки нагрузки на стороне клиентов, использующих штатную библиотеку libpq. Балансировка позволяет клиенту подключаться к разным хостам, которые могут выбираться как в определённом, так и в случайном порядке. Если хост недоступен осуществляется попытка подключения к другому серверу. После установки соединения запросы в рамках сеанса отправляются на выбранный сервер.
  • Внесены оптимизации и улучшена работа планировщика запросов:
    • Обеспечено распаралелливание операций соединения таблиц «FULL JOIN» и «RIGHT JOIN«.
    • Оптимизировано применение операций «RIGHT JOIN» и «OUTER JOIN» для поиска строк, отсутствующих в присоединяемой таблице («anti-join»).
    • Повышена эффективность плана оптимизации для запросов в которых агрегатные функции используются в сочетании с выражениями «DISTINCT» или «ORDER BY».
    • Для ускорения запросов «SELECT DISTINCT» задействована инкрементальная сортировка.
    • Проведена оптимизация оконных функций.
    • Повышена скорость загрузки данных в пакетном режиме при помощи операции «COPY«, среди прочего оптимизация затронула и одновременное выполнение нескольких операций «COPY». В некоторых ситуациях ускорение может достигать 300%.
    • Улучшена стратегия выполнения операции VACUUM, что позволило сократить число ситуаций, требующих блокировки всей таблицы.
    • На системах с архитектурами x86 и ARM реализовано использование векторных процессорных инструкций (SIMD) для ускорения обработки ASCII-строк, операций с данными в формате JSON и выполнения поиска в массивах и подтранзакциях.
  • Реализована поддержка операции «IS JSON» для проверки типа выражения JSON, определённой в стандарте SQL:2023.
    Добавлены функции JSON_ARRAY() и JSON_ARRAYAGG() для создания массивов в формате JSON.

  • Разрешено использование в числах символа подчёркивания для повышения наглядности цифровых литералов. Например «SELECT … WHERE a › 1_000_000».
  • Добавлена возможность указания шестнадцатеричных, двоичных и восьмеричных литералов. Например «SELECT 0x1538, 0o12450, 0b1010100111001».
  • В утилиту psql добавлена новая команда «bind», позволяющая формировать параметризованные запросы и использовать переменные в запросах. Например «SELECT $1::int + $2::int bind 1 2 g».
  • Расширена поддержка свойств локали «Collation«, позволяющих задавать правила сортировки и методы сопоставления с учётом смысла символов (например, при сортировке цифровых значений учитывается наличие минуса и точки перед числом и разные виды написания, а при сравнении не принимается во внимание регистр символов и наличие знака ударения). По умолчанию теперь выполняется сборка с ICU-локалями («ICU Collation«) вместо локали libc.
  • Расширены возможности для мониторинга производительности СУБД. Добавлено служебное представление «pg_stat_io» со статистикой, отражающей нагрузку на систему ввода/вывода различными бэкендами (background worker, autovacuum и т.п.) и объектами.
  • В служебное представление «pg_stat_all_tables» добавлено новое поле с данными о времени последнего сканирования таблицы или индекса.
  • В модуле «auto_explain» появилась поддержка журналирования значений, передаваемых в параметризованные запросы. Повышена точность алгоритма отслеживания запросов, используемого в представлениях pg_stat_statements и pg_stat_activity.
  • В файлах pg_hba.conf и pg_ident.conf, содержащих настройки доступа и аутентификации, предоставлена возможность использования регулярных выражений для имён пользователей и БД, а также добавлены директивы «include», «include_if_exists» и «include_dir» для включения содержимого других файлов с настройками.
  • Добавлены дополнительные параметры для управления защитой клиентского соединения: require_auth, для задания параметров аутентификации, допустимых при подключении к серверу; sslrootcert=»system» для использования хранилища корневых сертификатов удостоверяющих центров, предоставляемого операционной системой клиента. Добавлена поддержка механизма делегированная учётных данных Kerberos, который может применяться для аутентифицированного подключения к внешним сервисам с использованием модулей postgres_fdw и dblink.

Источник: http://www.opennet.ru/opennews/art.shtml?num=59758