E.7. Выпуск 17#

E.7. Выпуск 17

E.7. Выпуск 17 #

Дата релиза:  2024-09-26

E.7.1. Обзор #

PostgreSQL 17 содержит много новых функций и улучшений, включая:

  • Новая система управления памятью для VACUUM, которая снижает потребление памяти и может улучшить общую производительность вакуумирования.

  • Новые возможности SQL/JSON, включая конструкторы, функции идентичности и функцию JSON_TABLE(), которая преобразует данные JSON в табличное представление.

  • Различные улучшения производительности запросов, включая последовательные чтения с использованием потокового ввода-вывода, пропускную способность записи при высоком уровне параллелизма и поиск по нескольким значениям в индексе btree.

  • Улучшения логической репликации, включая:

    • Управление отказом

    • pg_createsubscriber, утилита, с помощью которой создаются логические реплики из физических резервных копий

    • pg_upgrade теперь сохраняет слоты логической репликации на издателях и полное состояние подписки на подписчиках. Это позволит обновлениям до будущих основных версий продолжать логическую репликацию без необходимости копирования для повторной синхронизации.

  • Новая опция подключения на стороне клиента, sslnegotiation=direct, которая выполняет прямое TLS рукопожатие, чтобы избежать переговоров с обратной передачей.

  • pg_basebackup теперь поддерживается инкрементное резервное копирование.

  • COPY добавлена новая опция, ON_ERROR ignore, которая позволяет операции копирования продолжаться в случае ошибки.

Вышеуказанные элементы и другие новые функции PostgreSQL 17 объяснены более подробно в разделах ниже.

E.7.2. Миграция на версию 17 #

Для тех, кто желает перенести данные с любой предыдущей версии, требуется выполнить дамп/восстановление с использованием pg_dumpall или использовать pg_upgrade или логическую репликацию. См. Раздел 18.6 для получения общей информации о миграции на новые основные версии.

Версия 17 содержит ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Обратите внимание на следующие несовместимости:

  • Функции изменены для использования безопасного search_path во время операций обслуживания (Джефф Дэвис) § §

    Это предотвращает выполнение операций обслуживания (ANALYZE, CLUSTER, CREATE INDEX, CREATE MATERIALIZED VIEW, REFRESH MATERIALIZED VIEW, REINDEX, или VACUUM) от небезопасного доступа. Функции, используемые индексами выражений и материализованными представлениями, которые должны ссылаться на схемы, отличные от схемы по умолчанию, должны указывать путь поиска во время создания функции.

  • Ограничено ago только появлением в конце в interval значениях (Joseph Koshakow) § §

    Также предотвращено многократное появление пустых единиц интервала.

  • Удалена серверная переменная old_snapshot_threshold (Томас Мунро) §

    Эта переменная позволяла vacuum удалять строки, которые потенциально могли быть все еще видимыми для выполняющихся транзакций, вызывая ошибки "snapshot too old" позже при доступе. Эта функция может быть добавлена в PostgreSQL позже, если будет найдена улучшенная реализация.

  • Изменено SET SESSION AUTHORIZATION обработка статуса суперпользователя начального пользователя сессии (Joseph Koshakow) §

    Новое поведение основано на статусе суперпользователя пользователя сессии на момент выполнения команды SET SESSION AUTHORIZATION, а не на их статусе суперпользователя на момент подключения.

  • Удалена функция, которая симулировала пользователей для каждой базы данных (Натан Боссарт) §

    Функция, db_user_namespace, использовалась редко.

  • Удалено расширение contrib adminpack (Даниэль Густафссон) §

    Это использовалось теперь устаревшим pgAdmin III.

  • Удалено значение wal_sync_method fsync_writethrough на Windows (Thomas Munro) §

    Это значение было таким же, как fsync на Windows.

  • Изменено обработку границ файлов двух функций имени файла WAL (Киотаро Хоригучи, Андрес Фройнд, Брюс Момиджан) §

    Функции pg_walfile_name() и pg_walfile_name_offset() использовались для отчета предыдущего номера сегмента LSN, когда LSN находился на границе сегмента файла; теперь возвращается текущий сегмент LSN.

  • Удалена серверная переменная trace_recovery_messages, так как она больше не нужна (Bharath Rupireddy) §

  • Удален столбец информационной схемы element_types.domain_default (Петер Айзентраут) §

  • Изменены метки вывода режима блокировки pgrowlocks (Брюс Момджиан) §

  • Удалены buffers_backend и buffers_backend_fsync из pg_stat_bgwriter (Бхарат Рупиредди) §

    Эти поля считаются избыточными по отношению к аналогичным столбцам в pg_stat_io.

  • Переименованы столбцы статистики времени чтения/записи блоков ввода-вывода pg_stat_statements (Назир Билал Явуз) §

    Это переименовывает blk_read_time в shared_blk_read_time, и blk_write_time в shared_blk_write_time.

  • Изменены pg_attribute.attstattarget и pg_statistic_ext.stxstattarget для представления целевого значения статистики по умолчанию как NULL (Питер Айзентраут) § §

  • Переименовано pg_collation.colliculocale в colllocale и pg_database.daticulocale в datlocale (Джефф Дэвис) §

  • Переименован pg_stat_progress_vacuum столбец max_dead_tuples в max_dead_tuple_bytes, переименован num_dead_tuples в num_dead_item_ids, и добавлен dead_tuple_bytes (Масахико Савада) § §

  • Переименованы столбцы SLRU в системном представлении pg_stat_slru (Alvaro Herrera) §

    Названия столбцов, принимаемые pg_stat_reset_slru(), также были изменены.

E.7.3. Изменения #

Ниже приведен подробный отчет об изменениях между PostgreSQL 17 и предыдущим основным выпуском.

E.7.3.1. Сервер #

