PostgreSQL 18 официально вышел: асинхронный I/O, UUIDv7, виртуальные столбцы и новые возможности безопасности

25 сентября 2025 состоялся официальный релиз PostgreSQL 18 — одного из самых значимых обновлений за последние годы. Версия приносит фундаментальные изменения в подсистему ввода-вывода с внедрением асинхронного I/O (AIO), ощутимые ускорения запросов, новые инструменты для разработчиков (включая UUIDv7 и виртуальные вычисляемые столбцы), а также расширенные возможности безопасности, апгрейда и мониторинга. Разбираемся, что именно изменилось и почему это важно для разработчиков и администраторов баз данных.

Три ключевых направления релиза

  • Производительность: революционный асинхронный I/O, оптимизации планировщика и индексации
  • Удобство для разработчиков: UUIDv7, виртуальные вычисляемые столбцы, расширения RETURNING и временные ограничения
  • Эксплуатация и безопасность: улучшенный pg_upgrade, продвинутое наблюдение, OAuth 2.0 и контроль целостности по умолчанию

Мощный рывок производительности

Асинхронный I/O (AIO): новый фундамент ввода-вывода

PostgreSQL 18 вводит подсистему асинхронного ввода-вывода, меняя традиционную синхронную модель работы с диском. Это особенно заметно на чтении и в облачных средах: типичный прирост производительности достигает 2–3 раз за счёт лучшей утилизации ядра и снижения латентности ожиданий I/O.

  • Поддержка Linux io_uring и кросс-платформенных воркеров там, где io_uring недоступен
  • Снижение I/O-латентности и более стабильная пропускная способность
  • Новая системная статистика для наблюдения за AIO, включая представление pg_aios для мониторинга операций в реальном времени

Оптимизации планировщика и индексов

  • Skip scan для B-деревьев: ускоряет запросы, которые не указывают все ведущие столбцы индекса
  • Умнее OR/IN: автоматическая конвертация в ANY(array) для более предсказуемого выполнения
  • Hash join: оптимизировано использование памяти и стратегий соединения
  • Параллельная сборка GIN: быстрее создание индексов для JSON и полнотекстового поиска
  • Секционирование: улучшено отсечение секций и объединения по секционированным таблицам

Новое для разработчиков

Виртуальные вычисляемые столбцы по умолчанию

В PostgreSQL 18 виртуальные (вычисляемые на лету) столбцы становятся вариантом по умолчанию там, где это уместно. Это снижает требования к хранению и ускоряет операции INSERT/UPDATE, поскольку значения не материализуются на диске. При этом вычисления всегда консистентны и актуальны.

  • Меньше затрат на хранение и обновление
  • Гарантированная согласованность производных значений
  • Материализованные (stored) вычисляемые столбцы теперь можно логически реплицировать

UUIDv7 — упорядочиваемые и кэш-дружелюбные идентификаторы

Нативная поддержка UUIDv7 объединяет глобальную уникальность с естественной хронологической сортировкой. Это уменьшает разбиение страниц и улучшает локальность доступа при индексных операциях по сравнению со случайными UUID.

  • Лучшая производительность B-деревьев и кешей
  • Хронологический порядок «из коробки» для временных данных
  • uuidv4() в этой версии выступает алиасом для gen_rand_uuid

Расширения RETURNING и временные ограничения

  • RETURNING: теперь можно гибко обращаться к старым и новым значениям в рамках одного DML с RETURNING, упрощая аудит изменений и реактивную логику приложения
  • WITHOUT OVERLAPS: поддержка временных ограничений устраняет пересечения интервалов на уровне схемы и помогает гарантировать корректность расписаний и бронирований

Безопасность и целостность данных

OAuth 2.0, отказ от MD5 и контроль шифров TLS

  • OAuth 2.0: новый метод аутентификации с конфигурацией через pg_hba.conf и загрузкой валидаторов токенов через oauth_validator_libraries — удобная интеграция с современными провайдерами идентичности
  • MD5 — deprecated: устаревший метод помечен как нежелательный; рекомендуется SCRAM-SHA-256 (удаление MD5 ожидается в следующем мажорном релизе)
  • Точный контроль шифров TLS 1.3: новый параметр ssl_tls13_ciphers позволяет задавать допустимые наборы шифров

Контроль целостности по умолчанию

Новые кластеры PostgreSQL 18 создаются с включёнными data checksums по умолчанию. Это помогает раньше обнаруживать повреждения данных, что особенно важно в неоднородных облачных средах и при использовании удалённых стораджей.

Эксплуатация, апгрейды и наблюдаемость

Ускоренный и предсказуемый апгрейд

  • Сохранение статистики планировщика: избавляет от длительного ANALYZE после обновления и позволяет быстрее вернуть систему к исходной производительности
  • Новый опыт с pg_upgrade: флаг -j для параллельной обработки, --swap для быстрых операций с директориями и улучшения для крупных инсталляций

Глубже в EXPLAIN и pg_stat_*

  • EXPLAIN: расширен деталями о количестве обращений к буферам, числу индексных чтений, а также метриками I/O, CPU и WAL по каждому узлу плана
  • Мониторинг: расширенное pg_stat_io с пометкой байтовых объёмов, помимо счётчиков, пер-бэкендовая статистика по I/O и WAL
  • Логическая репликация: запись конфликтов и отражение их в pg_stat_subscription_stats для быстрой диагностики
  • Автообслуживание: время VACUUM и ANALYZE доступно напрямую в pg_stat_all_tables

Управление схемой и совместимость

  • NOT NULL без немедленного сканирования: добавляйте ограничение мгновенно и валидируйте в «окно» низкой нагрузки, минимизируя воздействие на прод
  • NOT ENFORCED: мягкое введение ограничений с последующей проверкой
  • Улучшенная наследуемость NOT NULL, поддержка NOT VALID и NO INHERIT
  • Wire protocol 3.2: первое обновление протокола фронтенд/бэкенд со времён 7.4; libpq по умолчанию остаётся на 3.0, открывая путь для будущих клиентских улучшений

Как попробовать PostgreSQL 18 уже сейчас

PostgreSQL 18 доступен как превью в ряде облачных платформ, в том числе в сервисах, ориентированных на серверлесс и облачные нагрузки. Это хорошее время, чтобы:

  • Протестировать совместимость приложений
  • Провести бенчмарки с асинхронным I/O
  • Экспериментировать с UUIDv7 и виртуальными столбцами
  • Отработать процедуру апгрейда

Для локального тестирования можно поднять контейнер:

docker run --name pg18 -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:18

После запуска подключайтесь любым клиентом PostgreSQL (например, psql) и сравните ключевые узкие места до и после включения соответствующих фич и параметров. Для продуктивных нагрузок рекомендуется дождаться снятия статуса превью в облачных сервисах и учесть текущие ограничения.

Почему это важно

PostgreSQL 18 модернизирует систему хранения и ввода-вывода под облачные, масштабируемые сценарии, не ломая совместимость. Один только AIO приносит кратный прирост производительности в типичных read-heavy профилях. В совокупности с UUIDv7, виртуальными столбцами и усовершенствованным мониторингом это делает релиз привлекательным для команд, которым важны предсказуемая производительность, упрощённый дизайн схем и расширенная наблюдаемость. Для DBA это также облегчение апгрейдов и укрепление безопасности за счёт современного стека аутентификации, шифрования и контроля целостности.

Фото аватара

Олег Козлов

Разработчик.
Веб-фреймворки: Symfony, Strapi, Django
Также увлекаюсь NoCode & AI решениями.

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *