После 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.
https://opennet.ru/59758-postgresql