E.7.3.1.1. Оптимизатор #
  • Разрешено оптимизатору улучшать планы CTE, учитывая статистику и порядок сортировки столбцов, упомянутых в более ранних выходных строках (Jian Guo, Richard Guo, Tom Lane) § §

  • Улучшена оптимизация ограничений запроса IS NOT NULL и IS NULL (Дэвид Роули, Ричард Гуо, Энди Фан) § §

    Удалены ограничения IS NOT NULL из запросов на NOT NULL столбцы и устранены сканирования на NOT NULL столбцы, если указано IS NULL.

  • Разрешено обрезание разделов на булевых столбцах с условием IS [NOT] UNKNOWN (Дэвид Роули) §

  • Улучшена оптимизация значений диапазона при использовании операторов содержимого <@ и @> (Ким Йохан Андерссон, Джиан Хе) §

  • Разрешено коррелированные подзапросы IN преобразовывать в соединения (Энди Фан, Том Лейн) §

  • Улучшена оптимизация предложения LIMIT на секционированных таблицах, родительских таблицах наследования и запросах UNION ALL (Энди Фан, Дэвид Роули) §

  • Разрешено выполнение узлов запроса параллельно в большем количестве случаев (Tom Lane) §

  • Разрешено GROUP BY столбцам быть внутренне упорядоченными для соответствия ORDER BY (Андрей Лепихов, Теодор Сигаев) §

    Это может быть отключено с использованием серверной переменной enable_group_by_reordering.

  • Разрешено UNION (без ALL) использовать MergeAppend (Дэвид Роули) §

  • Исправлены планы MergeAppend для более точного вычисления количества строк, которые необходимо отсортировать (Александр Кузьменков) §

  • Разрешено индексам GiST и SP-GiST быть частью инкрементных сортировок (Мирослав Бендик) §

    Это особенно полезно для ORDER BY выражений, где первый столбец имеет индекс GiST и SP-GiST, а другие столбцы не имеют.

  • Добавлены столбцы в pg_stats для отображения информации о гистограмме диапазонного типа (Егор Рогов, Сумьядип Чакраборти) §

E.7.3.1.2. Индексы #
  • Позволено btree индексам более эффективно находить набор значений, таких как те, которые предоставлены IN выражениями с использованием констант (Питер Геогеган, Маттиас ван де Меент) §

  • Разрешено создание индексов BRIN с использованием параллельных рабочих процессов (Tomas Vondra, Matthias van de Meent) §

E.7.3.1.3. Общая производительность #
  • Позволено вакууму более эффективно удалять и замораживать кортежи (Мелани Плагеман, Хейки Линкангас) §

    WAL трафик, вызванный вакуумом, также стал более компактным.

  • Позволено vacuum более эффективно хранить ссылки на кортежи (Masahiko Sawada, John Naylor) § § § §

    Кроме того, вакуум больше не ограничивается молча одним гигабайтом памяти, когда maintenance_work_mem или autovacuum_work_mem выше.

  • Оптимизировано вакуумирование отношений без индексов (Мелани Плагеман) §

  • Увеличено значение по умолчанию vacuum_buffer_usage_limit до 2MB (Томас Манро) §

  • Улучшена производительность при проверке ролей с множеством членств (Натан Боссарт) §

  • Улучшена производительность сильно загруженных записей WAL (Бхарат Рупиредди) §

  • Улучшена производительность при передаче больших блоков данных клиенту (Мелих Мутлу) §

  • Разрешена группировка чтений файловой системы с помощью новой системной переменной io_combine_limit (Томас Мунро, Андрес Фройнд, Мелани Плэгеман, Назир Билал Явуз) § § §

E.7.3.1.4. Мониторинг #
  • Создано системное представление pg_stat_checkpointer (Бхарат Рупиредди, Антон А. Мельников, Александр Коротков) § § §

    Соответствующие столбцы были удалены из pg_stat_bgwriter и добавлены в этот новый системный вид.

  • Улучшен контроль над сбросом статистики (Ацуши Торикоши, Бхарат Рупиредди) § § §

    Разрешено pg_stat_reset_shared() (без аргументов) и pg_stat_reset_shared(NULL) для сброса всех общих статистик. Разрешено pg_stat_reset_shared('slru') и pg_stat_reset_slru() (без аргументов) для сброса статистики SLRU, что уже было возможно с помощью pg_stat_reset_slru(NULL).

  • Добавлены сообщения журнала, связанные с восстановлением WAL из резервных копий (Андрес Фройнд) §

  • Добавлена строка журнала log_connections для trust соединений (Джейкоб Чемпион) §

  • Добавлено сообщение журнала для отчета о приобретении и освобождении репликационных слотов walsender (Бхарат Рупиредди) §

    Это было включено серверной переменной log_replication_commands.

  • Добавлено системное представление pg_wait_events, которое сообщает типы событий ожидания (Бертран Друво) §

    Это полезно для добавления описаний к событиям ожидания, о которых сообщается в pg_stat_activity.

  • Добавлены события ожидания для задержек контрольных точек (Томас Мунро) §

  • Позволено vacuum сообщать о прогрессе обработки индекса (Сами Имсейх) §

    Это отображается в системном представлении pg_stat_progress_vacuum в столбцах indexes_total и indexes_processed.

E.7.3.1.5. Привилегии #
  • Разрешено предоставление права на выполнение операций по обслуживанию (Натан Боссарт) §

    Разрешение может быть предоставлено на основе каждой таблицы с использованием привилегии MAINTAIN и на основе каждой роли через предопределенную роль pg_maintain. Разрешенные операции: VACUUM, ANALYZE, REINDEX, REFRESH MATERIALIZED VIEW, CLUSTER и LOCK TABLE.

  • Разрешено ролям с pg_monitor членством выполнять pg_current_logfile() (Павло Голуб, Натан Боссарт) §

