Релиз СУБД PostgreSQL 18

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 412
Зарегистрирован: 20.08.2022

#

Релиз СУБД PostgreSQL 18
Дата публикации:Thu, 25 Sep 2025 16:20:04 +0300

После года разработки опубликована новая стабильная ветка СУБД PostgreSQL 18. Обновления для новой ветки будут выходить в течение пяти лет до ноября 2030 года. Поддержка PostgreSQL 13.x, самой старой из поддерживаемых веток, будет прекращена 13 ноября.
Основные новшества:
  • Добавлена подсистема асинхронного ввода/вывода, позволяющая увеличить пропускную способность ввода/вывода и избавиться от задержек. Помимо доступной на всех платформах универсальной реализации AIO (io_method=worker), основанной на выполнении нескольких процессов-обработчиков (по умолчанию 3), в Linux может применяться интерфейс асинхронного ввода/вывода io_uring (io_method=io_uring), поддерживаемый начиная с ядра Linux 5.1. Асинхронный ввод/вывод пока задействован только для ускорения выполнения некоторых операций, связанных с чтением данных из файловой системы, таких как последовательный перебор, сканирование битовой карты индексов и проведение чистки (vacuum). В некоторых тестах применение AIO приводит к увеличению производительности в 2-3 раза. Операции записи продолжают выполняться в синхронном режиме для достижения требований ACID. Реализована оптимизация "skip scan" в многостолбцовых индексах, благодаря которой индекс может использоваться не только для проверки первого проиндексированного столбца и полной связки столбцов, но и для обработки по отдельности остальных проиндексированных столбцов. Например, ранее при создании B-tree индекса над столбцами "(status, date)" индекс применялся только для запросов, проверяющих поле "status" или оба поля "status" и "date", а при проверке в запросе только поля "date" выполнялось сканирование содержимого таблицы. Режим "skip scan" позволяет в определённых ситуациях сканировать индекс при запросе только поля "date". Режим применяется только для индексов "B-tree" при использовании в запросе условного оператора "=" над индексированным полем, в ситуациях, когда пропущенное поле имеет небольшое количество различных значений (например, оптимизация сработает, если поле статус "status" имеет несколько фиксированных значений). Добавлены оптимизации, более эффективно использующие индексы для запросов, содержащих конструкции "OR" и "IN (...)" в блоке "WHERE", а также повышающие производительность планирования и выполнения объединения таблиц (например, ускорен код слияние хэшей и разрешено использовать инкрементальную сортировку при слиянии таблиц). Добавлена поддержка распараллеливания построения индексов GIN (Generalized Inverted Index), применяемых для индексации составных значений, таких как массивы, и организации поиска по полнотекстовым данным или структурам JSON. Добавлена возможность создания материализованных представлений и ключей для секционирования таблиц с индексами с признаком "unique", не использующими структуру B-tree. Повышена общая производительность блокировок для запросов, работающих с большим количеством таблиц, а также внесены улучшения в обработку запросов к секционированным таблицам, ускоряющие отсеивание не используемых секций и операции слияния (JOIN). Ускорены операции с текстом, такие как функции приведения в верхний/нижний регистр. Добавлен режим PG_UNICODE_FAST для ускорения учёта свойств локали Unicode-символов. Реализована возможность сохранения статистики планировщика запросов после обновления между значительными релизами PostgreSQL. Изменение позволяет избежать выполнения ресурсоёмкой операции "ANALYZE" после запуска новой версии, до завершения которой наблюдается проседание производительности СУБД. Повышена производительность утилиты pg_upgrade, применяемой для автоматизации перехода на новый значительный выпуск PostgreSQL. Оптимизации особенно заметны при обновлении БД, содержащих большое число объектов, таких как таблицы и последовательности. Для ускорения работы pg_upgrade также добавлен флаг "--jobs N" для распараллеливания проверок в N потоков и флаг "--swap" для замены каталогов с данными целиком без выставления ссылок, без клонирования и без копирования файлов. Добавлена поддержка виртуальных генерируемых столбцов, значение которых вычисляется на лету в процессе выполнения запросов, без сохранения на диск. Если в выражении "CREATE TABLE..." для генерируемых столбцов указано только ключевое слово "GENERATED" без уточнения типа (STORED или VIRTUAL), то новый вариант применяется по умолчанию вместо старой реализации. В старой реализации значения генерировались во время выполнения операций "INSERT" или "UPDATE" и сохранялись на диск для последующего использования. Недостатком виртуальных генерируемых столбцов является невозможность использования их в индексах, а достоинством - возможность выполнять нормализацию и изменение данных на лету (актуально при работе с данными JSON). Что касается классических хранимых генерируемых столбцов, то в новом выпуске для них обеспечена поддержка логической репликации. В командах INSERT, UPDATE, DELETE и MERGE реализована возможность вывода прошлых (OLD) и текущих (CURRENT) значений в выражении RETURNING. Например, "UPDATE... RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.". Добавлена функция uuidv7() для генерации случайных уникальных идентификаторов в формате UUIDv7. В отличие от старой функции для генерации UUID (gen_random_uuid), которая теперь дополнительно доступна под именем uuidv4(), в UUIDv7 помимо случайного значения включается время генерации. Наличие упорядоченных частей в значении UUID (первые 12 символов - эпохальное время, а последующие 18 - случайное значение) повышает эффективность сортировки и индексирования, что актуально так как UUID обычно используются для первичных ключей (например, ключи, созданные в близкое время размещаются рядом друг с другом в индексе). В операции "LIKE" реализована поддержка сопоставлений с текстом, в которых используются недетерминированные свойства локали "collation", позволяющие выполнять сопоставления с учётом смысла символов (например, при сравнении может не принимается во внимание знак ударения). Добавлена функция CASEFOLD для изменения регистра символов c учётом свойств локали "collation" (например, некоторые символы имеют более двух строчных вариантов или при сравнении требуют преобразования в верхний регистр, а не в нижний). Добавлена возможность использования временных ограничений (temporal constraint). В значениях "PRIMARY KEY" и "UNIQUE" для добавления временных ограничений следует использовать выражение "WITHOUT OVERLAPS", а в значении "FOREIGN KEY" - выражение PERIOD. Например, при определении первичных ключей можно ограничить ключи с перекрывающимися интервалами времени. Добавлена команда "CREATE FOREIGN TABLE ... LIKE command" для создания схемы внешней таблицы на основе определения локальной таблицы. Добавлена поддержка подключения к СУБД, используя аутентификацию на базе OAUTH 2.0 с применением токена доступа вместо пароля. Применение OAUTH позволяет не хранить пароли в БД, а идентифицировать пользователей через внешние сервисы, а также использовать такие возможности как двухфакторная аутентификация и единая точка входа (SSO). Добавлена функция ssl_tls13_ciphers(), через которую можно определить список алгоритмов шифрования, допустимых при подключении с использованием протокола TLSv1.3. В разряд устаревших и запланированных к удалению переведена поддержка аутентификации с использованием алгоритма md5 для хэширования паролей. Вместо md5 рекомендуется применять алгоритм SCRAM (SCRAM-SHA-256), появившийся в PostgreSQL 10. Дополнительно отмечается реализация поддержки проброса аутентификации на базе SCRAM при подключении через postgres_fdw и dblink к внешним серверам PostgreSQL. При выполнении операции "EXPLAIN ANALYZE" обеспечен вывод сведений о числе операций поиска в индексах при сканировании индекса и числе обращений к буферам при выполнении запроса. В вывод "EXPLAIN ANALYZE VERBOSE" включена статистика о CPU, WAL-журнале и интенсивности операций чтения. В таблицу pg_stat_all_tables добавлены сведения о времени, потраченном на операцию VACUUM и анализ таблиц. Предоставлена статистика об интенсивности ввода/вывода и нагрузке на WAL-журнал в разрезе отдельных соединений. В pg_stat_subscription_stats и логах добавлена информация с диагностикой конфликтов при выполнении операций записи во время логической репликации. В новых установках включено по умолчанию использование контрольных сумм для проверки целостности хранимых данных. Для отмены данного поведения при запуске initdb следует указать опцию "--no-data-checksums". В утилиту pg_createsubscriber добавлен флаг "--all" для создания логических реплик одной командой сразу для всех БД. Реализована новая версия (3.2) протокола, применяемого для взаимодействия внешних утилит с СУБД и реализованного в библиотеке libpq. Прошлое обновление протокола было произведено в PostgreSQL 7.4 (2003 год). В библиотеке libpq по умолчанию продолжает использоваться версия 3.0.
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=63877

Жизнь за Нер'зула!

Ответить