E.22. Выпуск 17 #
Дата выпуска: 2024-09-26
E.22.1. Обзор #
PostgreSQL 17 содержит много новых возможностей и улучшений, в том числе:
Новая система управления памятью для
VACUUM, потребляющая меньше памяти и повышающая производительность очистки.Расширение синтаксиса SQL/JSON, в том числе добавление функций-конструкторов, предикатов и функции
JSON_TABLE()для преобразования данных типа JSON в табличное представление.Различные улучшения производительности запросов, в том числе для последовательного чтения с использованием потокового ввода-вывода, записи при большой параллельной активности и поиска по нескольким значениям в индексах btree.
Улучшения логической репликации, в том числе:
Управление отработкой отказа
Утилита pg_createsubscriber для создания логических реплик из резервных серверов физической репликации
pg_upgrade теперь сохраняет слоты логической репликации на публикующих серверах и полное состояние подписки на подписчиках. Теперь после обновления на будущие основные версии логическая репликация будет продолжаться без запроса копирования для повторной синхронизации.
Новый параметр подключения
sslnegotiation=directна стороне клиента, который устанавливает TLS-соединение напрямую без предварительного согласования.Поддержка инкрементального резервного копирования в pg_basebackup.
Новый параметр
ON_ERROR ignoreвCOPY, позволяющий продолжать копирование даже в случае ошибки.
Предыдущие пункты и другие новые возможности PostgreSQL 17 более подробно описаны в следующих разделах.
E.22.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(Джозеф Кошаков) § §Кроме того, теперь запрещается многократное использование пустых единиц измерения в значениях типа interval.
Удаление серверной переменной
old_snapshot_threshold(Томас Манро) §Эта переменная позволяла процессу VACUUM удалять строки, которые потенциально были видимыми для выполняющихся транзакций, и если транзакции пытались получить к ним доступ, возникали ошибки типа «snapshot too old» (снимок слишком стар). Если найдётся более удачная реализация, функциональность может быть добавлена обратно в PostgreSQL в будущем.
Изменение обработки статуса суперпользователя для начального пользователя сеанса командой
SET SESSION AUTHORIZATION(Джозеф Кошаков) §Теперь поведение команды зависит от наличия статуса суперпользователя у пользователя в момент выполнения команды
SET SESSION AUTHORIZATION, а не на момент подключения к базе данных.Удаление функциональности симуляции поддержки пользователей на уровне отдельных БД (Натан Боссарт) §
Эта функциональность (
db_user_namespace) использовалась редко.Удаление дополнительного модуля adminpack (Даниэль Густафссон) §
Ранее этот модуль использовался инструментом pgAdmin III, поддержка которого закончилась.
Удаление значения
fsync_writethroughдля wal_sync_method в Windows (Томас Манро) §Это значение было эквивалентно
fsyncв Windows.Изменение в обработке границ файлов двумя функциями, связанными с именами файлов WAL (Кётаро Хоригути, Андрес Фройнд, Брюс Момджян) §
Раньше функции
pg_walfile_name()иpg_walfile_name_offset()возвращали номер предыдущего сегмента LSN, когда LSN был на границе сегмента файла; теперь они возвращают текущий сегмент LSN.Удаление ставшей ненужной серверной переменной
trace_recovery_messages(Бхарат Рупиредди) §Удаление столбца
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.Отображение цели сбора статистики по умолчанию как
NULLв столбцахpg_attribute.attstattargetиpg_statistic_ext.stxstattarget(Питер Эйзентраут) § §Переименование
pg_collation.colliculocaleвcolllocaleиpg_database.daticulocaleвdatlocale(Джефф Девис)§Переименование столбцов
max_dead_tuplesвmax_dead_tuple_bytes,num_dead_tuplesвnum_dead_item_idsи добавлениеdead_tuple_bytesв представлениеpg_stat_progress_vacuum(Масахико Савада) § §Переименование столбцов SLRU в системном представлении
pg_stat_slru(Альваро Эррера) §Кроме того, изменились и имена столбцов, которые принимает функция
pg_stat_reset_slru().
E.22.3. Изменения #
Ниже вы найдёте подробный список изменений, произошедших между предыдущим основным выпуском и выпуском PostgreSQL 17.
E.22.3.1. Сервер #
E.22.3.1.1. Оптимизатор #
Возможность для оптимизатора улучшать планы с CTE с учётом статистики и порядка сортировки столбцов, из которых выводятся строки в ранних частях запроса (Цзянь Гуо, Ричард Гуо, Том Лейн) § §
Улучшение оптимизации запросов с условиями
IS NOT NULLиIS NULL(Дэвид Роули, Ричард Гуо, Энди Фан) §Теперь оптимизатор удаляет ограничение
IS NOT NULLдля запросов по столбцамNOT NULLи исключает сканирование по столбцамNOT NULLпри использовании условияIS NULL.Возможность отсекать секции при использовании условий
IS [NOT] UNKNOWNдля логических столбцов (Дэвид Роули) §Улучшение оптимизации запросов с использованием операторов включения в диапазон <@ и @> (Ким Йохан Андерссон, Цзянь Хи) §
Возможность преобразования коррелирующих подзапросов
INв JOIN (Энди Фан, Том Лейн) §Улучшение оптимизации запросов с предложением
LIMITдля секционированных таблиц, таблиц с наследованием и дляUNION ALL(Энди Фан, Дэвид Роули) §Увеличение числа случаев, в которых можно запускать узлы запросов в параллельном режиме (Том Лейн) §
Возможность упорядочивать столбцы
GROUP BY, чтобы порядок совпадал сORDER BY(Андрей Лепихов, Фёдор Сигаев) §Это поведение отключается серверной переменной enable_group_by_reordering.
Возможность запросов с
UNION(безALL) использовать MergeAppend (Дэвид Роули) §Корректировка вычисления количества сортируемых строк в планах MergeAppend (Александр Кузьменков) §
Использование индексов GiST и SP-GiST для инкрементальной сортировки (Мирослав Бендик) §
Это улучшение особенно полезно в запросах с
ORDER BY, когда первый столбец имеет индекс GiST или SP-GiST, а остальные — нет.Добавление столбцов в представление
pg_statsдля вывода информации о гистограммах для диапазонных типов данных (Егор Рогов, Соумйадип Чакраборти) §
E.22.3.1.2. Индексы #
E.22.3.1.3. Общая производительность #
Более эффективное удаление и заморозка кортежей в процессе
VACUUM(Мелани Плейгман, Хейкки Линнакангас) §Теперь в процессе очистки генерируется меньше трафика WAL.
Более эффективное хранение ссылок на кортежи в процессе
VACUUM(Масахико Савада, Джон Нейлор) § § § §Кроме того, для процесса очистки удалено скрытое ограничение памяти в 1 ГБ, ранее действовавшее даже при повышенных значениях maintenance_work_mem или autovacuum_work_mem.
Оптимизация очистки отношений без индексов (Мелани Плейгман) §
Увеличение значения по умолчанию до 2 МБ для vacuum_buffer_usage_limit (Томас Манро) §
Улучшение производительности при проверке ролей с членством во множестве ролей (Натан Боссарт) §
Улучшение производительности записи в WAL в условиях высокой конкуренции за ресурсы (Бхарат Рупиредди) §
Улучшение производительности при передаче клиенту больших блоков данных (Мелих Мутлу) §
Возможность объединять операции чтения данных файловой системы с помощью io_combine_limit (Томас Манро, Андрес Фройнд, Мелани Плейгман, Назир Билал Явуз) § § §
E.22.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.Добавление событий ожидания для задержек контрольных точек (Томас Манро) §
Возможность отслеживать обработку индексов в процессе очистки (Сами Имсейх) §
Эту информацию можно найти в столбцах
indexes_totalиindexes_processedсистемного представленияpg_stat_progress_vacuum.
E.22.3.1.5. Права #
Предоставление права на выполнение операций по обслуживанию БД (Натан Боссарт) §
Для этого можно выдать право
MAINTAINна уровне таблицы или предоставить членство в предопределённой ролиpg_maintain, в результате чего будут доступны следующие операции:VACUUM,ANALYZE,REINDEX,REFRESH MATERIALIZED VIEW,CLUSTERиLOCK TABLE.Возможность для ролей с членством в роли
pg_monitorвыполнятьpg_current_logfile()(Павло Голуб, Натан Боссарт) §
E.22.3.1.6. Конфигурация сервера #
Добавление системной переменной allow_alter_system для отключения возможности использовать
ALTER SYSTEM(Йелте Феннема-Нио, Габриэль Бартолини) §Возможность использовать
ALTER SYSTEMдля установки нераспознанных пользовательских серверных переменных (Том Лейн) §Это также можно делать с помощью
GRANT ON PARAMETER.Добавление серверной переменной transaction_timeout, ограничивающей длительность транзакций (Андрей Бородин, Япинь Ли, Цзюньван Жао, Александр Коротков) § § §
Добавление провайдера правил сортировки builtin, независимого от платформы (Джефф Девис) § § § §
Он поддерживает правила сортировки
CиC.UTF-8.Добавление серверной переменной huge_pages_status, выводящей информацию об использовании огромных страниц (Джастин Призби) §
Используется, когда для 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.22.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().Добавление системного идентификатора в файлы манифестов копий файловой системы (Амул Сул) §
Это полезно для обнаружения попыток использования неверных журналов WAL.
Указание значения параметра строки подключения
dbnameпри записи информации о подключении в файлpostgresql.auto.confпрограммой pg_basebackup (Вигнеш Си, Хайато Курода) §Добавление столбца
pg_replication_slots.invalidation_reasonдля отображения причины аннулирования слотов (Швета Малик, Бхарат Рупиредди) § §Добавление столбца
pg_replication_slots.inactive_sinceдля отображения время неактивности слотов (Бхарат Рупиредди) § § §Добавление функции
pg_sync_replication_slots()для синхронизации слотов логической репликации (Хоу Чжицзе, Швета Малик, Аджин Чериан, Питер Эйзентраут) § §Добавление свойства
failoverв протокол репликации (Хоу Чжицзе, Швета Малик) §
E.22.3.1.8. Логическая репликация #
Добавление приложения pg_createsubscriber для создания логической реплики из резервного сервера физической репликации (Эйлер Тавейра)§
Возможность миграции рабочих слотов и подписок логической репликации pg_upgrade (Хайато Курода, Хоу Чжицзе, Вигнеш Си, Жюльен Руо, Шлок Кьял) § §
Теперь репликация может продолжаться сразу после миграции; поддерживается для кластеров PostgreSQL, начиная с версии 17.
Автоматическое переключение слотов логической репликации при обработке отказа (Хоу Чжицзе, Швета Малик, Аджин Чериан)§
Для включения функциональности предназначен необязательный пятый аргумент функции
pg_create_logical_replication_slot().Добавление серверной переменной sync_replication_slots, включающей синхронизацию слотов логической репликации при автоматическом переключении для отработки отказа (Швета Малик, Хоу Чжицзе, Питер Смит) § §
Возможность управления поведением при обработке отказа логической репликации в командах
CREATE/ALTER SUBSCRIPTION(Швета Малик, Хоу Чжицзе, Аджин Чериан) § §Возможность использования хеш-индексов на стороне подписчика для применения изменений логической репликации (Хайато Курода) §
Ранее для этой цели могли использоваться только индексы btree.
Улучшение производительности логического декодирования для случаев с множеством подтранзакций (Масахико Савада) §
Реализация перезапуска рабочих процессов, применяющих изменения логической репликации, если у владельца подписки отозваны права суперпользователя (Вигнеш Си) §
При этом требуется повторная аутентификация.
Добавление параметра
flushв функциюpg_logical_emit_message()(Микаэль Пакье) §С этим параметром сообщения гарантированно сохраняются.
Указание физических резервных серверов, которые должны быть синхронизированы перед тем, как данные станут видимыми для подписчиков (Хоу Чжицзе, Швета Малик) § §
Серверы указываются в новой переменной synchronized_standby_slots.
Добавление столбца с типом рабочего процесса в
pg_stat_subscription(Питер Смит) §
E.22.3.2. Служебные команды #
Добавление нового параметра
ON_ERROR ignoreвCOPY, позволяющего игнорировать строки с ошибками (Дамир Белялов, Атсуши Торикоши, Александр Шульгин, Цзянь Хи, Юго Нагата) § § § §По умолчанию поведение осталось прежним:
ON_ERROR stop.Добавление нового параметра
LOG_VERBOSITYвCOPYдля вывода игнорируемых строк с ошибкамиCOPY FROM(Бхарат Рупиредди) §Вывод количества пропущенных строк при обработке командой
COPY FROM(Атсуши Торикоши) §Эта информация выводится в столбце системного представления
pg_stat_progress_copy.tuples_skipped.Возможность указывать, что все значения в столбцах в команде
COPY FROMдолжны быть принудительно установлены в NULL или NOT NULL (Чжан Минли) §Поддержка столбцов идентификации для секционированных таблиц (Ашутош Бапат) §
Поддержка ограничений-исключений для секционированных таблиц (Пол А. Юнгвирт) §
Чтобы ограничения-исключения работали корректно для секционированных таблиц, они должны сравнивать части ключей секционирования на равенство, при этом другие столбцы могут использовать специфичные для ограничений-исключений сравнения.
Добавление более понятного метода использования
ALTER TABLEдля указания столбца ориентира статистики по умолчанию (Питер Эйзентраут) §Добавлен синтаксис
ALTER TABLE ... SET STATISTICS DEFAULT; устаревший синтаксисSET STATISTICS -1всё ещё поддерживается.Возможность изменять выражение для генерируемых столбцов с помощью
ALTER TABLE(Амул Сул) §Для этого используется команда
ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION.Возможность указывать метод доступа для секционированных таблиц (Джастин Призби, Соумйадип Чакраборти, Микаэль Пакье) § §
Добавление значения
DEFAULTдляALTER TABLE .. SET ACCESS METHOD(Микаэль Пакье) §Поддержка событийных триггеров, срабатывающих при установлении соединения с БД (Константин Книжник, Михаил Грибков)§
Поддержка событийных триггеров для
REINDEX(Гаррет Торнбург, Цзянь Хи)§Поддержка использования синтаксиса в скобках для параметров
CLUSTER, если имя таблицы не указано (Натан Боссарт) §
Возможность выводить информацию об использовании памяти оптимизатором в
EXPLAIN(Ашутош Бапат) §Вывести эту информацию можно при помощи параметра
MEMORY.Добавление в
EXPLAINпараметраSERIALIZEдля вывода стоимости преобразования данных для передачи по сети (Степан Руц, Маттиас ван де Меент) §Возможность для
EXPLAINотображать статистику времени чтения и записи локальных блоков в выводе с параметромBUFFERS(Назир Билал Явуз) §Улучшение отображения узлов SubPlan и выходных параметров в
EXPLAIN(Том Лейн, Дин Рашид) §Отображение информации
deform_counterпри использовании JIT-компиляции в выводеEXPLAIN(Дмитрий Долгов) §
E.22.3.3. Типы данных #
Поддержка значений
+/-infinityв типе данныхinterval(Джозеф Кошаков, Цзянь Хи, Ашутош Бапат) §Возможность использовать тип
ENUM, добавленный посредствомALTER TYPE, если тип был создан в той же транзакции (Том Лейн)§Ранее такой сценарий не допускался.
Возможность модифицировать изменяемые представления командой
MERGE(Дин Рашид)§Добавление
WHEN NOT MATCHED BY SOURCEвMERGE(Дин Рашид) §Условие
WHEN NOT MATCHEDи ранее поддерживалось для целевых строк.Возможность использовать предложение
RETURNINGвMERGE(Дин Рашид) §Новая функция
merge_action()вRETURNINGпозволяет получить информацию о DML-операции для каждой строки.
E.22.3.5. Функции #
Добавление функции
JSON_TABLE()для преобразования данных типаJSONв табличное представление (Никита Глухов, Фёдор Сигаев, Олег Бартунов, Александр Коротков, Эндрю Дунстан, Амит Ланготе, Цзянь Хи) §Эта функция может использоваться в предложении
FROMзапросовSELECTв качестве источника кортежей.Добавление функций-конструкторов SQL/JSON:
JSON(),JSON_SCALAR()иJSON_SERIALIZE()(Никита Глухов, Фёдор Сигаев, Олег Бартунов, Александр Коротков, Эндрю Дунстан, Амит Ланготе) §Добавление функций-конструкторов SQL/JSON:
JSON(),JSON_SCALAR()иJSON_SERIALIZE()(Никита Глухов, Фёдор Сигаев, Олег Бартунов, Александр Коротков, Эндрю Дунстан, Амит Ланготе) §Добавление методов jsonpath для преобразования значений типа
JSONв другие типыJSON(Дживан Чок) §Добавлены следующие методы jsonpath:
.bigint(),.boolean(),.date(),.decimal([precision [, scale]]),.integer(),.number(),.string(),.time(),.time_tz(),.timestamp()и.timestamp_tz().Добавление спецификаторов формата часового пояса для
to_timestamp()(Том Лейн) §TZпринимает аббревиатуры часовых поясов или числовые смещения, аOFпринимает только числовые смещения.Возможность указывать часовой пояс сеанса как
AS 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 для значения (Юго Нагата) §Если значение хранится не в виде TOAST, функция возвращает
NULL.
Добавление функции для изменения паролей ролям в libpq (Джо Конвей) §
Добавлена функция
PQchangePassword(), которая хеширует новый пароль перед отправкой на сервер.Добавление функций закрытия порталов и подготовленных операторов (Йелте Феннема-Нио) §
Добавлены следующие функции:
PQclosePrepared(),PQclosePortal(),PQsendClosePrepared()иPQsendClosePortal().Добавление в libpq API, который позволяет отправлять как блокирующие, так и неблокирующие запросы на отмену с возможностью шифрования, если оно уже используется в соединении (Йелте Феннема-Нио) §
Ранее поддерживались только блокирующие запросы на отмену без шифрования.
Добавление в libpq функции
PQsocketPoll(), предназначенной для опроса состояния сетевого сокета (Тристан Партин, Том Лейн) § §Добавление в libpq функции
PQsendPipelineSync(), предназначенной для отправки точки синхронизации в режиме конвейера (Антон Кирилов) §Эта функция подобна
PQpipelineSync(), но она позволяет отложить передачу данных на сервер до достижения лимита размера выходного буфера.Добавление в libpq функции
PQsetChunkedRowsMode()для получения результатов запроса порциями (Даниэль Верите)§Поддержка TLS-соединений без необходимости проведения сетевого взаимодействия (Грег Старк, Хейкки Линнакангас, Питер Эйзентраут, Микаэль Пакье, Даниэль Густафссон) § § § § § § § §
Чтобы включить эту функциональность, используется параметр
sslnegotiation=directна стороне клиента, при этом требуется поддержка ALPN; поддерживается только для серверов PostgreSQL, начиная с версии 17.
Более наглядное отображение пустых прав и прав по умолчанию в выводе psql (Эрик Винхольд, Лауренц Альбе) §
Команда
\dpтеперь выводит(none)для пустых прав; права по умолчанию по-прежнему отображаются как пустые.Корректная обработка указания
\pset nullкомандами с обратной косой чертой (Эрик Винхольд, Лауренц Альбе) §Ранее в таких командах указание
\pset nullигнорировалось.Возможность остановить команду psql
\watchпосле получения минимального количества строк (Грег Сабино Маллейн) §Для этого используется параметр
min_rows.Возможность прерывать попытки подключения psql через CTRL+C (Тристан Партин) §
Поддержка
FETCH_COUNTдля команд, отличных отSELECT, в psql (Даниэль Верите) §Улучшение дополнения табуляцией для psql (Дагфинн Ильмари Маннсакер, Жиль Даролд, Кристоф Хейсс, Стив Чавес, Вигнеш Си, Павел Борисов, Цзянь Хи) § § § § § § § §
E.22.3.9. Серверные приложения #
Добавление приложения pg_walsummary для выгрузки файлов сводок WAL (Роберт Хаас) §
Возможность восстанавливать большие объекты pg_dump порциями (Том Лейн) §
Если в базе данных много больших объектов, это нововведение поможет избежать ограничения на размер транзакции. Кроме того, восстановление можно выполнять параллельно.
Добавление в 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для восстановления объекта в нескольких транзакциях (Том Лейн) §Это нововведение позволяет сохранить преимущества работы с порциями транзакций, одновременно предотвращая проблемы, связанные с большими блоками транзакций.
Изменение параметра режима отладки в pgbench с
-dна--debug(Грег Сабино Маллейн) §Ключ
-dтеперь используется для указания имени базы данных, для этого же предназначен и новый ключ--dbname.Добавление в pgbench ключа
--exit-on-abortдля завершения работы при прерывании работы любого клиента (Юго Нагата) §Добавление в pgbench команды
\syncpipeline, позволяющей отправлять сообщения синхронизации (Антонин Боннефой) §Поддержка удаления файлов истории резервного копирования для pg_archivecleanup (Атсуши Торикоши)§
Для этого используется ключ
--clean-backup-history.Добавление нескольких длинных ключей в pg_archivecleanup (Атсуши Торикоши) §
Добавлены следующие ключи:
--debug,--dry-runи--strip-extension.Возможность для pg_basebackup и pg_receivewal использовать имя базы данных в спецификации подключения (Йелте Феннема-Нио) §
Это нововведение особенно полезно для пулов соединений, учитывающих имена баз данных.
Добавление в pg_upgrade ключа
--copy-file-range(Томас Манро) §Ключ поддерживается в ОС Linux и FreeBSD.
Возможность для reindexdb с ключом
--indexпараллельно обрабатывать индексы разных таблиц (Максим Орлов, Светлана Деревянко, Александр Коротков) §Возможность для reindexdb, vacuumdb и clusterdb обрабатывать объекты, соответствующие шаблону, во всех базах данных (Натан Боссарт) § § §
Для этого предназначен новый ключ
--all.
E.22.3.10. Исходный код #
Прекращение поддержки OpenSSL 1.0.1 (Микаэль Пакье) §
Прохождение тестов в режиме OpenSSL FIPS (Питер Эйзентраут) § §
Использование инструкций CPU AVX-512 для подсчёта битов (Пол Амонсон, Натан Боссарт, Антс Аасма) § §
Требование версии LLVM 10 или выше (Томас Манро) §
Использование внутренних инструкций CRC для 64-битных процессоров LoongArch (Сюйдун Ян) §
Прекращение поддержки AIX (Хейкки Линнакангас) §
Удаление параметра сборки PostgreSQL, специфичного для Microsoft Visual Studio (Микаэль Пакье)§
Теперь в среде Visual Studio возможна сборка только с Meson.
Удаление параметра configure
--disable-thread-safety(Томас Манро, Хейкки Линнакангас) § §Предполагается, что на всех платформах есть необходимая поддержка потоков.
Удаление параметра configure
--with-CC(Хейкки Линнакангас) §Теперь указать компилятор можно только в переменной среды
CC.Исключение получения данных с завершающим нулём функциями для пользовательских типов данных (Дэвид Роули) §
Добавление инкрементального анализатора
JSONдля работы с огромными документамиJSON(Эндрю Дунстан) §Преобразование верхнеуровневого файла
READMEв формат Markdown (Натан Боссарт) §Удаление ставшего ненужным верхнеуровневого файла
INSTALL(Том Лейн) §Удаление параметра make
distprep(Питер Эйзентраут) §Добавление поддержки make для разделяемых библиотек Android (Питер Эйзентраут) §
Добавление внутренней поддержки точек внедрения (Микаэль Пакье) § § § §
Точки внедрения используются для отладки сервера; их поддержка должна быть включена во время компиляции.
Добавление реестра сегментов динамической разделяемой памяти (Натан Боссарт) §
Теперь разделяемые библиотеки, не загруженные при запуске сервера, могут координировать использование динамической разделяемой памяти.
Исправление
emit_log_hookтак, чтобы этот обработчик использовал то же значение времени, что и другие записи журнала для того же запроса (Камбам Винай, Микаэль Пакье) §Улучшение документации по использованию
jsonpathдля проверок предикатов (Дэвид Уилер) §
E.22.3.11. Дополнительные модули #
Возможность проталкивать запросы JOIN с условиями, не связанными с объединением, на сторонние серверы и на нестандартное сканирование (Ричард Гуо, Эцуро Фудзита) §
Обёртки сторонних данных и методы нестандартного сканирования необходимо адаптировать для поддержки этого изменения.
Возможность проталкивать подзапросы
EXISTSиINна сторонние серверы postgres_fdw (Александр Пыхалов) §Увеличение значения по умолчанию для стоимости кортежей от обёрток сторонних данных (Дэвид Роули, Умайр Шахид) § §
Это значение используется оптимизатором.
Возможность прерывать операции, выполняемые с помощью dblink (Ной Миш) §
Возможность создания хеш-индексов по столбцам ltree (Томми Павличек) §
Теперь также возможно соединение и агрегирование по хешу по столбцам ltree.
Возможность включать пробелы и кавычки в правила преобразования символов в unaccent (Микаэль Пакье) §
Изменён синтаксис файла
unaccent.rules.Возможность для amcheck проверять нарушения уникальных ограничений с помощью нового ключа
--checkunique(Анастасия Лубенникова, Павел Борисов, Максим Орлов) §Прохождение тестов citext в режиме OpenSSL FIPS (Питер Эйзентраут) §
Прохождение тестов pgcrypto в режиме OpenSSL FIPS (Питер Эйзентраут) §
Удаление некоторых неиспользуемых макросов SPI (Бхарат Рупиредди) §
Возможность для
ALTER OPERATORизменять дополнительные атрибуты оптимизации (Томми Павличек)§Это обновление полезно для разработки расширений.
Возможность для расширений определять пользовательские события ожидания (Масахиро Икеда) § § § §
Эта возможность была добавлена для postgres_fdw и dblink.
Добавление в pg_buffercache функции
pg_buffercache_evict(), позволяющей вытеснять страницы из общих буферов (Палак Чатурведи, Томас Манро) §Это полезно при тестировании.
E.22.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.Добавление информации
deform_counterпри использовании JIT-компиляции вpg_stat_statements(Дмитрий Долгов) §Добавление необязательного четвёртого аргумента (
minmax_only) в функциюpg_stat_statements_reset(), который позволяет сбросить только статистику максимальных/минимальных значений (Андрей Зубков) §По умолчанию значение этого аргумента —
false.Добавление в
pg_stat_statementsстолбцовstats_sinceиminmax_stats_since, в которых отслеживается время создания записи и время последнего сброса минимальных/максимальных значений (Андрей Зубков) §
E.22.4. Благодарственный список #
Перечисленные ниже (в алфавитном порядке) лица сделали вклад в этот выпуск, разрабатывая, совершенствуя и рецензируя код, принимая правки, проводя тестирование или сообщая о проблемах.
| Абхиджит Менон-Сен (Abhijit Menon-Sen) |
| Аджин Чериан (Ajin Cherian) |
| Аднан Даутович (Adnan Dautovic) |
| Айдар Имамов (Aidar Imamov) |
| Айзек Морленд (Isaac Morland) |
| Акаш Шанкаран (Akash Shankaran) |
| Акшат Джаймини (Akshat Jaimini) |
| Алаа Аттия (Alaa Attya) |
| Алекс Ворк (Alex Work) |
| Алекс Малек (Alex Malek) |
| Алекс Ше (Alex Hsieh) |
| Александр Алексеев (Aleksander Alekseev) |
| Александр Кожемякин (Alexander Kozhemyakin) |
| Александр Коротков (Alexander Korotkov) |
| Александр Кузьменков (Alexander Kuzmenkov) |
| Александр Лахин (Alexander Lakhin) |
| Александр Пыхалов (Alexander Pyhalov) |
| Александр Шульгин (Alex Shulgin) |
| Алексей Орлов (Aleksej Orlov) |
| Алексей Палажченко (Alexey Palazhchenko) |
| Альваро Эррера (Álvaro Herrera) |
| Альфонс Кемпер (Alfons Kemper) |
| Алёна Рыбакина (Alena Rybakina) |
| Амадео Гальярдо (Amadeo Gallardo) |
| Амит Капила (Amit Kapila) |
| Амит Ланготе (Amit Langote) |
| Амул Сул (Amul Sul) |
| Анастасия Лубенникова (Anastasia Lubennikova) |
| Анатолий Зарецкий (Anatoly Zaretsky) |
| Андреас Карлссон (Andreas Karlsson) |
| Андреас Ульбрих (Andreas Ulbrich) |
| Андрей Билле (Andrew Bille) |
| Андрей Бородин (Andrey Borodin) |
| Андрей Зубков (Andrei Zubkov) |
| Андрей Лепихов (Andrey Lepikhov) |
| Андрей Рачицкий (Andrey Rachitskiy) |
| Андрей Соколов (Andrey Sokolov) |
| Андрес Фройнд (Andres Freund) |
| Антон Волошин (Anton Voloshin) |
| Антон Кирилов (Anton Kirilov) |
| Антон Мельников (Anton Melnikov) |
| Антонин Боннефой (Anthonin Bonnefoy) |
| Антонин Хоуска (Antonin Houska) |
| Антс Аасма (Ants Aasma) |
| Антти Лампинен (Antti Lampinen) |
| Арамаки Зяке (Aramaki Zyake) |
| Артем Анисимов (Artem Anisimov) |
| Артур Закиров (Artur Zakirov) |
| Атсуши Торикоши (Atsushi Torikoshi) |
| Аттила Гуляш (Attila Gulyás) |
| Ашутош Бапат (Ashutosh Bapat) |
| Ашутош Шарма (Ashutosh Sharma) |
| Аюш Ватса (Ayush Vatsa) |
| Аюш Тивари (Ayush Tiwari) |
| Бартош Хрол (Bartosz Chrol) |
| Бенуа Райдер (Benoît Ryder) |
| Бернд Хелмле (Bernd Helmle) |
| Бертран Друво (Bertrand Drouvot) |
| Бо Андресон (Bo Andreson) |
| Боуэн Ши (Bowen Shi) |
| Бошоми Феникс (Boshomi Phenix) |
| Боюй Ян (Boyu Yang) |
| Брюс Момджян (Bruce Momjian) |
| Бхарат Рупиредди (Bharath Rupireddy) |
| Валери Вулард (Valerie Woolard) |
| Валлимахараджан Г (Vallimaharajan G) |
| Вася Бойцов (Vasya Boytsov) |
| Вигнеш Си (Vignesh C) |
| Видуши Гупта (Vidushi Gupta) |
| Вик Фиринг (Vik Fearing) |
| Виктор Вагнер (Victor Wagner) |
| Виктор Егоров (Victor Yegorov) |
| Виктор Лейс (Viktor Leis) |
| Виктория Шепард (Victoria Shepard) |
| Вилл Мортенсен (Will Mortensen) |
| Вилли Манн (Willi Mann) |
| Винаяк Покале (Vinayak Pokale) |
| Виталий Буровой (Vitaly Burovoy) |
| Войтех Бенеш (Vojtech Benes) |
| Вольфганг Вальтер (Wolfgang Walther) |
| Вэй Ван (Wei Wang) |
| Вэй Сунь (Wei Sun) |
| Вэньцзян Чжан (Wenjiang Zhang) |
| Габриэль Бартолини (Gabriele Bartolini) |
| Гаррет Торнбург (Garrett Thornburg) |
| Грант Гричан (Grant Gryczan) |
| Грег Нанкарроу (Greg Nancarrow) |
| Грег Сабино Маллейн (Greg Sabino Mullane) |
| Грег Старк (Greg Stark) |
| Гуржит Сингх (Gurjeet Singh) |
| Гэвин Панелла (Gavin Panella) |
| Гэвин Флауэр (Gavin Flower) |
| Давид Гайер (David Geier) |
| Даг Лем (Dag Lem) |
| Дагфинн Ильмари Маннсакер (Dagfinn Ilmari Mannsåker) |
| Дамир Белялов (Damir Belyalov) |
| Даниель Вестерман (Daniel Westermann) |
| Даниил Шелепанов (Daniel Shelepanov) |
| Даниэль Верите (Daniel Vérité) |
| Даниэль Густафссон (Daniel Gustafsson) |
| Даниэль Фредуль (Daniel Fredouille) |
| Даррен Раш (Darren Rush) |
| Деврим Гюндюз (Devrim Gündüz) |
| Дейв Крамер (Dave Cramer) |
| Дейв Пейдж (Dave Page) |
| Денис Ерохин (Denis Erokhin) |
| Денис Лаксельд (Denis Laxalde) |
| Джастин Призби (Justin Pryzby) |
| Джейкоб Спидел (Jacob Speidel) |
| Джейкоб Чемпион (Jacob Champion) |
| Джеймс Коулман (James Coleman) |
| Джеймс Панг (James Pang) |
| Джереми Шнайдер (Jeremy Schneider) |
| Джефф Девис (Jeff Davis) |
| Джефф Джейнс (Jeff Janes) |
| Дживан Чок (Jeevan Chalke) |
| Джим Джонс (Jim Jones) |
| Джим Кинер (Jim Keener) |
| Джим Нэсби (Jim Nasby) |
| Джо Конвей (Joe Conway) |
| Джозеф Кошаков (Joseph Koshakow) |
| Джон Моррис (John Morris) |
| Джон Нейлор (John Naylor) |
| Джон Рассел (John Russell) |
| Джон Сюй (John Hsu) |
| Джон Экинс (John Ekins) |
| Джонатан С Кац (Jonathan S. Katz) |
| Джош Купершмидт (Josh Kupershmidt) |
| Джошуа Д. Дрейк (Joshua D. Drake) |
| Джошуа Уэхара (Joshua Uyehara) |
| Джоэл Джейкобсон (Joel Jacobson) |
| Джубили Янг (Jubilee Young) |
| Дилип Кумар (Dilip Kumar) |
| Димитриос Апостолу (Dimitrios Apostolou) |
| Дин Рашид (Dean Rasheed) |
| Дмитрий Васильев (Dmitry Vasiliev) |
| Дмитрий Долгов (Dmitry Dolgov) |
| Дмитрий Коваль (Dmitry Koval) |
| Дмитрий Ячник (Dzmitry Jachnik) |
| Доминик Девьен (Dominique Devienne) |
| Донмин Лю (Dongming Liu) |
| Дрю Каллахан (Drew Callahan) |
| Дрю Кимбалл (Drew Kimball) |
| Дунхан Линь (Donghang Lin) |
| Дэвид Дж. Джонстон (David G. Johnston) |
| Дэвид Кристенсен (David Christensen) |
| Дэвид Кук (David Cook) |
| Дэвид Перес (David Perez) |
| Дэвид Роули (David Rowley) |
| Дэвид Стил (David Steele) |
| Дэвид Уилер (David Wheeler) |
| Дэвид Хиллман (David Hillman) |
| Дэвид Чжан (David Zhang) |
| Евгений Коньков (Eugen Konkov) |
| Евгений Морозов (Evgeny Morozov) |
| Егор Рогов (Egor Rogov) |
| Егор Чиндяскин (Egor Chindyaskin) |
| Егор Юзефович (Yahor Yuzefovich) |
| Екатерина Кирьянова (Ekaterina Kiryanova) |
| Елена Индрупская (Elena Indrupskaya) |
| Ерки Еэссаар (Erki Eessaar) |
| Жак Комбринк (Jacques Combrink) |
| Жиль Даролд (Gilles Darold) |
| Жиль Парк (Gilles Parc) |
| Жуй Жао (Rui Zhao) |
| Жюльен Руо (Julien Rouhaud) |
| Зубейр Эрилмаз (Zubeyr Eryilmaz) |
| Ив Колен (Yves Colin) |
| Иван Картышов (Ivan Kartyshov) |
| Иван Коломбет (Ivan Kolombet) |
| Иван Лазарев (Ivan Lazarev) |
| Иван Панченко (Ivan Panchenko) |
| Иван Трофимов (Ivan Trofimov) |
| Израэл Барт (Israel Barth Rubio) |
| Илья Ненашев (Ilya Nenashev) |
| Итан Мерц (Ethan Mertz) |
| Иэн Барвик (Ian Barwick) |
| Йелте Феннема-Нио (Jelte Fennema-Nio) |
| Кайдо Вайкла (Kaido Vaikla) |
| Камбам Винай (Kambam Vinay) |
| Карен Таларико (Karen Talarico) |
| Карина Лицкевич (Karina Litskevich) |
| Карл О. Пинц (Karl O. Pinc) |
| Кашиф Зишан (Kashif Zeeshan) |
| Квинь Тран (Quynh Tran) |
| Ким Йохан Андерссон (Kim Johan Andersson) |
| Кирилл Решке (Kirill Reshke) |
| Кирк Волак (Kirk Wolak) |
| Кирк Паркер (Kirk Parker) |
| Кисун Квон (Kisoon Kwon) |
| Клаудио Фрейре (Claudio Freire) |
| Колин Кейн (Colin Caine) |
| Конг Ман (Kong Man) |
| Константин Книжник (Konstantin Knizhnik) |
| Кори Хинкер (Corey Huinker) |
| Кохэй КайГай (Kohei KaiGai) |
| Кохэй Суту (Kouhei Sutou) |
| Коэн Де Груте (Koen De Groote) |
| Крис Трэверс (Chris Travers) |
| Кристиан Маурер (Christian Maurer) |
| Кристиан Сторк (Christian Stork) |
| Кристоф Берг (Christoph Berg) |
| Кристоф Куртуа (Christophe Courtois) |
| Кристоф Хейсс (Christoph Heiss) |
| Кристофер Клайн (Christopher Kline) |
| Кришнакумар Р (Krishnakumar R) |
| Кунтал Гхош (Kuntal Ghosh) |
| Курт Коловсон (Curt Kolovson) |
| Курт Реккс (Kurt Roeckx) |
| Кэмерон Фогт (Cameron Vogt) |
| Кэри Хуан (Cary Huang) |
| Кётаро Хоригути (Kyotaro Horiguchi) |
| Лан Лю (Lang Liu) |
| Ларс Канис (Lars Kanis) |
| Лауренц Альбе (Laurenz Albe) |
| Лаури Лаанметс (Lauri Laanmets) |
| Легс Мэншн (Legs Mansion) |
| Ли Дон Ук (Lee Dong Wook) |
| Лукас Фиттл (Lukas Fittl) |
| Магнус Хагандер (Magnus Hagander) |
| Майквел Грасси (Maiquel Grassi) |
| Майкл Бондаренко (Michael Bondarenko) |
| Майкл Ван (Michael Wang) |
| Максим Богук (Maxim Boguk) |
| Максим Буайе (Maxime Boyer) |
| Максим Орлов (Maxim Orlov) |
| Максим Яблоков (Maxim Yablokov) |
| Манос Эммануилидис (Manos Emmanouilidis) |
| Мариан Круцина (Marian Krucina) |
| Марина Полякова (Marina Polyakova) |
| Марк Гертин (Mark Guertin) |
| Марк Дилгер (Mark Dilger) |
| Марк Слоан (Mark Sloan) |
| Маркос Пегораро (Marcos Pegoraro) |
| Маркус Винанд (Markus Winand) |
| Марлин Рейтерер (Marlene Reiterer) |
| Марсель Хофштеттер (Marcel Hofstetter) |
| Мартин Маркес (Martín Marqués) |
| Мартин Нэш (Martin Nash) |
| Мартин Шлоссарек (Martin Schlossarek) |
| Масаки Кувамура (Masaki Kuwamura) |
| Масао Фудзии (Masao Fujii) |
| Масахико Савада (Masahiko Sawada) |
| Масахиро Икеда (Masahiro Ikeda) |
| Матеус Алькантара (Matheus Alcantara) |
| Матс Киндаль (Mats Kindahl) |
| Маттиас Кун (Matthias Kuhn) |
| Маттиас ван де Меент (Matthias van de Meent) |
| Махендракар Шринивасарао (Mahendrakar Srinivasarao) |
| Мейсон Шарп (Mason Sharp) |
| Мелани Плейгман (Melanie Plageman) |
| Мелих Мутлу (Melih Mutlu) |
| Мерлин Монкьюр (Merlin Moncure) |
| Мика Гейт (Micah Gate) |
| Микаэль Пакье (Michael Paquier) |
| Мингли Чжан (Mingli Zhang) |
| Мирослав Бендик (Miroslav Bendik) |
| Михаил Грибков (Mikhail Gribkov) |
| Михаил Жилин (Michael Zhilin) |
| Михаил Николаев (Michail Nikolaev) |
| Михал Бартак (Michal Bartak) |
| Михал Клечек (Michal Kleczek) |
| Михаэль Банк (Michael Banck) |
| Моааз Ассали (Moaaz Assali) |
| Мураликришна Бандару (Muralikrishna Bandaru) |
| Назир Билал Явуз (Nazir Bilal Yavuz) |
| Натан Боссарт (Nathan Bossart) |
| Нгиги Вайтака (Ngigi Waithaka) |
| Никита Глухов (Nikita Glukhov) |
| Никита Калинин (Nikita Kalinin) |
| Никита Малахов (Nikita Malakhov) |
| Николай Самохвалов (Nikolay Samokhvalov) |
| Николай Шаплов (Nikolay Shaplov) |
| Никхил Бенеш (Nikhil Benesch) |
| Нил Тиффин (Neil Tiffin) |
| Нитин Ядав (Nitin Jadhav) |
| Нихил Радж (Nikhil Raj) |
| Ниша Мунд (Nisha Moond) |
| Нишант Шарма (Nishant Sharma) |
| Ной Миш (Noah Misch) |
| Нориёси Синода (Noriyoshi Shinoda) |
| Оле Педер Брандцег (Ole Peder Brandtzæg) |
| Олег Бартунов (Oleg Bartunov) |
| Олег Самойлов (Olleg Samoylov) |
| Олег Сибиряков (Oleg Sibiryakov) |
| Олег Целебровский (Oleg Tselebrovskiy) |
| Ондер Каладжи (Onder Kalaci) |
| Ондрей Навратил (Ondrej Navratil) |
| Пабло Харо (Pablo Kharo) |
| Павел Борисов (Pavel Borisov) |
| Павел Кулаков (Pavel Kulakov) |
| Павел Лузанов (Pavel Luzanov) |
| Павел Стехуле (Pavel Stehule) |
| Павло Голуб (Pavlo Golub) |
| Палак Чатурведи (Palak Chaturvedi) |
| Панделис Теодосиу (Pantelis Theodosiou) |
| Педро Гальегос (Pedro Gallegos) |
| Пит Сторер (Pete Storer) |
| Питер Гейган (Peter Geoghegan) |
| Питер Смит (Peter Smith) |
| Питер Эйзентраут (Peter Eisentraut) |
| Пол Амонсон (Paul Amonson) |
| Пол Юнгвирт (Paul Jungwirth) |
| Пшемыслав Штох (Przemyslaw Sztoch) |
| Пьер Дюкроке (Pierre Ducroquet) |
| Пьер Фортен (Pierre Fortin) |
| Рагхувир Девулапалли (Raghuveer Devulapalli) |
| Райан Макгвайр (Rian McGuire) |
| Ранье Вилела (Ranier Vilela) |
| Рид Томпсон (Reid Thompson) |
| Ридван Коркмаз (Ridvan Korkmaz) |
| Ричард Весли (Richard Vesely) |
| Ричард Гуо (Richard Guo) |
| Роберт Скотт (Robert Scott) |
| Роберт Трит (Robert Treat) |
| Роберт Хаас (Robert Haas) |
| Роберто Мелло (Roberto Mello) |
| Робинс Таракан (Robins Tharakan) |
| Роман Лозко (Roman Lozko) |
| Ронан Данклау (Ronan Dunklau) |
| Рё Мацумура (Ryo Matsumura) |
| Рёга Йошида (Ryoga Yoshida) |
| Саймон Риггс (Simon Riggs) |
| Сами Имсейх (Sami Imseih) |
| Самир Кумар (Sameer Kumar) |
| Самуэль Дюссо (Samuel Dussault) |
| Санджай Минни (Sanjay Minni) |
| Сатору Коидзуми (Satoru Koizumi) |
| Сванте Рихтер (Svante Richter) |
| Светлана Деревянко (Svetlana Derevyanko) |
| Себастьян Скалаки (Sebastian Skalacki) |
| Седрик Вильмен (Cédric Villemain) |
| Сергей Глухов (Sergei Glukhov) |
| Сергей Корнилов (Sergei Kornilov) |
| Сергей Прохоренко (Sergey Prokhorenko) |
| Сергей Саргсян (Sergey Sargsyan) |
| Сергей Шиндерук (Sergey Shinderuk) |
| Сильвен Франдез (Sylvain Frandaz) |
| Син Го (Xing Guo) |
| Синъя Като (Shinya Kato) |
| Соумйадип Чакраборти (Soumyadeep Chakraborty) |
| Степан Неретин (Stepan Neretin) |
| Степан Руц (Stepan Rutz) |
| Стефан Ташуар (Stephane Tachoires) |
| Стефан Шильдкнехт (Stéphane Schildknecht) |
| Стив Аткинс (Steve Atkins) |
| Стив Чавес (Steve Chavez) |
| Стивен Фрост (Stephen Frost) |
| Стэн Ху (Stan Hu) |
| Сурадж Хамкар (Suraj Khamkar) |
| Сурадж Хараге (Suraj Kharage) |
| Сюйдун Ян (Xudong Yang) |
| Сян Лю (Xiang Liu) |
| Сяожань Ван (Xiaoran Wang) |
| Такаюки Цунакава (Takayuki Tsunakawa) |
| Тацуо Исии (Tatsuo Ishii) |
| Тацуро Ямада (Tatsuro Yamada) |
| Тендер Ван (Tender Wang) |
| Тим Кэри-Смит (Tim Carey-Smith) |
| Тим Нидэм (Tim Needham) |
| Тим Палмер (Tim Palmer) |
| Тобиас Бусман (Tobias Bussmann) |
| Том Браун (Thom Brown) |
| Том Лейн (Tom Lane) |
| Томас Манро (Thomas Munro) |
| Томаш Вондра (Tomas Vondra) |
| Томми Павличек (Tommy Pavlicek) |
| Томонари Кацумата (Tomonari Katsumata) |
| Тристан Партин (Tristan Partin) |
| Тристан Рааб (Tristen Raab) |
| Тунг Нгуен (Tung Nguyen) |
| Уве Биндер (Uwe Binder) |
| Умайр Шахид (Umair Shahid) |
| Фабрицио де Ройес Мелло (Fabrízio de Royes Mello) |
| Фабьен Коэльо (Fabien Coelho) |
| Фаер Эмералд (Fire Emerald) |
| Фариас де Оливейра (Farias de Oliveira) |
| Фелипе Поззер (Feliphe Pozzer) |
| Филип Уорнер (Philip Warner) |
| Филипп Сальвисберг (Philipp Salvisberg) |
| Флавьен Гюдез (Flavien Guedez) |
| Флорис Ван Ни (Floris Van Nee) |
| Франк Штрайциг (Frank Streitzig) |
| Франческо Деграсси (Francesco Degrassi) |
| Фёдор Сигаев (Teodor Sigaev) |
| Хаджиме Мацунага (Hajime Matsunaga) |
| Хайато Курода (Hayato Kuroda) |
| Хайвел Карвер (Hywel Carver) |
| Хайин Тан (Haiying Tang) |
| Хайме Казанова (Jaime Casanova) |
| Хал Такахара (Hal Takahara) |
| Ханефи Ональди (Hanefi Onaldi) |
| Ханну Кросинг (Hannu Krosing) |
| Ханс Бушман (Hans Buschmann) |
| Хао Ву (Hao Wu) |
| Хао Чжан (Hao Zhang) |
| Хейкки Линнакангас (Heikki Linnakangas) |
| Хемант Сандрана (Hemanth Sandrana) |
| Химаншу Упадхьяя (Himanshu Upadhyaya) |
| Хината Мицуру (Mitsuru Hinata) |
| Хиронобу Судзуки (Hironobu Suzuki) |
| Хольгер Райзе (Holger Reise) |
| Хорди Гутьеррес (Jordi Gutiérrez) |
| Хорст Рейтерер (Horst Reiterer) |
| Хоу Чжицзе (Hou Zhijie) |
| Хуберт Любачевски (Hubert Lubaczewski) |
| Хунсюй Ма (Hongxu Ma) |
| Хунъюй Сонг (Hongyu Song) |
| Цзинсянь Ли (Jingxian Li) |
| Цзинтан Чжан (Jingtang Zhang) |
| Цзинчжоу Фу (Jingzhou Fu) |
| Цзумин Цзян (Zuming Jiang) |
| Цзюньван Жао (Junwang Zhao) |
| Цзянь Гуо (Jian Guo) |
| Цзянь Хи (Jian He) |
| Цюань Цзунлян (Quan Zongliang) |
| Чанхун Фей (Changhong Fei) |
| Чепмен Флэк (Chapman Flack) |
| Чжихун Юй (Zhihong Yu) |
| Чэнси Сунь (Chengxi Sun) |
| Шанталь Келлер (Chantal Keller) |
| Шаочжун Ши (Shaozhong Shi) |
| Швета Малик (Shveta Malik) |
| Шихао Чжун (Shihao Zhong) |
| Шлок Кьял (Shlok Kyal) |
| Шон Томас (Shaun Thomas) |
| Шраван Велагандула (Sravan Velagandula) |
| Шрути Говда (Shruthi Gowda) |
| Шубхам Ханна (Shubham Khanna) |
| Шулинь Чжоу (Shulin Zhou) |
| Шэй Роджански (Shay Rojansky) |
| Эван Макбет (Evan Macbeth) |
| Эйлер Тавейра (Euler Taveira) |
| Элизабет Кристенсен (Elizabeth Christensen) |
| Эмре Хасегели (Emre Hasegeli) |
| Энди Фан (Andy Fan) |
| Эндрю Алсуп (Andrew Alsup) |
| Эндрю Аткинсон (Andrew Atkinson) |
| Эндрю Дунстан (Andrew Dunstan) |
| Эндрю Кейн (Andrew Kane) |
| Энтони Сюй (Anthony Hsu) |
| Эрик Винхольд (Erik Wienhold) |
| Эрик Кир (Eric Cyr) |
| Эрик Мутта (Eric Mutta) |
| Эрик Радман (Eric Radman) |
| Эрик Ридж (Eric Ridge) |
| Эрик Рижкерс (Erik Rijkers) |
| Эцуро Фудзита (Etsuro Fujita) |
| Юго Нагата (Yugo Nagata) |
| Юйхан Цю (Yuhang Qiu) |
| Юки Сэйно (Yuki Seino) |
| Юки Фудзи (Yuuki Fujii) |
| Юн Ли (Yong Li) |
| Юнтао Хуан (Yongtao Huang) |
| Юрий Рашковский (Yurii Rashkovskii) |
| Юрий Соколов (Yura Sokolov) |
| Юя Ватари (Yuya Watari) |
| Якуб Вартак (Jakub Wartak) |
| Ян Ильясов (Ian Ilyasov) |
| Яни Рахкола (Jani Rahkola) |
| Япинь Ли (Japin Li) |
| Ярослав Сабуров (Yaroslav Saburov) |
| Яцзюнь Ху (Yajun Hu) |
E.22. Release 17 #
Release date: 2024-09-26
E.22.1. Overview #
PostgreSQL 17 contains many new features and enhancements, including:
New memory management system for
VACUUM, which reduces memory consumption and can improve overall vacuuming performance.New SQL/JSON capabilities, including constructors, identity functions, and the
JSON_TABLE()function, which converts JSON data into a table representation.Various query performance improvements, including for sequential reads using streaming I/O, write throughput under high concurrency, and searches over multiple values in a btree index.
Logical replication enhancements, including:
Failover control
pg_createsubscriber, a utility that creates logical replicas from physical standbys
pg_upgrade now preserves logical replication slots on publishers and full subscription state on subscribers. This will allow upgrades to future major versions to continue logical replication without requiring copy to resynchronize.
New client-side connection option,
sslnegotiation=direct, that performs a direct TLS handshake to avoid a round-trip negotiation.pg_basebackup now supports incremental backup.
COPYadds a new option,ON_ERROR ignore, that allows a copy operation to continue in the event of an error.
The above items and other new features of PostgreSQL 17 are explained in more detail in the sections below.
E.22.2. Migration to Version 17 #
A dump/restore using pg_dumpall or use of pg_upgrade or logical replication is required for those wishing to migrate data from any previous release. See Section 18.6 for general information on migrating to new major releases.
Version 17 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:
Change functions to use a safe search_path during maintenance operations (Jeff Davis) § §
This prevents maintenance operations (
ANALYZE,CLUSTER,CREATE INDEX,CREATE MATERIALIZED VIEW,REFRESH MATERIALIZED VIEW,REINDEX, orVACUUM) from performing unsafe access. Functions used by expression indexes and materialized views that need to reference non-default schemas must specify a search path during function creation.Restrict
agoto only appear at the end inintervalvalues (Joseph Koshakow) § §Also, prevent empty interval units from appearing multiple times.
Remove server variable old_snapshot_threshold (Thomas Munro) §
This variable allowed vacuum to remove rows that potentially could be still visible to running transactions, causing "snapshot too old" errors later if accessed. This feature might be re-added to PostgreSQL later if an improved implementation is found.
Change
SET SESSION AUTHORIZATIONhandling of the initial session user's superuser status (Joseph Koshakow) §The new behavior is based on the session user's superuser status at the time the
SET SESSION AUTHORIZATIONcommand is issued, rather than their superuser status at connection time.Remove feature which simulated per-database users (Nathan Bossart) §
The feature,
db_user_namespace, was rarely used.Remove adminpack contrib extension (Daniel Gustafsson) §
This was used by now end-of-life pgAdmin III.
Remove wal_sync_method value
fsync_writethroughon Windows (Thomas Munro) §This value was the same as
fsyncon Windows.Change file boundary handling of two WAL file name functions (Kyotaro Horiguchi, Andres Freund, Bruce Momjian) §
The functions
pg_walfile_name()andpg_walfile_name_offset()used to report the previous LSN segment number when the LSN was on a file segment boundary; it now returns the current LSN segment.Remove server variable
trace_recovery_messagessince it is no longer needed (Bharath Rupireddy) §Remove information schema column
element_types.domain_default(Peter Eisentraut) §Change pgrowlocks lock mode output labels (Bruce Momjian) §
Remove
buffers_backendandbuffers_backend_fsyncfrompg_stat_bgwriter(Bharath Rupireddy) §These fields are considered redundant to similar columns in
pg_stat_io.Rename I/O block read/write timing statistics columns of pg_stat_statements (Nazir Bilal Yavuz) §
This renames
blk_read_timetoshared_blk_read_time, andblk_write_timetoshared_blk_write_time.Change
pg_attribute.attstattargetandpg_statistic_ext.stxstattargetto represent the default statistics target asNULL(Peter Eisentraut) § §Rename
pg_collation.colliculocaletocolllocaleandpg_database.daticulocaletodatlocale(Jeff Davis) §Rename
pg_stat_progress_vacuumcolumnmax_dead_tuplestomax_dead_tuple_bytes, renamenum_dead_tuplestonum_dead_item_ids, and adddead_tuple_bytes(Masahiko Sawada) § §Rename SLRU columns in system view
pg_stat_slru(Alvaro Herrera) §The column names accepted by
pg_stat_reset_slru()are also changed.
E.22.3. Changes #
Below you will find a detailed account of the changes between PostgreSQL 17 and the previous major release.
E.22.3.1. Server #
E.22.3.1.1. Optimizer #
Allow the optimizer to improve CTE plans by considering the statistics and sort order of columns referenced in earlier row output clauses (Jian Guo, Richard Guo, Tom Lane) § §
Improve optimization of
IS NOT NULLandIS NULLquery restrictions (David Rowley, Richard Guo, Andy Fan) § §Remove
IS NOT NULLrestrictions from queries onNOT NULLcolumns and eliminate scans onNOT NULLcolumns ifIS NULLis specified.Allow partition pruning on boolean columns on
IS [NOT] UNKNOWNconditionals (David Rowley) §Improve optimization of range values when using containment operators <@ and @> (Kim Johan Andersson, Jian He) §
Allow correlated
INsubqueries to be transformed into joins (Andy Fan, Tom Lane) §Improve optimization of the
LIMITclause on partitioned tables, inheritance parents, andUNION ALLqueries (Andy Fan, David Rowley) §Allow query nodes to be run in parallel in more cases (Tom Lane) §
Allow
GROUP BYcolumns to be internally ordered to matchORDER BY(Andrei Lepikhov, Teodor Sigaev) §This can be disabled using server variable enable_group_by_reordering.
Allow
UNION(withoutALL) to use MergeAppend (David Rowley) §Fix MergeAppend plans to more accurately compute the number of rows that need to be sorted (Alexander Kuzmenkov) §
Allow GiST and SP-GiST indexes to be part of incremental sorts (Miroslav Bendik) §
This is particularly useful for
ORDER BYclauses where the first column has a GiST and SP-GiST index, and other columns do not.Add columns to
pg_statsto report range-type histogram information (Egor Rogov, Soumyadeep Chakraborty) §
E.22.3.1.2. Indexes #
E.22.3.1.3. General Performance #
Allow vacuum to more efficiently remove and freeze tuples (Melanie Plageman, Heikki Linnakangas) §
WAL traffic caused by vacuum is also more compact.
Allow vacuum to more efficiently store tuple references (Masahiko Sawada, John Naylor) § § § §
Additionally, vacuum is no longer silently limited to one gigabyte of memory when maintenance_work_mem or autovacuum_work_mem are higher.
Optimize vacuuming of relations with no indexes (Melanie Plageman) §
Increase default vacuum_buffer_usage_limit to 2MB (Thomas Munro) §
Improve performance when checking roles with many memberships (Nathan Bossart) §
Improve performance of heavily-contended WAL writes (Bharath Rupireddy) §
Improve performance when transferring large blocks of data to a client (Melih Mutlu) §
Allow the grouping of file system reads with the new system variable io_combine_limit (Thomas Munro, Andres Freund, Melanie Plageman, Nazir Bilal Yavuz) § § §
E.22.3.1.4. Monitoring #
Create system view
pg_stat_checkpointer(Bharath Rupireddy, Anton A. Melnikov, Alexander Korotkov) § § §Relevant columns have been removed from
pg_stat_bgwriterand added to this new system view.Improve control over resetting statistics (Atsushi Torikoshi, Bharath Rupireddy) § § §
Allow
pg_stat_reset_shared()(with no arguments) and pg_stat_reset_shared(NULL) to reset all shared statistics. Allow pg_stat_reset_shared('slru') andpg_stat_reset_slru()(with no arguments) to reset SLRU statistics, which was already possible with pg_stat_reset_slru(NULL).Add log messages related to WAL recovery from backups (Andres Freund) §
Add log_connections log line for
trustconnections (Jacob Champion) §Add log message to report walsender acquisition and release of replication slots (Bharath Rupireddy) §
This is enabled by the server variable log_replication_commands.
Add system view
pg_wait_eventsthat reports wait event types (Bertrand Drouvot) §This is useful for adding descriptions to wait events reported in
pg_stat_activity.Add wait events for checkpoint delays (Thomas Munro) §
Allow vacuum to report the progress of index processing (Sami Imseih) §
This appears in system view
pg_stat_progress_vacuumcolumnsindexes_totalandindexes_processed.
E.22.3.1.5. Privileges #
Allow granting the right to perform maintenance operations (Nathan Bossart) §
The permission can be granted on a per-table basis using the
MAINTAINprivilege and on a per-role basis via thepg_maintainpredefined role. Permitted operations areVACUUM,ANALYZE,REINDEX,REFRESH MATERIALIZED VIEW,CLUSTER, andLOCK TABLE.Allow roles with
pg_monitormembership to executepg_current_logfile()(Pavlo Golub, Nathan Bossart) §
E.22.3.1.6. Server Configuration #
Add system variable allow_alter_system to disallow
ALTER SYSTEM(Jelte Fennema-Nio, Gabriele Bartolini) §Allow
ALTER SYSTEMto set unrecognized custom server variables (Tom Lane) §This is also possible with
GRANT ON PARAMETER.Add server variable transaction_timeout to restrict the duration of transactions (Andrey Borodin, Japin Li, Junwang Zhao, Alexander Korotkov) § § §
Add a builtin platform-independent collation provider (Jeff Davis) § § § §
This supports
CandC.UTF-8collations.Add server variable huge_pages_status to report the use of huge pages by Postgres (Justin Pryzby) §
This is useful when huge_pages is set to
try.Add server variable to disable event triggers (Daniel Gustafsson) §
The setting, event_triggers, allows for the temporary disabling of event triggers for debugging.
Allow the SLRU cache sizes to be configured (Andrey Borodin, Dilip Kumar, Alvaro Herrera) §
The new server variables are commit_timestamp_buffers, multixact_member_buffers, multixact_offset_buffers, notify_buffers, serializable_buffers, subtransaction_buffers, and transaction_buffers. commit_timestamp_buffers, transaction_buffers, and subtransaction_buffers scale up automatically with shared_buffers.
E.22.3.1.7. Streaming Replication and Recovery #
Add support for incremental file system backup (Robert Haas, Jakub Wartak, Tomas Vondra) § §
Incremental backups can be created using pg_basebackup's new
--incrementaloption. The new application pg_combinebackup allows manipulation of base and incremental file system backups.Allow the creation of WAL summarization files (Robert Haas, Nathan Bossart, Hubert Depesz Lubaczewski) § § § §
These files record the block numbers that have changed within an LSN range and are useful for incremental file system backups. This is controlled by the server variables summarize_wal and wal_summary_keep_time, and introspected with
pg_available_wal_summaries(),pg_wal_summary_contents(), andpg_get_wal_summarizer_state().Add the system identifier to file system backup manifest files (Amul Sul) §
This helps detect invalid WAL usage.
Allow connection string value
dbnameto be written when pg_basebackup writes connection information topostgresql.auto.conf(Vignesh C, Hayato Kuroda) §Add column
pg_replication_slots.invalidation_reasonto report the reason for invalid slots (Shveta Malik, Bharath Rupireddy) § §Add column
pg_replication_slots.inactive_sinceto report slot inactivity duration (Bharath Rupireddy) § § §Add function
pg_sync_replication_slots()to synchronize logical replication slots (Hou Zhijie, Shveta Malik, Ajin Cherian, Peter Eisentraut) § §Add the
failoverproperty to the replication protocol (Hou Zhijie, Shveta Malik) §
E.22.3.1.8. Logical Replication #
Add application pg_createsubscriber to create a logical replica from a physical standby server (Euler Taveira) §
Have pg_upgrade migrate valid logical slots and subscriptions (Hayato Kuroda, Hou Zhijie, Vignesh C, Julien Rouhaud, Shlok Kyal) § §
This allows logical replication to continue quickly after the upgrade. This only works for old PostgreSQL clusters that are version 17 or later.
Enable the failover of logical slots (Hou Zhijie, Shveta Malik, Ajin Cherian) §
This is controlled by an optional fifth argument to
pg_create_logical_replication_slot().Add server variable sync_replication_slots to enable failover logical slot synchronization (Shveta Malik, Hou Zhijie, Peter Smith) § §
Add logical replication failover control to
CREATE/ALTER SUBSCRIPTION(Shveta Malik, Hou Zhijie, Ajin Cherian) § §Allow the application of logical replication changes to use hash indexes on the subscriber (Hayato Kuroda) §
Previously only btree indexes could be used for this purpose.
Improve logical decoding performance in cases where there are many subtransactions (Masahiko Sawada) §
Restart apply workers if subscription owner's superuser privileges are revoked (Vignesh C) §
This forces reauthentication.
Add
flushoption topg_logical_emit_message()(Michael Paquier) §This makes the message durable.
Allow specification of physical standbys that must be synchronized before they are visible to subscribers (Hou Zhijie, Shveta Malik) § §
The new server variable is synchronized_standby_slots.
Add worker type column to
pg_stat_subscription(Peter Smith) §
E.22.3.2. Utility Commands #
Add new
COPYoptionON_ERROR ignoreto discard error rows (Damir Belyalov, Atsushi Torikoshi, Alex Shulgin, Jian He, Yugo Nagata) § § § §The default behavior is
ON_ERROR stop.Add new
COPYoptionLOG_VERBOSITYwhich reportsCOPY FROMignored error rows (Bharath Rupireddy) §Allow
COPY FROMto report the number of skipped rows during processing (Atsushi Torikoshi) §This appears in system view column
pg_stat_progress_copy.tuples_skipped.In
COPY FROM, allow easy specification that all columns should be forced null or not null (Zhang Mingli) §Allow partitioned tables to have identity columns (Ashutosh Bapat) §
Allow exclusion constraints on partitioned tables (Paul A. Jungwirth) §
As long as exclusion constraints compare partition key columns for equality, other columns can use exclusion constraint-specific comparisons.
Add clearer
ALTER TABLEmethod to set a column to the default statistics target (Peter Eisentraut) §The new syntax is
ALTER TABLE ... SET STATISTICS DEFAULT; usingSET STATISTICS -1is still supported.Allow
ALTER TABLEto change a column's generation expression (Amul Sul) §The syntax is
ALTER TABLE ... ALTER COLUMN ... SET EXPRESSION.Allow specification of table access methods on partitioned tables (Justin Pryzby, Soumyadeep Chakraborty, Michael Paquier) § §
Add
DEFAULTsetting forALTER TABLE .. SET ACCESS METHOD(Michael Paquier) §Add support for event triggers that fire at connection time (Konstantin Knizhnik, Mikhail Gribkov) §
Add event trigger support for
REINDEX(Garrett Thornburg, Jian He) §Allow parenthesized syntax for
CLUSTERoptions if a table name is not specified (Nathan Bossart) §
Allow
EXPLAINto report optimizer memory usage (Ashutosh Bapat) §The option is called
MEMORY.Add
EXPLAINoptionSERIALIZEto report the cost of converting data for network transmission (Stepan Rutz, Matthias van de Meent) §Add local I/O block read/write timing statistics to
EXPLAIN'sBUFFERSoutput (Nazir Bilal Yavuz) §Improve
EXPLAIN's display of SubPlan nodes and output parameters (Tom Lane, Dean Rasheed) §Add JIT
deform_counterdetails toEXPLAIN(Dmitry Dolgov) §
E.22.3.3. Data Types #
Allow the
intervaldata type to support+/-infinityvalues (Joseph Koshakow, Jian He, Ashutosh Bapat) §Allow the use of an
ENUMadded viaALTER TYPEif the type was created in the same transaction (Tom Lane) §This was previously disallowed.
Allow
MERGEto modify updatable views (Dean Rasheed) §Add
WHEN NOT MATCHED BY SOURCEtoMERGE(Dean Rasheed) §WHEN NOT MATCHEDon target rows was already supported.Allow
MERGEto use theRETURNINGclause (Dean Rasheed) §The new
RETURNINGfunctionmerge_action()reports on the DML that generated the row.
E.22.3.5. Functions #
Add function
JSON_TABLE()to convertJSONdata to a table representation (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Jian He) § §This function can be used in the
FROMclause ofSELECTqueries as a tuple source.Add SQL/JSON constructor functions
JSON(),JSON_SCALAR(), andJSON_SERIALIZE()(Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote) §Add SQL/JSON query functions
JSON_EXISTS(),JSON_QUERY(), andJSON_VALUE()(Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Andrew Dunstan, Amit Langote, Peter Eisentraut, Jian He) § § § § §Add jsonpath methods to convert
JSONvalues to otherJSONdata types (Jeevan Chalke) §The jsonpath methods are
.bigint(),.boolean(),.date(),.decimal([precision [, scale]]),.integer(),.number(),.string(),.time(),.time_tz(),.timestamp(), and.timestamp_tz().Add
to_timestamp()time zone format specifiers (Tom Lane) §TZaccepts time zone abbreviations or numeric offsets, whileOFaccepts only numeric offsets.Allow the session time zone to be specified by
AT LOCAL(Vik Fearing) §This is useful when converting adding and removing time zones from time stamps values, rather than specifying the literal session time zone.
Add functions
uuid_extract_timestamp()anduuid_extract_version()to return UUID information (Andrey Borodin) §Add functions to generate random numbers in a specified range (Dean Rasheed) §
The functions are
random(min, max)and they take values of typeinteger,bigint, andnumeric.Add functions to convert integers to binary and octal strings (Eric Radman, Nathan Bossart) §
The functions are
to_bin()andto_oct().Add Unicode informational functions (Jeff Davis) §
Function
unicode_version()returns the Unicode version,icu_unicode_version()returns the ICU version, andunicode_assigned()returns if the characters are assigned Unicode codepoints.Add function
xmltext()to convert text to a singleXMLtext node (Jim Jones) §Add function
to_regtypemod()to return the type modifier of a type specification (David Wheeler, Erik Wienhold) §Add
pg_basetype()function to return a domain's base type (Steve Chavez) §Add function
pg_column_toast_chunk_id()to return a value's TOAST identifier (Yugo Nagata) §This returns
NULLif the value is not stored in TOAST.
Add libpq function to change role passwords (Joe Conway) §
The new function,
PQchangePassword(), hashes the new password before sending it to the server.Add libpq functions to close portals and prepared statements (Jelte Fennema-Nio) §
The functions are
PQclosePrepared(),PQclosePortal(),PQsendClosePrepared(), andPQsendClosePortal().Add libpq API which allows for blocking and non-blocking cancel requests, with encryption if already in use (Jelte Fennema-Nio) §
Previously only blocking, unencrypted cancel requests were supported.
Add libpq function
PQsocketPoll()to allow polling of network sockets (Tristan Partin, Tom Lane) § §Add libpq function
PQsendPipelineSync()to send a pipeline synchronization point (Anton Kirilov) §This is similar to
PQpipelineSync()but it does not flush to the server unless the size threshold of the output buffer is reached.Add libpq function
PQsetChunkedRowsMode()to allow retrieval of results in chunks (Daniel Vérité) §Allow TLS connections without requiring a network round-trip negotiation (Greg Stark, Heikki Linnakangas, Peter Eisentraut, Michael Paquier, Daniel Gustafsson) § § § § § § § §
This is enabled with the client-side option
sslnegotiation=direct, requires ALPN, and only works on PostgreSQL 17 and later servers.
Improve psql display of default and empty privileges (Erik Wienhold, Laurenz Albe) §
Command
\dpnow displays(none)for empty privileges; default still displays as empty.Have backslash commands honor
\pset null(Erik Wienhold, Laurenz Albe) §Previously
\pset nullwas ignored.Allow psql's
\watchto stop after a minimum number of rows returned (Greg Sabino Mullane) §The parameter is
min_rows.Allow psql connection attempts to be canceled with control-C (Tristan Partin) §
Allow psql to honor
FETCH_COUNTfor non-SELECTqueries (Daniel Vérité) §Improve psql tab completion (Dagfinn Ilmari Mannsåker, Gilles Darold, Christoph Heiss, Steve Chavez, Vignesh C, Pavel Borisov, Jian He) § § § § § § § §
E.22.3.9. Server Applications #
Add application pg_walsummary to dump WAL summary files (Robert Haas) §
Allow pg_dump's large objects to be restorable in batches (Tom Lane) §
This allows the restoration of many large objects to avoid transaction limits and to be restored in parallel.
Add pg_dump option
--exclude-extension(Ayush Vatsa) §Allow pg_dump, pg_dumpall, and pg_restore to specify include/exclude objects in a file (Pavel Stehule, Daniel Gustafsson) §
The option is called
--filter.Add the
--sync-methodparameter to several client applications (Justin Pryzby, Nathan Bossart) §The applications are initdb, pg_basebackup, pg_checksums, pg_dump, pg_rewind, and pg_upgrade.
Add pg_restore option
--transaction-sizeto allow object restores in transaction batches (Tom Lane) §This allows the performance benefits of transaction batches without the problems of excessively large transaction blocks.
Change pgbench debug mode option from
-dto--debug(Greg Sabino Mullane) §Option
-dis now used for the database name, and the new--dbnameoption can be used as well.Add pgbench option
--exit-on-abortto exit after any client aborts (Yugo Nagata) §Add pgbench command
\syncpipelineto allow sending of sync messages (Anthonin Bonnefoy) §Allow pg_archivecleanup to remove backup history files (Atsushi Torikoshi) §
The option is
--clean-backup-history.Add some long options to pg_archivecleanup (Atsushi Torikoshi) §
The long options are
--debug,--dry-run, and--strip-extension.Allow pg_basebackup and pg_receivewal to use dbname in their connection specification (Jelte Fennema-Nio) §
This is useful for connection poolers that are sensitive to the database name.
Add pg_upgrade option
--copy-file-range(Thomas Munro) §This is supported on Linux and FreeBSD.
Allow reindexdb
--indexto process indexes from different tables in parallel (Maxim Orlov, Svetlana Derevyanko, Alexander Korotkov) §Allow reindexdb, vacuumdb, and clusterdb to process objects in all databases matching a pattern (Nathan Bossart) § § §
The new option
--allcontrols this behavior.
E.22.3.10. Source Code #
Remove support for OpenSSL 1.0.1 (Michael Paquier) §
Allow tests to pass in OpenSSL FIPS mode (Peter Eisentraut) § §
Use CPU AVX-512 instructions for bit counting (Paul Amonson, Nathan Bossart, Ants Aasma) § §
Require LLVM version 10 or later (Thomas Munro) §
Use native CRC instructions on 64-bit LoongArch CPUs (Xudong Yang) §
Remove AIX support (Heikki Linnakangas) §
Remove the Microsoft Visual Studio-specific PostgreSQL build option (Michael Paquier) §
Meson is now the only available method for Visual Studio builds.
Remove configure option
--disable-thread-safety(Thomas Munro, Heikki Linnakangas) § §We now assume all supported platforms have sufficient thread support.
Remove configure option
--with-CC(Heikki Linnakangas) §Setting the
CCenvironment variable is now the only supported method for specifying the compiler.User-defined data type receive functions will no longer receive their data null-terminated (David Rowley) §
Add incremental
JSONparser for use with hugeJSONdocuments (Andrew Dunstan) §Convert top-level
READMEfile to Markdown (Nathan Bossart) §Remove no longer needed top-level
INSTALLfile (Tom Lane) §Remove make's
distprepoption (Peter Eisentraut) §Add make support for Android shared libraries (Peter Eisentraut) §
Add backend support for injection points (Michael Paquier) § § § §
This is used for server debugging and they must be enabled at server compile time.
Add dynamic shared memory registry (Nathan Bossart) §
This allows shared libraries which are not initialized at startup to coordinate dynamic shared memory access.
Fix
emit_log_hookto use the same time value as other log records for the same query (Kambam Vinay, Michael Paquier) §Improve documentation for using
jsonpathfor predicate checks (David Wheeler) §
E.22.3.11. Additional Modules #
Allow joins with non-join qualifications to be pushed down to foreign servers and custom scans (Richard Guo, Etsuro Fujita) §
Foreign data wrappers and custom scans will need to be modified to handle these cases.
Allow pushdown of
EXISTSandINsubqueries to postgres_fdw foreign servers (Alexander Pyhalov) §Increase the default foreign data wrapper tuple cost (David Rowley, Umair Shahid) § §
This value is used by the optimizer.
Allow dblink database operations to be interrupted (Noah Misch) §
Allow the creation of hash indexes on ltree columns (Tommy Pavlicek) §
This also enables hash join and hash aggregation on ltree columns.
Allow unaccent character translation rules to contain whitespace and quotes (Michael Paquier) §
The syntax for the
unaccent.rulesfile has changed.Allow amcheck to check for unique constraint violations using new option
--checkunique(Anastasia Lubennikova, Pavel Borisov, Maxim Orlov) §Allow citext tests to pass in OpenSSL FIPS mode (Peter Eisentraut) §
Allow pgcrypto tests to pass in OpenSSL FIPS mode (Peter Eisentraut) §
Allow
ALTER OPERATORto set more optimization attributes (Tommy Pavlicek) §This is useful for extensions.
Allow extensions to define custom wait events (Masahiro Ikeda) § § § §
Custom wait events have been added to postgres_fdw and dblink.
Add pg_buffercache function
pg_buffercache_evict()to allow shared buffer eviction (Palak Chaturvedi, Thomas Munro) §This is useful for testing.
E.22.3.11.1. pg_stat_statements #
Replace
CALLparameters in pg_stat_statements with placeholders (Sami Imseih) §Replace savepoint names stored in
pg_stat_statementswith placeholders (Greg Sabino Mullane) §This greatly reduces the number of entries needed to record
SAVEPOINT,RELEASE SAVEPOINT, andROLLBACK TO SAVEPOINTcommands.Replace the two-phase commit GIDs stored in
pg_stat_statementswith placeholders (Michael Paquier) §This greatly reduces the number of entries needed to record
PREPARE TRANSACTION,COMMIT PREPARED, andROLLBACK PREPARED.Track
DEALLOCATEinpg_stat_statements(Dagfinn Ilmari Mannsåker, Michael Paquier) §DEALLOCATEnames are stored inpg_stat_statementsas placeholders.Add local I/O block read/write timing statistics columns of
pg_stat_statements(Nazir Bilal Yavuz) § §The new columns are
local_blk_read_timeandlocal_blk_write_time.Add JIT deform_counter details to
pg_stat_statements(Dmitry Dolgov) §Add optional fourth argument (
minmax_only) topg_stat_statements_reset()to allow for the resetting of only min/max statistics (Andrei Zubkov) §This argument defaults to
false.Add
pg_stat_statementscolumnsstats_sinceandminmax_stats_sinceto track entry creation time and last min/max reset time (Andrei Zubkov) §
E.22.4. Acknowledgments #
The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues.
| Abhijit Menon-Sen |
| Adnan Dautovic |
| Aidar Imamov |
| Ajin Cherian |
| Akash Shankaran |
| Akshat Jaimini |
| Alaa Attya |
| Aleksander Alekseev |
| Aleksej Orlov |
| Alena Rybakina |
| Alex Hsieh |
| Alex Malek |
| Alex Shulgin |
| Alex Work |
| Alexander Korotkov |
| Alexander Kozhemyakin |
| Alexander Kuzmenkov |
| Alexander Lakhin |
| Alexander Pyhalov |
| Alexey Palazhchenko |
| Alfons Kemper |
| Álvaro Herrera |
| Amadeo Gallardo |
| Amit Kapila |
| Amit Langote |
| Amul Sul |
| Anastasia Lubennikova |
| Anatoly Zaretsky |
| Andreas Karlsson |
| Andreas Ulbrich |
| Andrei Lepikhov |
| Andrei Zubkov |
| Andres Freund |
| Andrew Alsup |
| Andrew Atkinson |
| Andrew Bille |
| Andrew Dunstan |
| Andrew Kane |
| Andrey Borodin |
| Andrey Rachitskiy |
| Andrey Sokolov |
| Andy Fan |
| Anthonin Bonnefoy |
| Anthony Hsu |
| Anton Kirilov |
| Anton Melnikov |
| Anton Voloshin |
| Antonin Houska |
| Ants Aasma |
| Antti Lampinen |
| Aramaki Zyake |
| Artem Anisimov |
| Artur Zakirov |
| Ashutosh Bapat |
| Ashutosh Sharma |
| Atsushi Torikoshi |
| Attila Gulyás |
| Ayush Tiwari |
| Ayush Vatsa |
| Bartosz Chrol |
| Benoît Ryder |
| Bernd Helmle |
| Bertrand Drouvot |
| Bharath Rupireddy |
| Bo Andreson |
| Boshomi Phenix |
| Bowen Shi |
| Boyu Yang |
| Bruce Momjian |
| Cameron Vogt |
| Cary Huang |
| Cédric Villemain |
| Changhong Fei |
| Chantal Keller |
| Chapman Flack |
| Chengxi Sun |
| Chris Travers |
| Christian Maurer |
| Christian Stork |
| Christoph Berg |
| Christoph Heiss |
| Christophe Courtois |
| Christopher Kline |
| Claudio Freire |
| Colin Caine |
| Corey Huinker |
| Curt Kolovson |
| Dag Lem |
| Dagfinn Ilmari Mannsåker |
| Damir Belyalov |
| Daniel Fredouille |
| Daniel Gustafsson |
| Daniel Shelepanov |
| Daniel Vérité |
| Daniel Westermann |
| Darren Rush |
| Dave Cramer |
| Dave Page |
| David Christensen |
| David Cook |
| David G. Johnston |
| David Geier |
| David Hillman |
| David Perez |
| David Rowley |
| David Steele |
| David Wheeler |
| David Zhang |
| Dean Rasheed |
| Denis Erokhin |
| Denis Laxalde |
| Devrim Gündüz |
| Dilip Kumar |
| Dimitrios Apostolou |
| Dmitry Dolgov |
| Dmitry Koval |
| Dmitry Vasiliev |
| Dominique Devienne |
| Dong Wook Lee |
| Donghang Lin |
| Dongming Liu |
| Drew Callahan |
| Drew Kimball |
| Dzmitry Jachnik |
| Egor Chindyaskin |
| Egor Rogov |
| Ekaterina Kiryanova |
| Elena Indrupskaya |
| Elizabeth Christensen |
| Emre Hasegeli |
| Eric Cyr |
| Eric Mutta |
| Eric Radman |
| Eric Ridge |
| Erik Rijkers |
| Erik Wienhold |
| Erki Eessaar |
| Ethan Mertz |
| Etsuro Fujita |
| Eugen Konkov |
| Euler Taveira |
| Evan Macbeth |
| Evgeny Morozov |
| Fabien Coelho |
| Fabrízio de Royes Mello |
| Farias de Oliveira |
| Feliphe Pozzer |
| Fire Emerald |
| Flavien Guedez |
| Floris Van Nee |
| Francesco Degrassi |
| Frank Streitzig |
| Gabriele Bartolini |
| Garrett Thornburg |
| Gavin Flower |
| Gavin Panella |
| Gilles Darold |
| Gilles Parc |
| Grant Gryczan |
| Greg Nancarrow |
| Greg Sabino Mullane |
| Greg Stark |
| Gurjeet Singh |
| Haiying Tang |
| Hajime Matsunaga |
| Hal Takahara |
| Hanefi Onaldi |
| Hannu Krosing |
| Hans Buschmann |
| Hao Wu |
| Hao Zhang |
| Hayato Kuroda |
| Heikki Linnakangas |
| Hemanth Sandrana |
| Himanshu Upadhyaya |
| Hironobu Suzuki |
| Holger Reise |
| Hongxu Ma |
| Hongyu Song |
| Horst Reiterer |
| Hubert Lubaczewski |
| Hywel Carver |
| Ian Barwick |
| Ian Ilyasov |
| Ilya Nenashev |
| Isaac Morland |
| Israel Barth Rubio |
| Ivan Kartyshov |
| Ivan Kolombet |
| Ivan Lazarev |
| Ivan Panchenko |
| Ivan Trofimov |
| Jacob Champion |
| Jacob Speidel |
| Jacques Combrink |
| Jaime Casanova |
| Jakub Wartak |
| James Coleman |
| James Pang |
| Jani Rahkola |
| Japin Li |
| Jeevan Chalke |
| Jeff Davis |
| Jeff Janes |
| Jelte Fennema-Nio |
| Jeremy Schneider |
| Jian Guo |
| Jian He |
| Jim Jones |
| Jim Keener |
| Jim Nasby |
| Jingtang Zhang |
| Jingxian Li |
| Jingzhou Fu |
| Joe Conway |
| Joel Jacobson |
| John Ekins |
| John Hsu |
| John Morris |
| John Naylor |
| John Russell |
| Jonathan Katz |
| Jordi Gutiérrez |
| Joseph Koshakow |
| Josh Kupershmidt |
| Joshua D. Drake |
| Joshua Uyehara |
| Jubilee Young |
| Julien Rouhaud |
| Junwang Zhao |
| Justin Pryzby |
| Kaido Vaikla |
| Kambam Vinay |
| Karen Talarico |
| Karina Litskevich |
| Karl O. Pinc |
| Kashif Zeeshan |
| Kim Johan Andersson |
| Kirill Reshke |
| Kirk Parker |
| Kirk Wolak |
| Kisoon Kwon |
| Koen De Groote |
| Kohei KaiGai |
| Kong Man |
| Konstantin Knizhnik |
| Kouhei Sutou |
| Krishnakumar R |
| Kuntal Ghosh |
| Kurt Roeckx |
| Kyotaro Horiguchi |
| Lang Liu |
| Lars Kanis |
| Laurenz Albe |
| Lauri Laanmets |
| Legs Mansion |
| Lukas Fittl |
| Magnus Hagander |
| Mahendrakar Srinivasarao |
| Maiquel Grassi |
| Manos Emmanouilidis |
| Marcel Hofstetter |
| Marcos Pegoraro |
| Marian Krucina |
| Marina Polyakova |
| Mark Dilger |
| Mark Guertin |
| Mark Sloan |
| Markus Winand |
| Marlene Reiterer |
| Martín Marqués |
| Martin Nash |
| Martin Schlossarek |
| Masahiko Sawada |
| Masahiro Ikeda |
| Masaki Kuwamura |
| Masao Fujii |
| Mason Sharp |
| Matheus Alcantara |
| Mats Kindahl |
| Matthias Kuhn |
| Matthias van de Meent |
| Maxim Boguk |
| Maxim Orlov |
| Maxim Yablokov |
| Maxime Boyer |
| Melanie Plageman |
| Melih Mutlu |
| Merlin Moncure |
| Micah Gate |
| Michael Banck |
| Michael Bondarenko |
| Michael Paquier |
| Michael Wang |
| Michael Zhilin |
| Michail Nikolaev |
| Michal Bartak |
| Michal Kleczek |
| Mikhail Gribkov |
| Mingli Zhang |
| Miroslav Bendik |
| Mitsuru Hinata |
| Moaaz Assali |
| Muralikrishna Bandaru |
| Nathan Bossart |
| Nazir Bilal Yavuz |
| Neil Tiffin |
| Ngigi Waithaka |
| Nikhil Benesch |
| Nikhil Raj |
| Nikita Glukhov |
| Nikita Kalinin |
| Nikita Malakhov |
| Nikolay Samokhvalov |
| Nikolay Shaplov |
| Nisha Moond |
| Nishant Sharma |
| Nitin Jadhav |
| Noah Misch |
| Noriyoshi Shinoda |
| Ole Peder Brandtzæg |
| Oleg Bartunov |
| Oleg Sibiryakov |
| Oleg Tselebrovskiy |
| Olleg Samoylov |
| Onder Kalaci |
| Ondrej Navratil |
| Pablo Kharo |
| Palak Chaturvedi |
| Pantelis Theodosiou |
| Paul Amonson |
| Paul Jungwirth |
| Pavel Borisov |
| Pavel Kulakov |
| Pavel Luzanov |
| Pavel Stehule |
| Pavlo Golub |
| Pedro Gallegos |
| Pete Storer |
| Peter Eisentraut |
| Peter Geoghegan |
| Peter Smith |
| Philip Warner |
| Philipp Salvisberg |
| Pierre Ducroquet |
| Pierre Fortin |
| Przemyslaw Sztoch |
| Quynh Tran |
| Raghuveer Devulapalli |
| Ranier Vilela |
| Reid Thompson |
| Rian McGuire |
| Richard Guo |
| Richard Vesely |
| Ridvan Korkmaz |
| Robert Haas |
| Robert Scott |
| Robert Treat |
| Roberto Mello |
| Robins Tharakan |
| Roman Lozko |
| Ronan Dunklau |
| Rui Zhao |
| Ryo Matsumura |
| Ryoga Yoshida |
| Sameer Kumar |
| Sami Imseih |
| Samuel Dussault |
| Sanjay Minni |
| Satoru Koizumi |
| Sebastian Skalacki |
| Sergei Glukhov |
| Sergei Kornilov |
| Sergey Prokhorenko |
| Sergey Sargsyan |
| Sergey Shinderuk |
| Shaozhong Shi |
| Shaun Thomas |
| Shay Rojansky |
| Shihao Zhong |
| Shinya Kato |
| Shlok Kyal |
| Shruthi Gowda |
| Shubham Khanna |
| Shulin Zhou |
| Shveta Malik |
| Simon Riggs |
| Soumyadeep Chakraborty |
| Sravan Velagandula |
| Stan Hu |
| Stepan Neretin |
| Stepan Rutz |
| Stéphane Schildknecht |
| Stephane Tachoires |
| Stephen Frost |
| Steve Atkins |
| Steve Chavez |
| Suraj Khamkar |
| Suraj Kharage |
| Svante Richter |
| Svetlana Derevyanko |
| Sylvain Frandaz |
| Takayuki Tsunakawa |
| Tatsuo Ishii |
| Tatsuro Yamada |
| Tender Wang |
| Teodor Sigaev |
| Thom Brown |
| Thomas Munro |
| Tim Carey-Smith |
| Tim Needham |
| Tim Palmer |
| Tobias Bussmann |
| Tom Lane |
| Tomas Vondra |
| Tommy Pavlicek |
| Tomonari Katsumata |
| Tristan Partin |
| Tristen Raab |
| Tung Nguyen |
| Umair Shahid |
| Uwe Binder |
| Valerie Woolard |
| Vallimaharajan G |
| Vasya Boytsov |
| Victor Wagner |
| Victor Yegorov |
| Victoria Shepard |
| Vidushi Gupta |
| Vignesh C |
| Vik Fearing |
| Viktor Leis |
| Vinayak Pokale |
| Vitaly Burovoy |
| Vojtech Benes |
| Wei Sun |
| Wei Wang |
| Wenjiang Zhang |
| Will Mortensen |
| Willi Mann |
| Wolfgang Walther |
| Xiang Liu |
| Xiaoran Wang |
| Xing Guo |
| Xudong Yang |
| Yahor Yuzefovich |
| Yajun Hu |
| Yaroslav Saburov |
| Yong Li |
| Yongtao Huang |
| Yugo Nagata |
| Yuhang Qiu |
| Yuki Seino |
| Yura Sokolov |
| Yurii Rashkovskii |
| Yuuki Fujii |
| Yuya Watari |
| Yves Colin |
| Zhihong Yu |
| Zhijie Hou |
| Zongliang Quan |
| Zubeyr Eryilmaz |
| Zuming Jiang |