E.7.3.1.6. Конфигурация сервера #
  • Добавлена системная переменная allow_alter_system для запрета ALTER SYSTEM (Йелте Феннема-Нио, Габриэле Бартолини) §

  • Разрешено ALTER SYSTEM устанавливать нераспознанные пользовательские серверные переменные (Том Лейн) §

    Это также возможно с помощью GRANT ON PARAMETER.

  • Добавлена серверная переменная transaction_timeout для ограничения продолжительности транзакций (Андрей Бородин, Джапин Ли, Джунван Чжао, Александр Коротков) § § §

  • Добавлен встроенный независимый от платформы провайдер коллаций (Джефф Дэвис) § § § §

    Это поддерживает C и C.UTF-8 сортировки.

  • Добавлена серверная переменная huge_pages_status для отчета об использовании больших страниц Postgres (Джастин Призби) §

    Это полезно, когда huge_pages установлено в try.

  • Добавлена серверная переменная для отключения триггеров событий (Даниэль Густафссон) §

    Настройка, event_triggers, позволяет временно отключать триггеры событий для отладки.

  • Разрешено настраивать размеры кеша SLRU (Андрей Бородин, Дилип Кумар, Альваро Эррера) §

    Новые серверные переменные: commit_timestamp_buffers, multixact_member_buffers, multixact_offset_buffers, notify_buffers, serializable_buffers, subtransaction_buffers, и transaction_buffers. commit_timestamp_buffers, transaction_buffers, и subtransaction_buffers автоматически масштабируются с shared_buffers.

E.7.3.1.7. Потоковая репликация и восстановление #
  • Добавлена поддержка инкрементного резервного копирования файловой системы (Роберт Хаас, Якуб Вартак, Томаш Вондра) § §

    Инкрементные резервные копии могут быть созданы с использованием pg_basebackup с новым параметром --incremental. Новое приложение pg_combinebackup позволяет манипулировать базовыми и инкрементными резервными копиями файловой системы.

  • Разрешено создание файлов суммаризации WAL (Роберт Хаас, Натан Боссарт, Губерт Депеш Любачевски) § § § §

    Эти файлы фиксируют номера блоков, которые были изменены в пределах диапазона LSN и полезны для инкрементных резервных копий файловой системы. Это контролируется серверными переменными summarize_wal и wal_summary_keep_time, и исследуется с помощью pg_available_wal_summaries(), pg_wal_summary_contents() и pg_get_wal_summarizer_state().

  • Системный идентификатор был добавлен в файлы резервного копирования файловой системы (Amul Sul) §

    Это помогает обнаружить недопустимое использование WAL.

  • Разрешено значение строки подключения dbname быть записанным, когда pg_basebackup записывает информацию о подключении в postgresql.auto.conf (Vignesh C, Hayato Kuroda) §

  • Добавлен столбец pg_replication_slots.invalidation_reason для отчета о причине недействительных слотов (Швета Малик, Бхарат Рупиредди) § §

  • Добавлен столбец pg_replication_slots.inactive_since для отчета о продолжительности неактивности слота (Бхарат Рупиредди) § § §

  • Добавлена функция pg_sync_replication_slots() для синхронизации слотов логической репликации (Hou Zhijie, Shveta Malik, Ajin Cherian, Peter Eisentraut) § §

  • Добавлено свойство failover в протокол репликации (Hou Zhijie, Shveta Malik) §

  • Добавлено приложение pg_createsubscriber для создания логической реплики из физического резервного сервера (Эйлер Тавейра) §

  • Были pg_upgrade мигрированы действительные логические слоты и подписки (Хаято Курода, Хоу Чжицзе, Вигнеш С, Жюльен Роход, Шлок Кьял) § §

    Это позволяет логической репликации быстро продолжаться после обновления. Это работает только для старых кластеров PostgreSQL версии 17 или более поздней.

  • Включено переключение на резервный сервер для логических слотов (Hou Zhijie, Shveta Malik, Ajin Cherian) §

    Это контролируется необязательным пятым аргументом для pg_create_logical_replication_slot().

  • Добавлена серверная переменная sync_replication_slots для включения синхронизации логического слота при отказе (Швета Малик, Хоу Чжицзе, Питер Смит) § §

  • Добавлено управление отказоустойчивостью логической репликации в CREATE/ALTER SUBSCRIPTION (Швета Малик, Хоу Чжицзе, Аджин Чериан) § §

  • Разрешено использование хеш-индексов для применения изменений логической репликации на подписчике (Хаято Курода) §

    Ранее для этой цели могли быть использованы только btree индексы.

  • Улучшена производительность логического декодирования в случаях, когда имеется много подтранзакций (Масахико Савада) §

  • Перезапуск рабочих процессов применения изменений, если привилегии суперпользователя владельца подписки были отозваны (Виньеш С) §

    Это заставило повторно пройти аутентификацию.

  • Добавлена опция flush в pg_logical_emit_message() (Майкл Пакье) §

    Это делает сообщение долговечным.

  • Разрешено указание физических резервных копий, которые должны быть синхронизированы перед тем, как они станут видимыми для подписчиков (Hou Zhijie, Shveta Malik) § §

    Новая серверная переменная — synchronized_standby_slots.

  • Добавлен столбец типа рабочего процесса в pg_stat_subscription (Питер Смит) §

