Сравнительная таблица функционала PostgreSQL 16, 17 и 18
Основная информация о релизах
| Параметр | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Дата релиза | 14 сентября 2023 | 26 сентября 2024 | 25 сентября 2025 |
| Текущая минорная версия | 16.11 | 17.7 | 18.1 |
| Протокол | 3.0 | 3.0 | 3.2 (первое обновление с 2003 года) |
Производительность и оптимизация
Система ввода-вывода
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Асинхронный I/O (AIO) | ❌ Нет | ❌ Нет | ✅ Новая подсистема AIO с поддержкой io_uring на Linux, до 3x улучшение производительности |
| Streaming I/O | ❌ Нет | ✅ Новый интерфейс для последовательных сканирований | ✅ Унаследовано и расширено |
| io_method | Не применимо | Не применимо | ✅ Настройка метода I/O (worker, io_uring, sync) |
Оптимизация запросов
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Skip Scan на B-tree индексах | ❌ Нет | ❌ Нет | ✅ Поддержка пропуска префиксных колонок без “=” условия |
| FULL/RIGHT OUTER hash joins параллелизация | ✅ Да | ✅ Да | ✅ Да |
| Incremental sorts для DISTINCT | ✅ Да | ✅ Да | ✅ Да |
| Оптимизация IS NOT NULL | Частично | ✅ Улучшенная оптимизация для NOT NULL колонок | ✅ Унаследовано |
| Correlated IN subqueries → joins | ❌ Нет | ✅ Преобразование в joins | ✅ Унаследовано |
| Оптимизация OR/IN условий | Частично | Частично | ✅ Расширенная оптимизация для использования индексов |
| Pre-sorted aggregate data | ✅ Да (enable_presorted_aggregate) | ✅ Да | ✅ Да |
| CTE оптимизация | Базовая | ✅ Улучшенная с учетом статистики и сортировки | ✅ Унаследовано |
VACUUM и управление памятью
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Page freezing | ✅ Во время non-freeze операций | ✅ Да | ✅ Да |
| Управление памятью VACUUM | Стандартное | ✅ Новая система управления памятью, снижение потребления | ✅ Унаследовано |
| Vacuum стратегия | Базовая | Улучшенная | ✅ Дополнительные улучшения |
Параллелизация
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Parallel GIN index builds | ❌ Нет | ❌ Нет | ✅ Поддержка параллельного построения |
| Hash joins | ✅ Параллельные FULL/RIGHT | ✅ Да | ✅ Улучшенная производительность |
Репликация и высокая доступность
Логическая репликация
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Репликация со standby | ✅ Логическое декодирование на standby | ✅ Да | ✅ Да |
| Параллельное применение больших транзакций | ✅ Да | ✅ Да | ✅ Да |
| Сохранение слотов при обновлении | ❌ Нет | ✅ pg_upgrade сохраняет слоты и состояние подписок | ✅ Да |
| Failover слотов | ❌ Нет | ✅ Поддержка failover для логических слотов | ✅ Да |
| Фильтрация по origin | ✅ Поддержка bi-directional репликации | ✅ Да | ✅ Да |
| Использование hash индексов | ❌ Только B-tree | ✅ Поддержка hash индексов на subscriber | ✅ Да |
| Generated columns в репликации | ❌ Нет | ❌ Нет | ✅ Поддержка STORED generated columns |
pg_upgrade
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Сохранение статистики | ❌ Требуется ANALYZE после обновления | ❌ Требуется ANALYZE | ✅ Сохранение статистики планировщика |
| Параллельные проверки | Частично | Частично | ✅ Параллельная обработка с –jobs |
| –swap flag | ❌ Нет | ❌ Нет | ✅ Обмен директорий вместо копирования |
| Скорость обновления | Базовая | Улучшенная | ✅ Значительное ускорение для баз с множеством объектов |
SQL/JSON и типы данных
JSON функциональность
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| SQL/JSON конструкторы | ✅ JSON_ARRAY(), JSON_ARRAYAGG(), IS JSON | ✅ JSON, JSON_SCALAR, JSON_SERIALIZE | ✅ Унаследовано |
| JSON query функции | Базовые | ✅ JSON_EXISTS, JSON_QUERY, JSON_VALUE | ✅ Унаследовано |
| JSON_TABLE() | ❌ Нет | ✅ Преобразование JSON в табличный формат | ✅ Унаследовано |
| jsonpath expressions | Базовые | ✅ Расширенные с конвертацией типов | ✅ Унаследовано |
UUID
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| UUID v4 | ✅ gen_random_uuid() | ✅ Да | ✅ Да (теперь алиас uuidv4()) |
| UUID v7 | ❌ Нет | ❌ Нет | ✅ uuidv7() с timestamp-ordering |
Generated Columns
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| STORED | ✅ Да | ✅ Да | ✅ Да |
| VIRTUAL | ❌ Нет | ❌ Нет | ✅ По умолчанию, вычисление при чтении |
Ограничения и constraints
Temporal constraints
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| WITHOUT OVERLAPS | ❌ Нет | ❌ Нет (была попытка в бета) | ✅ PRIMARY KEY, UNIQUE с PERIOD |
| Temporal FOREIGN KEY | ❌ Нет | ❌ Нет | ✅ С поддержкой PERIOD |
NOT NULL constraints
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| NOT VALID | ❌ Нет | ❌ Нет | ✅ Добавление без полного сканирования таблицы |
| Отложенная валидация | ❌ Нет | ❌ Нет | ✅ VALIDATE CONSTRAINT без ACCESS EXCLUSIVE lock |
Другие constraints
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Identity columns на партициях | ❌ Нет | ✅ Да | ✅ Да |
| Exclusion constraints на партициях | ❌ Нет | ✅ Да | ✅ Да |
RETURNING и DML
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| MERGE с RETURNING | ❌ Нет | ✅ Да | ✅ Да |
| OLD/NEW в RETURNING | ❌ Нет | ❌ Нет | ✅ Доступ к старым и новым значениям в INSERT/UPDATE/DELETE/MERGE |
| UPDATE views | Ограниченно | ✅ Расширенные возможности | ✅ Да |
Безопасность и аутентификация
Методы аутентификации
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| OAuth 2.0 | ❌ Нет | ❌ Нет | ✅ Нативная поддержка с oauth_validator_libraries |
| MD5 статус | Активен | Активен | ⚠️ Устарел (deprecated) |
| SCRAM-SHA-256 | ✅ Рекомендуется | ✅ Рекомендуется | ✅ Предпочтителен |
| Direct SSL negotiation | ❌ Нет | ✅ sslnegotiation=direct с ALPN | ✅ Да |
Другие возможности безопасности
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Regex в pg_hba.conf | ✅ Да | ✅ Да | ✅ Да |
| require_auth параметр | ✅ Да | ✅ Да | ✅ Да |
| sslrootcert=“system” | ✅ Да | ✅ Да | ✅ Да |
| Data checksums по умолчанию | ❌ Нет | ❌ Нет | ✅ Да (–no-data-checksums для отключения) |
| ssl_tls13_ciphers | ❌ Нет | ❌ Нет | ✅ Настройка TLS 1.3 cipher suites |
Роли и привилегии
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| CREATEROLE ограничения | ✅ Требуется ADMIN OPTION | ✅ Да | ✅ Да |
| GRANT … WITH INHERIT | ✅ Гранулярный контроль наследования | ✅ Да | ✅ Да |
| pg_maintain роль | ✅ Да | ✅ Да | ✅ Да |
| pg_create_subscription | ✅ Да | ✅ Да | ✅ Да |
| MAINTAIN привилегия | ❌ Нет | ✅ VACUUM, ANALYZE без владения | ✅ Да |
Мониторинг и диагностика
Системные представления
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| pg_stat_io | ✅ Новое представление для I/O статистики | ✅ Да | ✅ Расширенная статистика с AIO |
| pg_stat_all_tables улучшения | Базовые | Базовые | ✅ Время vacuum/analyze |
| Статистика по соединениям | Базовая | Базовая | ✅ I/O и WAL на уровне соединений |
| pg_stat_subscription_stats | Базовая | ✅ Конфликты записи | ✅ Расширенная информация |
EXPLAIN
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| EXPLAIN ANALYZE BUFFERS | Требуется явное указание | Требуется явное указание | ✅ Автоматически включается |
| EXPLAIN ANALYZE VERBOSE | Базовый | Базовый | ✅ WAL, CPU, средняя статистика чтения |
| Index lookup counts | ❌ Нет | ❌ Нет | ✅ Количество поисков в индексе |
| WAL buffer full count | ❌ Нет | ❌ Нет | ✅ В EXPLAIN, VACUUM/ANALYZE, autovacuum |
pg_stat_statements
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| JIT deform_counter | ❌ Нет | ✅ Да | ✅ Да |
| minmax_only в reset() | ❌ Нет | ✅ 4-й аргумент | ✅ Да |
| stats_since, minmax_stats_since | ❌ Нет | ✅ Отслеживание времени создания | ✅ Да |
| wal_buffers_full | ❌ Нет | ❌ Нет | ✅ Отчет о полных WAL буферах |
COPY и массовая загрузка
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Производительность | ✅ До 300% улучшение при concurrent | ✅ До 2x для больших строк | ✅ Унаследовано |
| ON_ERROR опция | ✅ Продолжение при ошибках вставки | ✅ Да | ✅ Да |
| Оптимизация для одинаковой кодировки | ❌ Нет | ✅ Улучшения | ✅ Да |
Индексы
Типы индексов
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| GIN parallel builds | ❌ Нет | ❌ Нет | ✅ Параллельное построение |
| BRIN parallel builds | ❌ Нет | ✅ Поддержка | ✅ Да |
| Non-B-tree unique indexes на партициях | ❌ Нет | ❌ Нет | ✅ Поддержка |
| Non-B-tree unique indexes на матвью | ❌ Нет | ❌ Нет | ✅ Поддержка |
Collation и локализация
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| C.UTF-8 collation | ❌ Нет | ✅ Неизменяемый, кроссплатформенный | ✅ Да |
| PG_UNICODE_FAST | ❌ Нет | ❌ Нет | ✅ Встроенная collation |
Инструменты разработчика (psql)
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| \bind | ✅ Параметризованные запросы | ✅ Да | ✅ Да |
| \watch min_rows | ❌ Нет | ✅ Остановка после минимума строк | ✅ Да |
| Control-C для отмены подключения | ❌ Нет | ✅ Да | ✅ Да |
| FETCH_COUNT для non-SELECT | ❌ Нет | ✅ Да | ✅ Да |
| \pset null в backslash командах | ❌ Нет | ✅ Да | ✅ Да |
| \dp улучшения | Базовые | ✅ (none) для пустых привилегий | ✅ Да |
| Команды с ‘x’ для expanded mode | ❌ Нет | ❌ Нет | ✅ \df+x, \do+x и др. |
| Pipeline status (%P) | ❌ Нет | ❌ Нет | ✅ Pipeline переменные |
Криптография (pgcrypto)
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| sha256crypt, sha512crypt | ❌ Нет | ❌ Нет | ✅ Новые алгоритмы |
| CFB mode | ❌ Нет | ❌ Нет | ✅ Для шифрования/дешифрования |
| fips_mode() | ❌ Нет | ❌ Нет | ✅ Отчет о FIPS режиме |
| builtin_crypto_enabled | ❌ Нет | ❌ Нет | ✅ Отключение non-FIPS функций |
Производительность текста и SIMD
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| SIMD поддержка | ✅ x86 и ARM | ✅ Расширенная | ✅ AVX-512 для bit_count |
| ASCII/JSON оптимизация | ✅ Да | ✅ Да | ✅ Да |
| upper/lower ускорение | Базовое | Улучшенное | ✅ Общее ускорение |
Партиционирование
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| Identity columns | ❌ Нет | ✅ Поддержка | ✅ Да |
| Exclusion constraints | ❌ Нет | ✅ Поддержка | ✅ Да |
| LIMIT оптимизация | Базовая | ✅ Улучшенная | ✅ Да |
| Pruning improvements | Базовые | Базовые | ✅ Pruned партиции не блокируются |
| Кэширование RANGE/LIST lookups | ✅ Да | ✅ Да | ✅ Да |
WAL и восстановление
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| WAL Summarizer | ❌ Нет | ✅ Эффективное отслеживание изменений | ✅ Да |
| Incremental backup | ❌ Нет | ✅ Поддержка | ✅ Да |
| Write throughput | Базовый | ✅ До 2x улучшение при высоком concurrency | ✅ Унаследовано |
Расширения и плагины
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| @extschema:extension_name@ | ✅ Да | ✅ Да | ✅ Да |
| no_relocate | ✅ Да | ✅ Да | ✅ Да |
| PG_MODULE_MAGIC_EXT | ❌ Нет | ❌ Нет | ✅ Отчет о имени и версии модуля |
Устаревшие и удаленные функции
| Функция | PostgreSQL 16 | PostgreSQL 17 | PostgreSQL 18 |
|---|
| db_user_namespace | Активна | ❌ Удалена | ❌ Удалена |
| adminpack | Активен | ❌ Удален | ❌ Удален |
| snapshot_too_old | Активна | ❌ Удалена | ❌ Удалена |
| MD5 authentication | Активна | Активна | ⚠️ Deprecated |
| PQservice() в libpq | Активна | Активна | ❌ Удалена |
Совместимость и изменения поведения
PostgreSQL 16
- Изменение присвоения для PL/pgSQL bound cursor переменных
- Ограничения CREATEROLE требуют ADMIN OPTION
PostgreSQL 17
- Изменение search_path для maintenance операций
- Изменение обработки SET SESSION AUTHORIZATION
- Удаление символических ссылок для postmaster
PostgreSQL 18
- Data checksums включены по умолчанию
- Изменение обработки time zone abbreviations
- Новая версия протокола 3.2
- Виртуальные generated columns по умолчанию
Рекомендации по выбору версии
PostgreSQL 16 подходит для:
- Стабильных production систем
- Проектов, требующих максимальной совместимости
- Систем, где критична проверенная надежность
PostgreSQL 17 стоит выбрать для:
- Проектов с интенсивной работой с JSON
- Систем с логической репликацией и высокой доступностью
- Сценариев с частыми major version upgrades
- Workloads с высоким write throughput
PostgreSQL 18 рекомендуется для:
- I/O-интенсивных workloads (благодаря AIO)
- Распределенных систем с UUID v7
- Приложений с SSO/OAuth интеграцией
- Temporal данных и аудита (OLD/NEW в RETURNING)
- Проектов, требующих cutting-edge производительности
Примечание: PostgreSQL 18 был выпущен 25 сентября 2025 года и представляет значительный архитектурный прорыв с новой подсистемой асинхронного I/O.
Read more →