E.7.3.2. Утилиты #

  • Добавлена новая опция COPY ON_ERROR ignore для игнорирования строк с ошибками (Дамир Белялов, Ацуши Торикоши, Алекс Шульгин, Джиан Хе, Юго Нагата) § § § §

    Поведение по умолчанию — ON_ERROR stop.

  • Добавлена новая опция COPY LOG_VERBOSITY, которая сообщает о строках ошибок, игнорируемых COPY FROM (Бхарат Рупиредди) §

  • Разрешено COPY FROM сообщать количество пропущенных строк во время обработки (Ацуши Торикоши) §

    Это отображается в системном представлении в столбце pg_stat_progress_copy.tuples_skipped.

  • В COPY FROM разрешено легкое указание, что все столбцы должны быть принудительно null или not null (Zhang Mingli) §

  • Разрешено разделённым таблицам иметь столбцы идентичности (Ashutosh Bapat) §

  • Разрешены исключающие ограничения на секционированных таблицах (Пол А. Юнгвирт) §

    Пока ограничения исключения сравнивают столбцы ключа раздела на равенство, другие столбцы могут использовать сравнения, специфичные для ограничения исключения.

  • Добавлен более понятный метод ALTER TABLE для установки столбца на целевое значение статистики по умолчанию (Петер Айзентраут) §

    Новый синтаксис: ALTER TABLE ... SET STATISTICS DEFAULT; использование SET STATISTICS -1 по-прежнему поддерживается.

  • Разрешено ALTER TABLE изменять выражение генерации столбца (Amul Sul) §

    Синтаксис: ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION.

  • Разрешено указание методов доступа к таблицам для секционированных таблиц (Джастин Призби, Сумьядип Чакраборти, Майкл Пакье) § §

  • Добавлена настройка DEFAULT для ALTER TABLE .. SET ACCESS METHOD (Майкл Пакье) §

  • Добавлена поддержка триггеров событий, которые срабатывают при подключении (Константин Книжник, Михаил Грибков) §

  • Добавлена поддержка триггеров событий для REINDEX (Гаррет Торнбург, Джиан Хе) §

  • Разрешен синтаксис с круглой скобкой для CLUSTER опций, если имя таблицы не указано (Натан Боссарт) §

E.7.3.2.1. EXPLAIN #
  • Позволено EXPLAIN сообщать об использовании памяти оптимизатором (Ashutosh Bapat) §

    Опция называется MEMORY.

  • Добавлена опция EXPLAIN SERIALIZE для отчета о стоимости преобразования данных для передачи по сети (Степан Рутц, Маттиас ван де Меент) §

  • Добавлена локальная статистика времени чтения/записи блоков ввода-вывода в вывод EXPLAIN с BUFFERS (Назир Билал Явуз) §

  • Улучшено отображение узлов SubPlan и выходных параметров в EXPLAIN (Том Лейн, Дин Рашид) §

  • Добавлены детали JIT deform_counter в EXPLAIN (Дмитрий Долгов) §

E.7.3.3. Типы данных #

  • Разрешено типу данных interval поддерживать значения +/-infinity (Джозеф Кошаков, Джиан Хе, Ашутош Бапат) §

  • Разрешено использование ENUM, добавленного через ALTER TYPE, если тип был создан в той же транзакции (Tom Lane) §

    Это было ранее запрещено.

E.7.3.4. MERGE #

  • Разрешено MERGE изменять обновляемые представления (Дин Рашид) §

  • Добавлено WHEN NOT MATCHED BY SOURCE в MERGE (Дин Рашид) §

    WHEN NOT MATCHED для строк цели уже поддерживалось.

  • Разрешено MERGE использовать RETURNING конструкцию (Дин Рашид) §

    Новая функция RETURNING merge_action() сообщает о DML, который сгенерировал строку.

E.7.3.5. Функции #

  • Добавлена функция JSON_TABLE() для преобразования данных JSON в табличное представление (Никита Глухов, Теодор Сигаев, Олег Бартунов, Александр Коротков, Эндрю Данстан, Амит Ланготе, Джиан Хе) § §

    Эта функция может быть использована в FROM части SELECT запросов в качестве источника кортежей.

  • Добавлены функции-конструкторы SQL/JSON JSON(), JSON_SCALAR() и JSON_SERIALIZE() (Никита Глухов, Теодор Сигаев, Олег Бартунов, Александр Коротков, Эндрю Данстан, Амит Ланготе) §

  • Добавлены функции запроса SQL/JSON JSON_EXISTS(), JSON_QUERY() и JSON_VALUE() (Никита Глухов, Теодор Сигаев, Олег Бартунов, Александр Коротков, Эндрю Данстан, Амит Ланготе, Петер Айзенштраут, Джиан Хе) § § § § §

  • Добавлены методы jsonpath для преобразования значений JSON в другие типы данных JSON (Дживан Чалке) §

    Методы jsonpath: .bigint(), .boolean(), .date(), .decimal([precision [, scale]]), .integer(), .number(), .string(), .time(), .time_tz(), .timestamp(), и .timestamp_tz().

  • Добавлены to_timestamp() спецификаторы формата часового пояса (Том Лейн) §

    TZ принимает аббревиатуры часовых поясов или числовые смещения, в то время как OF принимает только числовые смещения.

  • Разрешено указывать часовой пояс сеанса с помощью AT LOCAL (Вик Фиринг) §

    Это полезно при преобразовании, добавлении и удалении часовых поясов из значений временных меток, а не при указании буквального часового пояса сеанса.

  • Добавлены функции uuid_extract_timestamp() и uuid_extract_version() для возврата информации UUID (Андрей Бородин) §

  • Добавлены функции для генерации случайных чисел в указанном диапазоне (Дин Рашид) §

    Функции random(min, max) принимают значения типа integer, bigint и numeric.

  • Добавлены функции для преобразования целых чисел в двоичные и восьмеричные строки (Эрик Радман, Натан Боссарт) §

    Функции to_bin() и to_oct().

  • Добавлены информационные функции Unicode (Джефф Дэвис) §

    Функция unicode_version() возвращает версию Unicode, icu_unicode_version() возвращает версию ICU, а unicode_assigned() возвращает, если символам присвоены кодовые точки Unicode.

  • Добавлена функция xmltext() для преобразования текста в один текстовый узел XML (Джим Джонс) §

  • Добавлена функция to_regtypemod() для возврата модификатора типа спецификации типа (Дэвид Уилер, Эрик Винхольд) §

  • Добавлена функция pg_basetype() для возврата базового типа домена (Стив Чавес) §

  • Добавлена функция pg_column_toast_chunk_id() для возврата идентификатора TOAST значения (Юго Нагата) §

    Это возвращает NULL, если значение не было сохранено в TOAST.

E.7.3.6. PL/pgSQL #

  • Разрешены в plpgsql %TYPE и %ROWTYPE спецификации для представления массивов типов, не являющихся массивами (Quan Zongliang, Pavel Stehule) §

  • Разрешено plpgsql %TYPE указание ссылаться на составной столбец (Tom Lane) §

E.7.3.7. libpq #

  • Добавлена функция libpq для изменения паролей ролей (Джо Конвей) §

    Новая функция, PQchangePassword(), хеширует новый пароль перед отправкой на сервер.

  • Добавлены функции libpq для закрытия порталов и подготовленных операторов (Jelte Fennema-Nio) §

    Функции PQclosePrepared(), PQclosePortal(), PQsendClosePrepared(), и PQsendClosePortal().

  • Добавлен API libpq, который позволяет выполнять блокирующие и неблокирующие запросы на отмену, с шифрованием, если оно уже используется (Jelte Fennema-Nio) §

    Ранее поддерживались только блокирующие, незашифрованные запросы на отмену.

  • Добавлена функция libpq PQsocketPoll() для возможности опроса сетевых сокетов (Тристан Партин, Том Лейн) § §

  • Добавлена функция libpq PQsendPipelineSync() для отправки точки синхронизации конвейера (Антон Кирилов) §

    Это похоже на PQpipelineSync(), но не отправляется на сервер, если не достигнут пороговый размер выходного буфера.

  • Добавлена функция libpq PQsetChunkedRowsMode() для получения результатов частями (Даниэль Вэрите) §

  • Разрешены соединения TLS без необходимости сетевой переговорной поездки (Грег Старк, Хейки Линнакангас, Петер Айзентраут, Майкл Пакье, Даниэль Густафссон) § § § § § § § §

    Это было включено с помощью клиентской опции sslnegotiation=direct, требовало ALPN и работало только на серверах PostgreSQL версии 17 и выше.

E.7.3.8. psql #

  • Улучшено отображение psql значений по умолчанию и пустых привилегий (Эрик Винхольд, Лауренц Альбе) §

    Команда \dp теперь отображает (none) для пустых привилегий; по умолчанию все еще отображается как пусто.

  • Командам с обратной косой чертой было предоставлено уважение к \pset null (Эрик Винхольд, Лауренц Альбе) §

    Ранее \pset null игнорировалось.

  • Разрешено psql \watch останавливаться после минимального количества возвращенных строк (Грег Сабино Муллейн) §

    Параметр min_rows.

  • Разрешены попытки подключения psql быть отмененными с помощью control-C (Тристан Партин) §

  • Разрешено psql учитывать FETCH_COUNT для запросов, не являющихся SELECT (Даниэль Вэрите) §

  • Улучшено автодополнение в psql (Дагфинн Илмари Маннсåкер, Жиль Дарольд, Кристоф Хайсс, Стив Чавес, Вигнеш С, Павел Борисов, Джиан Хе) § § § § § § § §

E.7.3.9. Приложения сервера #

  • Добавлено приложение pg_walsummary для выгрузки файлов сводки WAL (Роберт Хаас) §

  • Разрешено pg_dump восстанавливать большие объекты пакетами (Tom Lane) §

    Это позволяет восстановить многие большие объекты, чтобы избежать ограничений транзакции и чтобы они были восстановлены параллельно.

  • Добавлена опция pg_dump --exclude-extension (Айюш Ватса) §

  • Разрешено pg_dump, pg_dumpall, и pg_restore указывать включаемые/исключаемые объекты в файле (Павел Стехуле, Даниэль Густафссон) §

    Опция называется --filter.

  • Добавлен параметр --sync-method в несколько клиентских приложений (Джастин Призби, Натан Боссарт) §

    Приложения initdb, pg_basebackup, pg_checksums, pg_dump, pg_rewind, и pg_upgrade.

  • Добавлена pg_restore опция --transaction-size для разрешения восстановления объектов в пакетах транзакций (Tom Lane) §

    Это позволяет получить преимущества производительности пакетной обработки транзакций без проблем чрезмерно больших блоков транзакций.

  • Изменен параметр режима отладки pgbench с -d на --debug (Greg Sabino Mullane) §

    Опция -d теперь используется для имени базы данных, и новая опция --dbname также может быть использована.

  • Добавлена опция pgbench --exit-on-abort для выхода после любого прерывания клиента (Юго Нагата) §

  • Добавлена команда pgbench \syncpipeline для отправки синхронизирующих сообщений (Anthonin Bonnefoy) §

  • Разрешено pg_archivecleanup удалять файлы истории резервных копий (Ацуши Торикоши) §

    Опция --clean-backup-history.

  • Добавлены некоторые длинные опции в pg_archivecleanup (Ацуши Торикоши) §

    Длинные опции: --debug, --dry-run и --strip-extension.

  • Разрешено pg_basebackup и pg_receivewal использовать dbname в их спецификации подключения (Jelte Fennema-Nio) §

    Это полезно для пулеров подключений, которые чувствительны к имени базы данных.

  • Добавлена pg_upgrade опция --copy-file-range (Томас Мунро) §

    Это поддерживается на Linux и FreeBSD.

  • Разрешено reindexdb --index обрабатывать индексы из разных таблиц параллельно (Максим Орлов, Светлана Деревянко, Александр Коротков) §

  • Разрешено reindexdb, vacuumdb и clusterdb обрабатывать объекты во всех базах данных, соответствующих шаблону (Натан Боссарт) § § §

    Новая опция --all контролирует это поведение.

E.7.3.10. Исходный код #

  • Удалена поддержка OpenSSL 1.0.1 (Майкл Пакье) §

  • Разрешено прохождение тестов в режиме OpenSSL FIPS (Петер Айзентраут) § §

  • Использованы инструкции CPU AVX-512 для подсчета битов (Пол Амонсон, Натан Боссарт, Антс Аасма) § §

  • Требуется LLVM версии 10 или более поздней (Томас Мунро) §

  • Использованы родные инструкции CRC на 64-битных LoongArch процессорах (Сюдонг Ян) §

  • Удалена поддержка AIX (Хейкки Линкангас) §

  • Удалена Microsoft Visual Studio-специфическая опция сборки PostgreSQL (Майкл Пакье) §

    Meson теперь является единственным доступным методом для сборок Visual Studio.

  • Опция конфигурации --disable-thread-safety была удалена (Томас Мунро, Хейкки Линкангас) § §

    Теперь предполагается, что все поддерживаемые платформы имеют достаточную поддержку потоков.

  • Опция configure --with-CC удалена (Хейкки Линкангас) §

    Установка переменной окружения CC теперь является единственным поддерживаемым методом для указания компилятора.

  • Функции получения пользовательских типов данных больше не будут получать свои данные с завершающим нулем (Дэвид Роули) §

  • Добавлен инкрементный JSON парсер для использования с огромными JSON документами (Эндрю Данстан) §

  • Преобразован файл верхнего уровня README в Markdown (Натан Боссарт) §

  • Удалён более не нужный файл верхнего уровня INSTALL (Tom Lane) §

  • Удалена опция make distprep (Петер Айзентраут) §

  • Добавлена поддержка make для общих библиотек Android (Петер Айзентраут) §

  • Добавлена поддержка серверной части для точек внедрения (Майкл Пакье) § § § §

    Это используется для отладки сервера, и они должны быть включены во время компиляции сервера.

  • Добавлен реестр динамической общей памяти (Натан Боссарт) §

    Это позволяет разделяемым библиотекам, которые не были инициализированы при запуске, координировать доступ к динамической разделяемой памяти.

  • Исправлено emit_log_hook для использования того же значения времени, что и другие записи журнала для одного и того же запроса (Камбам Винай, Майкл Пакье) §

  • Улучшена документация по использованию jsonpath для проверки предикатов (Дэвид Уилер) §

E.7.3.11. Дополнительные модули #

  • Разрешены соединения с неквалифицированными соединениями, которые были переданы на удаленные серверы и пользовательские сканирования (Ричард Гуо, Эцуро Фуджита) §

    Иностранные обертки данных и пользовательские сканирования должны быть изменены для обработки этих случаев.

  • Разрешено выполнение EXISTS и IN подзапросов на удалённых серверах postgres_fdw (Александр Пыхалов) §

  • Увеличена стоимость кортежа по умолчанию для обертки данных из внешних источников (Дэвид Роули, Умаир Шахид) § §

    Это значение используется оптимизатором.

  • Разрешены операции базы данных dblink для прерывания (Ноа Миш) §

  • Разрешено создание хеш-индексов на ltree столбцах (Томми Павличек) §

    Это также позволяет хеш-соединение и хеш-агрегацию на ltree столбцах.

  • Разрешено unaccent содержать правила перевода символов с пробелами и кавычками (Майкл Пакье) §

    Синтаксис для файла unaccent.rules был изменён.

  • Разрешено amcheck проверять нарушения уникальных ограничений с использованием новой опции --checkunique (Анастасия Лубенникова, Павел Борисов, Максим Орлов) §

  • Разрешено тестам citext проходить в режиме OpenSSL FIPS (Питер Айзентраут) §

  • Разрешено тестам pgcrypto проходить в режиме OpenSSL FIPS (Петер Айзентраут) §

  • Удалены некоторые неиспользуемые SPI макросы (Бхарат Рупиредди) §

  • Разрешено ALTER OPERATOR устанавливать больше атрибутов оптимизации (Tommy Pavlicek) §

    Это полезно для расширений.

  • Пользовательские события ожидания были добавлены в postgres_fdw и dblink.

  • Добавлена pg_buffercache функция pg_buffercache_evict() для разрешения высвобождения разделяемого буфера (Палак Чатурведи, Томас Мунро) §

    Это полезно для тестирования.

E.7.3.11.1. pg_stat_statements #
  • Параметры CALL в pg_stat_statements были заменены на заполнители (Сами Имсейх) §

  • Заменены имена точек сохранения, хранящиеся в pg_stat_statements, на заполнители (Грег Сабино Муллейн) §

    Это значительно уменьшило количество записей, необходимых для фиксации команд SAVEPOINT, RELEASE SAVEPOINT и ROLLBACK TO SAVEPOINT.

  • Заменены GID двухфазного коммита, хранящиеся в pg_stat_statements, на заполнители (Майкл Пакье) §

    Это значительно уменьшило количество записей, необходимых для фиксации PREPARE TRANSACTION, COMMIT PREPARED и ROLLBACK PREPARED.

  • Отслеживание DEALLOCATE в pg_stat_statements (Дагфинн Илмари Маннсåкер, Майкл Пакье) §

    DEALLOCATE имена хранятся в pg_stat_statements в качестве заполнителей.

  • Добавлены столбцы статистики времени чтения/записи локальных блоков ввода-вывода в pg_stat_statements (Назир Билал Явуз) § §

    Новые столбцы: local_blk_read_time и local_blk_write_time.

  • Добавлены детали JIT deform_counter в pg_stat_statements (Дмитрий Долгов) §

  • Добавлен необязательный четвертый аргумент (minmax_only) в pg_stat_statements_reset() для возможности сброса только минимальных/максимальных статистик (Андрей Зубков) §

    Этот аргумент по умолчанию установлен в false.

  • Добавлены pg_stat_statements столбцы stats_since и minmax_stats_since для отслеживания времени создания записи и времени последнего сброса min/max (Андрей Зубков) §

E.7.4. Благодарности #

Следующие лица (в алфавитном порядке) внесли свой вклад в этот релиз в качестве авторов патчей, разработчиков, рецензентов, тестировщиков или сообщили об обнаруженных проблемах.

Abhijit Menon-Sen
Аднан Даутович
Айдар Имамов
Ajin Cherian
Акаш Шанкаран
Акшат Джаймини
Алаа Аттья
Aleksander Alekseev
Алексей Орлов
Алена Рыбакина
Алекс Хсиех
Алекс Малек
Алекс Шульгин
Алекс Работа
Alexander Korotkov
Александр Кожемякин
Александр Кузьменков
Alexander Lakhin
Alexander Pyhalov
Алексей Палаженко
Альфонс Кемпер
Álvaro Herrera
Амадео Гальярдо
Amit Kapila
Amit Langote
Amul Sul
Anastasia Lubennikova
Анатолий Зарецкий
Андреас Карлссон
Андреас Ульбрих
Андрей Лепихов
Andrei Zubkov
Andres Freund
Andrew Alsup
Эндрю Аткинсон
Andrew Bille
Andrew Dunstan
Эндрю Кейн
Andrey Borodin
Андрей Рачицкий
Andrey Sokolov
Andy Fan
Anthonin Bonnefoy
Энтони Хсу
Антон Кирилов
Anton Melnikov
Anton Voloshin
Antonin Houska)
Антс Аасма
Антти Лямпинен
Aramaki Zyake
Артем Анисимов
Артур Закиров
Ashutosh Bapat
Ashutosh Sharma
Atsushi Torikoshi
Аттила Гуляш
Айюш Тивари
Айюш Ватса
Бартос Хроль
Бенуа Райдер
Бернд Хельмле
Bertrand Drouvot
Bharath Rupireddy
Бо Андерсон
Boshomi Phenix
Боуэн Ши
Бою Ян
Bruce Momjian
Кэмерон Вогт
Cary Huang
Седрик Вильмен
Чанхон Фэй
Шанталь Келлер
Chapman Flack
Чэнси Сун
Крис Трэверс
Кристиан Маурер
Кристиан Шторк
Christoph Berg
Christoph Heiss
Кристоф Куртуа
Кристофер Клайн
Claudio Freire
Колин Кейн
Corey Huinker
Курт Коловсон
Dag Lem
Dagfinn Ilmari Mannsåker
Дамир Белялов
Даниэль Фредуй
Daniel Gustafsson
Даниэль Шелепанов
Daniel Vérité
Daniel Westermann
Даррен Раш
Dave Cramer
Dave Page
David Christensen
Дэвид Кук
David G. Johnston
Дэвид Гейер
Дэвид Хиллман
Дэвид Перес
David Rowley
David Steele
Дэвид Уилер
David Zhang
Dean Rasheed
Денис Ерохин
Денис Лаксальд
Деврим Гюндюз
Dilip Kumar
Димитриос Апостолу
Dmitry Dolgov
Dmitry Koval
Дмитрий Васильев
Dominique Devienne
Донг Ук Ли
Дунхан Лин
Дунмин Лю
Дрю Каллахан
Дрю Кимбалл
Дзмитрий Ячник
Egor Chindyaskin
Egor Rogov
Ekaterina Kiryanova
Elena Indrupskaya
Элизабет Кристенсен
Emre Hasegeli
Эрик Сир
Eric Mutta
Эрик Радман
Эрик Ридж
Erik Rijkers
Эрик Винхольд
Erki Eessaar
Итан Мерц
Etsuro Fujita
Евгений Коньков
Euler Taveira
Эван Макбет
Евгений Морозов
Fabien Coelho
Fabrízio de Royes Mello
Фариас де Оливейра
Feliphe Pozzer
Огненный Изумруд
Флавьен Гедез
Floris Van Nee
Франческо Деграсси
Франк Штрайциг
Габриэле Бартолини
Гаррет Торнбург
Гэвин Флауэр
Гэвин Панелла
Gilles Darold
Жиль Парк
Грант Грычан
Greg Nancarrow
Greg Sabino Mullane
Greg Stark
Gurjeet Singh
Haiying Tang
Хадзиме Мацунага
Хал Такахара
Ханефи Ональди
Hannu Krosing
Hans Buschmann
Хао Ву
Хао Чжан
Hayato Kuroda
Heikki Linnakangas
Хемант Сандрана
Himanshu Upadhyaya
Хиронобу Сузуки
Хольгер Рейзе
Хунсю Ма
Хонгю Сун
Хорст Рейтерер
Hubert Lubaczewski
Хайвел Карвер
Ian Barwick
Иан Ильясов
Илья Ненашев
Исаак Морланд
Израиль Барт Рубио
Иван Картышов
Иван Коломбет
Иван Лазарев
Иван Панченко
Иван Трофимов
Jacob Champion
Джейкоб Шпайдель
Жак Комбринк
Jaime Casanova
Jakub Wartak
James Coleman
Джеймс Панг
Яни Рахкола
Japin Li
Дживан Чалке
Jeff Davis
Jeff Janes
Йелте Феннема-Нио
Jeremy Schneider
Jian Guo
Jian He
Джим Джонс
Джим Кинер
Джим Нэсби
Jingtang Zhang
Цзинсянь Ли
Цзинчжоу Фу
Джо Конвей
Joel Jacobson
Джон Экинс
Джон Хсу
Джон Моррис
John Naylor
Джон Рассел
Jonathan Katz
Jordi Gutiérrez
Joseph Koshakow
Джош Купершмидт
Джошуа Д. Дрейк
Джошуа Уйехара
Юбилей Янг
Julien Rouhaud
Junwang Zhao
Justin Pryzby
Кайдо Вайкла
Камбам Винай
Карен Таларико
Карина Лицкевич
Карл О. Пинк
Кашиф Зишан
Ким Йохан Андерссон
Кирилл Решке
Кирк Паркер
Кирк Волак
Кисун Квон
Коэн Де Гроот
Кохей КайГай
Kong Man
Konstantin Knizhnik
Кохэй Суту
Кришнакумар Р
Kuntal Ghosh
Курт Рёкс
Kyotaro Horiguchi
Лан Лю
Lars Kanis
Laurenz Albe
Лаури Лаанметс
Legs Mansion
Lukas Fittl
Magnus Hagander
Махендракар Шринивасарао
Майкель Грасси
Маноc Эммануилидис
Марсель Хофштеттер
Маркос Пегораро
Мариан Круцина
Marina Polyakova
Mark Dilger
Марк Гертин
Марк Слоан
Markus Winand
Марлене Рейтерер
Martín Marqués
Мартин Нэш
Мартин Шлоссарек
Masahiko Sawada
Masahiro Ikeda
Масаки Кувамура
Masao Fujii
Мейсон Шарп
Матеус Алкантара
Матс Киндал
Маттиас Кун
Matthias van de Meent
Максим Богу́к
Maxim Orlov
Maxim Yablokov
Максим Бойер
Melanie Plageman
Мелих Мутлу
Мерлин Монкьюр
Майка Гейт
Michael Banck
Михаил Бондаренко
Michael Paquier
Майкл Ван
Михаил Жилин
Михаил Николаев
Михал Бартак
Михал Клечек
Михаил Грибков
Минли Чжан
Мирослав Бендик
Мицуру Хината
Моаз Ассали
Мураликришна Бандара
Nathan Bossart
Nazir Bilal Yavuz
Нил Тиффин
Ngigi Waithaka
Nikhil Benesch
Нихил Радж
Nikita Glukhov
Никита Калинин
Никита Малахов
Nikolay Samokhvalov
Nikolay Shaplov
Ниша Мунд
Нишант Шарма
Nitin Jadhav
Noah Misch
Noriyoshi Shinoda
Оле Педер Брандцэг
Олег Бартунов
Олег Сибиряков
Олег Целебровский
Олег Самойлов
Onder Kalaci
Ондржей Навратил
Пабло Харо
Палак Чатурведи
Пантелис Теодосиу
Пол Амонсон
Paul Jungwirth
Pavel Borisov
Павел Кулаков
Pavel Luzanov
Pavel Stehule
Павло Голуб
Педро Галлегос
Пит Сторер
Peter Eisentraut
Peter Geoghegan
Peter Smith
Филип Уорнер
Филипп Сальвисберг
Пьер Дюкроке
Пьер Фортен
Пшемыслав Штох
Quynh Tran
Рагхувир Девулапалли
Ranier Vilela
Reid Thompson
Риан МакГуайр
Richard Guo
Ричард Весели
Ридван Коркмаз
Robert Haas
Роберт Скотт
Роберт Трит
Roberto Mello
Robins Tharakan
Роман Лозко
Ронан Дунклау
Rui Zhao
Ryo Matsumura
Рёога Ёсида
Самир Кумар
Sami Imseih
Самуэль Дюссо
Санджай Минни
Сатору Коидзуми
Себастьян Скалецкий
Сергей Глухов
Sergei Kornilov
Сергей Прохоренко
Сергей Саргсян
Sergey Shinderuk
Шаочжун Ши
Шон Томас
Shay Rojansky
Шихао Чжун
Shinya Kato
Шлок Кьял
Shruthi Gowda
Шубхам Ханна
Шулин Чжоу
Швета Малик
Simon Riggs
Soumyadeep Chakraborty
Сраван Велагандула
Stan Hu
Степан Неретин
Степан Рутц
Стефан Шильдкнехт
Стефан Ташуар
Stephen Frost
Стив Аткинс
Steve Chavez
Suraj Khamkar
Suraj Kharage
Сванте Рихтер
Светлана Деревянко
Сильвен Франдаз
Takayuki Tsunakawa
Tatsuo Ishii
Tatsuro Yamada
Тендер Ван
Федор Сигаев
Thom Brown
Томас Манро
Тим Кэри-Смит
Тим Нидхэм
Тим Палмер
Тобиас Буссманн
Tom Lane
Tomas Vondra
Томми Павличек
Tomonari Katsumata
Тристан Партин
Тристан Рааб
Тунг Нгуен
Умаир Шахид
Уве Биндер
Валери Вулард
Валлимахараджан Г
Вася Бойцов
Victor Wagner
Victor Yegorov
Виктория Шепард
Видуши Гупта
Vignesh C
Vik Fearing
Виктор Лейс
Vinayak Pokale
Vitaly Burovoy
Войтех Бенеш
Wei Sun
Wei Wang
Вэньцзян Чжан
Will Mortensen
Вилли Манн
Wolfgang Walther
Сян Лиу
Сяоран Ван
Син Го
Сюйдун Ян
Ягор Юзефович
Яцзюнь Ху
Ярослав Сабуров
Йонг Ли
Yongtao Huang
Yugo Nagata
Юхан Цю
Юки Сейно
Yura Sokolov
Юрий Рашковский
Юуки Фудзии
Юя Ватари
Ив Колин
Zhihong Yu
Чжицзе Хоу
Цзунлян Цюань
Зубейр Эрыилмаз
Цзумин Цзян