E.32. Выпуск 16 #
Дата выпуска: 2023-09-14
E.32.1. Обзор #
PostgreSQL 16 содержит много новых возможностей и улучшений, в том числе:
Возможность параллельного выполнения полных (
FULL) и правых внешних (OUTER) соединений по хешуЛогическая репликация с резервных серверов
Предоставление возможности подписчикам логической репликации применять большие транзакции параллельно
Сбор статистики ввода-вывода с использованием нового представления
pg_stat_ioДобавление функций-конструкторов и предикатов SQL/JSON
Улучшение производительности операций очистки с заморозкой
Поддержка регулярных выражений для имён пользователей и баз данных в
pg_hba.confи имён пользователей вpg_ident.conf
Предыдущие пункты и другие новые возможности PostgreSQL 16 более подробно описаны в следующих разделах.
E.32.2. Миграция на версию 16 #
Тем, кто хочет перенести данные из любой предыдущей версии, необходимо выполнить выгрузку/восстановление данных с помощью pg_dumpall либо использовать pg_upgrade или логическую репликацию. Общую информацию о переходе на более новую основную версию можно найти в Разделе 18.6.
В версии 16 реализован ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Рассмотрите следующие несовместимые аспекты:
Изменение правил определения связанных курсорных переменных PL/pgSQL (Том Лейн) §
Ранее строковое значение такой переменной должно было совпадать с именем переменной во время назначения курсора. Теперь имя назначается во время открытия курсора (
OPEN) и не совпадает с именем переменной. Чтобы восстановить прежнее поведение, назначьте требуемое имя портала курсорной переменной до выполненияOPEN.Запрет индексов
NULLS NOT DISTINCTдля первичных ключей (Даниэль Густафссон) §Отключение перестроения индексов в системных каталогах командами
REINDEX DATABASEи reindexdb (Саймон Риггс) § §Перестроить такие индексы всё же можно, используя
REINDEX SYSTEMиreindexdb --system.Усиление ограничений выражений
GENERATEDдля таблиц с наследованием и секционированных таблиц (Амит Ланготе, Том Лейн) §У столбцов родительской секционированной таблицы и дочерних секций должен быть один и тот же статус генерирования, хотя теперь фактические генерирующие выражения могут различаться.
Удаление функций
pg_get_wal_records_info_till_end_of_wal()иpg_get_wal_stats_till_end_of_wal()из pg_walinspect (Бхарат Рупиредди) §Переименование серверной переменной
force_parallel_modeвdebug_parallel_query(Дэвид Роули) § §Удаление возможности создавать представления вручную, используя правила
ON SELECT(Том Лейн) §Удаление серверной переменной
vacuum_defer_cleanup_age(Андрес Фройнд) §Эта переменная больше не нужна, поскольку добавлен параметр
hot_standby_feedbackи слоты репликации.Удаление серверной переменной
promote_trigger_file(Саймон Риггс) §Она была нужна для повышения ведомого сервера до ведущего, что сейчас можно сделать при помощи
pg_ctl promoteилиpg_promote().Возможность управлять статусом наследования по умолчанию при назначении членства в ролях с помощью
GRANT(Роберт Хаас) §Новое предложение
GRANT ... WITH INHERITпозволяет переопределить правила наследования по умолчанию. При этом допускается наследование одних ролей, но не других, поскольку статус наследования задаётся в командеGRANT. Ранее статус наследования членов определялся только атрибутом роли, а изменения статуса наследования роли влияло на всех прежних и будущих членов этой роли.Ограничение прав ролей с атрибутом
CREATEROLEи их возможности изменять другие роли (Роберт Хаас) § §Ранее роли с правом
CREATEROLEмогли изменять разные свойства обычных ролей (не суперпользователей). Теперь для изменения некоторых свойств других ролей, включая назначение членства, требуется наличие праваADMIN OPTION. Например, теперь роли с правомCREATEROLEмогут изменять атрибутыCREATEDB,REPLICATIONиBYPASSRLS, только если у них есть соответствующие права.Удаление символических ссылок на файлы postmaster (Питер Эйзентраут) §
E.32.3. Изменения #
Ниже вы найдёте подробный список изменений, произошедших между предыдущим основным выпуском и выпуском PostgreSQL 16.
E.32.3.1. Сервер #
E.32.3.1.1. Оптимизатор #
Возможность выполнения инкрементальной сортировки в различных случаях, в том числе с
DISTINCT(Дэвид Роули) § §Возможность использования предварительно отсортированных данных в агрегатных функциях с
ORDER BYилиDISTINCT(Дэвид Роули) § § §Отключить данную функциональность можно с помощью новой серверной переменной
enable_presorted_aggregate.Возможности мемоизации поверх
UNION ALL(Ричард Гуо) §Выполнение антисоединений с не NULL в качестве внутреннего отношения (Ричард Гуо) §
Возможность параллельного выполнения полных (
FULL) и правых внешних (OUTER) соединений по хешу (Мелани Плейгман, Томас Манро) §Повышение точности оценки стоимости планировщиком для индексов
GIN(Ронан Данклау) §
E.32.3.1.2. Общая производительность #
Оптимизация добавления страниц кучи и страниц индекса (Андрес Фройнд) §§
Выполнение заморозки страницы, что может быть необходимо во время операций, не связанных с заморозкой (Питер Гейган) § § §
В результате снижается необходимость полной очистки таблиц.
Возможность выполнения запросов с оконными функциями в более быстром внутреннем режиме
ROWS, когда активен режимRANGE, но он не требуется (Дэвид Роули) §Возможность оптимизации запросов с оконными функциями
ntile(),cume_dist()иpercent_rank()(Дэвид Роули) §Возможность параллельного выполнения агрегатных функций
string_agg()иarray_agg()(Дэвид Роули) §Улучшение производительности путём кеширования поиска секций
RANGEиLIST(Амит Ланготе, Хоу Чжицзе, Дэвид Роули) §Возможность управления использованием общего буфера при анализе и очистке (Мелани Плейгман) §§§
Управлять этой функциональностью позволяет параметр команд
VACUUM/ANALYZEпод названиемBUFFER_USAGE_LIMITи параметр vacuumdb--buffer-usage-limit. Значение по умолчанию задаётся в серверной переменнойvacuum_buffer_usage_limit, которая также управляет автоматической очисткой.Поддержка
wal_sync_method=fdatasyncв Windows (Томас Манро) §Возможность изменений HOT только при изменении столбцов с индексами
BRIN(Маттиас ван де Меент, Йозеф Шиманек, Томаш Вондра) §Использование более быстрого метода изменения заголовка процесса (Дэвид Роули) §
Возможность использования векторных операций для поиска
xid/subxidи определения строк ASCII (Натан Боссарт, Джон Нейлор) § § § §В частности, определение строк ASCII полезно для команды
COPY FROM. Векторные операции также используются при поиске в массивах C.Уменьшение издержек выделения памяти (Андрес Фройнд, Дэвид Роули) §
E.32.3.1.3. Мониторинг #
Добавление системного представления
pg_stat_ioдля отслеживания статистики ввода-вывода (Мелани Плейгман) § § § § §Запись статистики о последнем последовательном сканировании таблицы и сканировании только индекса (Дейв Пейдж) §
Эту информацию можно получить в представлениях
pg_stat_*_tablesиpg_stat_*_indexes.Запись статистики о количестве изменений строк, перенесённых на новую страницу (Кори Хинкер) §
Для этого добавлен столбец
n_tup_newpage_updв представленияpg_stat_*_tables.Добавление информации о блокировке спекулятивного добавления в системное представление
pg_locks(Масахико Савада, Нориёси Синода) §Идентификатор транзакции отображается в столбце
transactionid, а маркер спекулятивного добавления в столбцеobjid.Добавление вывода типов результатов подготовленных операторов в представление
pg_prepared_statements(Дагфинн Ильмари Маннсакер) § §Создание статистических записей о подписке в момент её создания, чтобы обеспечить точность
stats_reset(Андрес Фройнд) §Ранее записи создавались только при первом сборе статистики.
Корректировка учёта операций ввода-вывода с временными отношениями в представлении
pg_stat_database(Мелани Плейгман) §Добавление функции
pg_stat_get_backend_subxact()для вывода информации о подтранзакциях из кеша сеанса (Dilip Kumar) §Использование неизменяемого идентификатора обслуживающего процесса функциями
pg_stat_get_backend_idset(),pg_stat_get_backend_activity()и связанными функциями (Натан Боссарт) §Ранее значения в индексе могли меняться в течение сеанса.
Получение информации о самостоятельных обслуживающих процессах по специальному типу процессов (Мелани Плейгман) §
Добавление события ожидания
SpinDelay, представляющего задержку циклических блокировок (Андрес Фройнд) §Создание нового события ожидания
DSMAllocate, представляющего ожидание выделения динамической общей памяти (Томас Манро) §Ранее этот тип ожидания обозначался как
DSMFillZeroWriteи использовался также при выделении памяти при помощиmmap().Добавление имени базы данных в заголовок процесса логической трансляции передатчиками WAL (Тацухиро Накамори) §
При физической репликации передатчики WAL не выводят имя базы данных.
Добавление LSN контрольной точки и
REDO LSNв сообщенияlog_checkpoints(Бхарат Рупиредди, Кётаро Хоригути) §Вывод дополнительной информации об ошибках, связанных с клиентским сертификатом (Джейкоб Чемпион) §
E.32.3.1.4. Права #
Добавление предопределённой роли
pg_create_subscriptionс правом создания подписок (Роберт Хаас) §Добавление возможности не требовать пароль для подписок (Роберт Хаас) §§§
Управлять этой функциональностью позволяет параметр
password_required=false.Упрощение реализации прав
LOCK TABLE(Джефф Девис) §Ранее при выполнении
LOCK TABLEпользователь мог заблокировать таблицу только в режиме, требуемом на уровне команды, выполнять которую для таблицы имел право пользователь. Например, пользователь с правомUPDATEмог заблокировать таблицу в любом режиме, кромеACCESS SHARE, несмотря на то, что этот уровень блокировки ниже других. Теперь пользователи могут устанавливать блокировку на более низких уровнях, если имеют право на более высокие уровни.Возможность выполнить
ALTER GROUP group_name ADD USER user_nameс правомADMIN OPTION(Роберт Хаас) §Ранее для этого требовалось право
CREATEROLE.Возможность использовать синтаксис
WITH ADMIN TRUE/FALSEвGRANT(Роберт Хаас) §Ранее поддерживался только синтаксис
WITH ADMIN OPTION.Возможность ролям, создающим другие роли, автоматически наследовать новые права ролей или выполнять
SET ROLEдля новой роли (Роберт Хаас, Ши Юй) § §Этим механизмом управляет серверная переменная
createrole_self_grant.Запрет изменения прав по умолчанию для ролей без наследования (Роберт Хаас) §
Теперь изменять права можно только для ролей с наследованием.
Требование наличия соответствующих прав у роли-праводателя при назначении членства в ролях (Роберт Хаас) §
Это требуется, даже когда членство в ролях назначает начальный суперпользователь.
Возможность не суперпользователям выдавать права от имени праводателя, не являющегося текущим пользователем (Роберт Хаас) §
При этом у текущего пользователя должны быть необходимые права, выданные указываемым праводателем.
Возможность использовать
SET ROLEвGRANT(Роберт Хаас) §Для этого предназначен новый параметр
GRANT ... SET.Добавление отслеживания зависимостей для ролей с назначенными правами (Роберт Хаас) §
Например, удалить
ADMIN OPTIONне получится, если этот атрибут связан с правами, — для отзыва зависимых прав потребуется воспользоватьсяCASCADE.Добавление отслеживания зависимостей праводателей для записей
GRANT(Роберт Хаас) §Это гарантирует актуальность значений в
pg_auth_members.grantor.Возможность многократного назначения членства в роли (Роберт Хаас) §§
Ранее при новом назначении членства в роли предыдущая запись о назначении удалялась, даже если остальные параметры при назначении отличались.
Недопущение удаления прав суперпользователя для начального пользователя (Роберт Хаас) §
Восстановление статуса могло бы приводить к ошибкам.
Возможность передать функции
makeaclitem()несколько прав (Робинс Таракан) §Ранее принималось только одно имя права, например
SELECT.
E.32.3.1.5. Конфигурация сервера #
Добавление поддержки делегирования учётных данных Kerberos (Стивен Фрост) § § § §
Для этого предназначены серверная переменная
gss_accept_delegationи параметр подключения libpqgssdelegation.Возможность задать число итераций SCRAM при помощи серверной переменной
scram_iterations(Даниэль Густафссон) §Улучшение производительности при управлении серверными переменными (Том Лейн) §§
Усиление ограничений на то, какие серверные переменные можно сбросить (Масахико Савада) §
Ранее выполнение
RESET ALLне затрагивало определённые переменные, напримерtransaction_isolation, но их можно было сбросить по отдельности в неподходящих случаях.Добавление различных пунктов в новые категории
postgresql.conf(Синъя Като) §Это изменение также отразилось на категориях, выводимых в представлении
pg_settings.Запрет рекурсивного включения файла конфигурации более 10 раз (Жюльен Руо) §
Возможность чаще учитывать изменения параметров задержки в процессе автоочистки (Мелани Плейгман) § §
Теперь при автоочистке изменения учитываются в начале каждого блока, а не отношения.
Удаление ограничений, связанных с переименованием архивных файлов (Натан Боссарт) §§
Теперь команда
archive_commandбудет чаще вызываться после сбоя для уже архивированных файлов.Недопущение одновременной установки параметров
archive_libraryтarchive_command(Натан Боссарт) §Ранее параметр
archive_libraryимел приоритет надarchive_command.Возможность прерывать дочерние процессы по сигналу для процесса postmaster (Том Лейн) §
Эта функциональность позволяет собирать дампы памяти «зависших» дочерних процессов и управляется параметрами
send_abort_for_crashиsend_abort_for_kill. Ключ postmaster-Tтеперь работает так же, как параметрsend_abort_for_crash.Удаление нефункционального ключа postmaster
-n(Том Лейн) §Возможность резервировать слоты подключений для членов роли
pg_use_reserved_connections(Натан Боссарт) §Количество зарезервированных слотов задаётся в серверной переменной
reserved_connections.Поддержка огромных страниц для новых версий Windows 10 (Томас Манро) §
В связи с этим добавлена специальная возможность включить огромные страницы в новых версиях Windows 10.
Добавление параметра
debug_io_direct, полезного для разработчиков (Томас Манро, Андрес Фройнд, Бхарат Рупиредди) § §Ранее существовала возможность для разработчиков тестировать прямой ввод-вывод WAL с указанием
wal_sync_method=open_sync/open_datasyncприwal_level=minimal, теперь для этого предназначенdebug_io_direct=wal.Добавление функции
pg_split_walfile_name(), выводящей значения сегмента и линии времени из имени файла WAL (Бхарат Рупиредди) § §
E.32.3.1.6. pg_hba.conf #
Добавление поддержки регулярных выражений для имён баз данных и ролей в
pg_hba.conf(Бертран Друво) §Шаблоны регулярных выражений начинаются с косой черты, поэтому имена баз данных и ролей, начинающиеся с косой черты, требуется заключать в двойные кавычки в
pg_hba.conf.Улучшение обработки пользовательских столбцов
pg_ident.confв соответствии сpg_hba.conf(Йелте Феннема) §В частности, добавлена поддержка специального значения
all, проверки членства в ролях с использованием+и регулярных выражений, начинающихся с косой черты. Таким образом, теперь имя пользователя, соответствующее одному из этих форматов, должно заключаться в двойные кавычки.Возможность включать файлы в
pg_hba.confиpg_ident.conf(Жюльен Руо) §Для этого используются директивы
include,include_if_existsиinclude_dir. Системные представленияpg_hba_file_rulesиpg_ident_file_mappingsтеперь выводят имя включаемого файла.Снятие ограничения на длину маркера в
pg_hba.conf(Том Лейн) §Добавление вывода количества правил и сопоставлений в системное представление
pg_hba_file_rules(Жюльен Руо) §
E.32.3.1.7. Локализация #
Определение кодировки по умолчанию из локали при использовании ICU (Джефф Дэвис) §
Ранее по умолчанию всегда использовалась кодировка
UTF-8.Использование параметра
LOCALEвCREATE DATABASEиCREATE COLLATIONи ключа--localeв initdb и createdb для управления провайдерами локалей, не связанными с libc (Джефф Девис)Ранее эти параметры позволяли управлять только провайдерами локалей libc.
Добавление предопределённых правил сортировки
unicodeиucs_basic(Питер Эйзентраут) §Они работают, только если включена поддержка ICU.
Возможность создания пользовательских правил сортировки ICU (Питер Эйзентраут) §
Правила можно создать, указав новое предложение
RULESвCREATE COLLATION, а также воспользовавшись новыми параметрами вCREATE DATABASE, createdb и initdb.Возможность автоматического импорта системных локалей Windows (Хуан Хосе Сантамария Флеча) §
Ранее в Windows можно было импортировать только локали ICU.
E.32.3.2. Логическая репликация #
Поддержка логического декодирования на резервных серверах (Бертран Друво, Андрес Фройнд, Амит Хандекар) § § §
Для создания слота логической репликации требуется запись WAL со снимком, которую нельзя создать на резервном сервере. Во избежание задержек создать такую запись можно, воспользовавшись функцией
pg_log_standby_snapshot().Добавление серверной переменной для управления тем, как при логическом декодировании публикующие сервера передают изменения, а подписчики их применяют (Ши Юй) §§§
Эта переменная называется
debug_logical_replication_streaming.Возможность копировать строки в двоичном формате при начальной синхронизации таблиц для логической репликации (Мелих Мутлу) §
Это возможно только для подписок, принимающих данные в двоичном формате.
Возможность параллельного применения логической репликации (Хоу Чжицзе, Ван Вэй, Амит Капила) §§§
Для параметра
STREAMINGвCREATE SUBSCRIPTIONтеперь можно задать значениеparallel, что позволяет передавать большие транзакции с использованием параллельных рабочих процессов. Количество параллельных процессов задаётся в новой серверной переменнойmax_parallel_apply_workers_per_subscription. Также были добавлены соответствующие события ожидания:LogicalParallelApplyMain,LogicalParallelApplyStateChangeиLogicalApplySendData. Кроме того, в системное представлениеpg_stat_subscriptionбыл добавлен столбецleader_pid, указывающий на параллельность передачи.Улучшение производительности применения логической репликации без первичного ключа (Ондер Каладжи, Амит Капила) §
В частности, с указанием
REPLICA IDENTITY FULLтеперь вместо последовательного сканирования таблицы в поисках совпадений можно использовать индексы B-деревья.Предоставление возможности подписчикам логической репликации обрабатывать только изменения без указания источника (Вигнеш Си, Амит Капила) § §
Это позволяет избежать зацикливания репликации. Для включения этой функциональности предназначен параметр
CREATE SUBSCRIPTION ... ORIGIN.Выполнение операций
SELECTи команд DML от имени владельца таблицы при логической репликации (Роберт Хаас) § §Это изменение повышает безопасность, поскольку теперь владельцем подписки может быть либо суперпользователь, либо роль с правом
SET ROLEдля всех ролей, владеющих таблицами в наборе репликации. Ранее можно было включить выполнение всех операций от имени владельца подписки, задав для подписки параметрrun_as_owner.Возможность включать
wal_retrieve_retry_intervalна уровне подписки (Натан Боссарт) §Ранее этот параметр применялся глобально. Также добавлены соответствующие события ожидания: >
LogicalRepLauncherDSAиLogicalRepLauncherHash.
E.32.3.3. Служебные команды #
Добавление параметра
GENERIC_PLANдляEXPLAIN, позволяющего выводить общий план для параметризованного запроса (Лауренц Альбе) §Возможность при копировании с использованием
COPY FROMиспользовать значение столбца по умолчанию (DEFAULT) (Израэл Барт) §Возможность использовать
COPYдля добавления строк порциями в сторонние таблицы (Андрей Лепихов, Эцуро Фудзита) §Для этого предназначен параметр
batch_sizepostgres_fdw.Возможность задавать тип хранения (
STORAGE) в командеCREATE TABLE(Фёдор Сигаев, Александр Алексеев) § §Ранее тип можно было задавать только в команде
ALTER TABLE.Возможность использовать триггеры TRUNCATE для сторонних таблиц (Юго Нагата) §
Возможность очистки только
TOAST-таблиц с использованиемVACUUMи vacuumdb (Натан Боссарт) §Это можно реализовать, отключив
PROCESS_MAINприVACUUMили задав параметр--no-process-mainв vacuumdb.Добавление в
VACUUMпараметров для пропуска или обновления всех статистик по заморозке (Том Лейн, Натан Боссарт) §Параметры называются
SKIP_DATABASE_STATSиONLY_DATABASE_STATS.Отключение требования аргумента в
REINDEX DATABASEиREINDEX SYSTEM(Саймон Риггс) § §Ранее требовалось указать имя базы данных.
Возможность генерировать имя статистики при выполнении
CREATE STATISTICS, если оно не было указано (Саймон Риггс) §
E.32.3.4. Типы данных #
Поддержка недесятичных целочисленных констант (Питер Эйзентраут) §
Примеры:
0x42F,0o273и0b100101.Поддержка шестнадцатеричных, восьмеричных и двоичных целых чисел для
NUMERIC(Дин Рашид) §Ранее с недесятичными основаниями поддерживались только восьмибайтовые целые без кавычек.
Поддержка символов подчёркивания в целочисленных и любых числовых константах (Питер Эйзентраут, Дин Рашид) §
Благодаря этому удобнее читать длинные строки цифр.
Поддержка
+infinityпри вводе даты и времени (Вик Фиринг) §Запрет указывать
epochиinfinityодновременно с другими полями в строках даты и времени (Джозеф Кошаков) §Удаление недокументированной поддержки ввода даты в формате
Y(Джозеф Кошаков) §годMмесяцDденьДобавление функций
pg_input_is_valid()иpg_input_error_info()для проверки на наличие ошибок преобразования типов (Том Лейн) § §
E.32.3.5. Общие запросы #
E.32.3.6. Функции #
Добавление функций-конструкторов SQL/JSON (Никита Глухов, Фёдор Сигаев, Олег Бартунов, Александр Коротков, Амит Ланготе) §
Новые функции
JSON_ARRAY(),JSON_ARRAYAGG(),JSON_OBJECT()иJSON_OBJECTAGG()являются частью стандарта SQL.Добавление проверок для объектов SQL/JSON (Никита Глухов, Фёдор Сигаев, Олег Бартунов, Александр Коротков, Амит Ланготе, Эндрю Дунстан) §
Проверки
IS JSONраспространяются на значения, массивы, объекты, скалярные значения и уникальные ключи.Возможность использования векторных операций для разбора строк JSON (Джон Нейлор) §
Улучшение обработки выражений
ORиNOTфункцией выделения текстаts_headline()(Tom Lane) §Реализация функций для добавления, вычитания и генерирования значений
timestamptzв указанном часовом поясе (Пшемыслав Штох, Гуржит Сингх) §Эти функции называются
date_add(),date_subtract()иgenerate_series()соответственно.Изменение функции
date_trunc(unit, timestamptz, time_zone)на постоянную (Пшемыслав Штох) §Теперь с использованием этой функции можно создавать индексы выражений.
Добавление серверной переменной
SYSTEM_USER(Бертран Друво) §Она выводит метод аутентификация и имя аутентифицированного пользователя.
Добавление функций
array_sample()иarray_shuffle()(Мартин Калхер) §Добавление агрегатной функции
ANY_VALUE(), возвращающей любое значение из набора (Вик Фиринг) §Добавление функции
random_normal(), выдающей случайные значения с нормальным распределением (Пол Рамсей) §Добавление функции ошибок
erf()и дополняющей еёerfc()(Дин Рашид) §Увеличение точности функции
power()для типа numeric с целыми показателями степеней (Дин Рашид) §Добавление аргумента
INDENTдля функцииXMLSERIALIZE(), позволяющего вывести визуально улучшенный результат (Джим Джонс) §Внесение изменений в функцию
pg_collation_actual_version(), чтобы она возвращала подходящее значение, если используется правило сортировки по умолчанию (Джефф Девис) §Ранее возвращалось значение
NULL.Возможность игнорировать отсутствующие файлы функциями
pg_read_file()иpg_read_binary_file()(Кётаро Хоригути) §Возможность задать формат в байтах (
B) дляpg_size_bytes()(Питер Эйзентраут) §Поддержка в функциях
to_reg* ввода числовых значений OID (Том Лейн) §
Возможность получить OID функции в PL/pgSQL (Павел Стехуле) §
Это позволяет сделать команда
GET DIAGNOSTICS variable = PG_ROUTINE_OID.
Добавление параметра подключения
require_authв libpq для указания списка допустимых методов аутентификации (Джейкоб Чемпион) §Кроме того, в этом параметре можно запретить определённые методы аутентификации.
Возможность случайного выбора узлов в libpq (Йелте Феннема) § §
Эта возможность включается параметром
load_balance_hosts=randomи может использоваться для балансировки нагрузки.Добавление параметра
sslcertmodeв libpq, позволяющего управлять передачей клиентского сертификата (Джейкоб Чемпион) §Допустимые значения:
disable,allowиrequire.Возможность использовать пул сертификатов ОС в libpq для проверки сертификата (Джейкоб Чемпион, Томас Хабетс) §
Эту возможность включает значение
sslrootcert=system, и в результате устанавливается значениеsslmode=verify-full.
E.32.3.9. Клиентские приложения #
Реализация управления максимальной шириной строк заголовка psql в расширенном формате (Платон Пронко) §
Этой возможностью управляет параметр
xheader_width.Добавление команды
\drgв psql, показывающей информацию о членстве в ролях (Павел Лузанов) § §Поскольку новая команда выводит более подробную информацию, для
\duи\dgвыходной столбецMember ofтеперь удалён.Возможность выводить системные объекты командами psql, показывающими права доступа (Натан Боссарт) § §
Возможность добавления признака
FOREIGNдля дочерних таблиц и секций сторонних таблиц командой\d+в psql (Иэн Барвик) §Исключение вывода исходного кода функции командой
\df+(Айзек Морленд) §Тело функции удобнее просматриваться командой
\sf.Возможность psql отправлять запросы по расширенному протоколу (Питер Эйзентраут) §
Аргументы для таких запросов передаются с использованием новой команды psql
\bind.Возможность ограничивать количество выполнений команды
\watchв psql (Андрей Бородин) §Теперь в
\watchможно передавать именованные параметры.Выявление недействительных значений, передаваемых для
\watchв psql, и возможность передать ноль для выполнения повторов без задержек (Андрей Бородин) §Возможность в psql получать коды завершения команд оболочки и запросов (Кори Хинкер, Том Лейн) § §
Для этого предназначены новые переменные psql:
SHELL_ERRORиSHELL_EXIT_CODE.Разнообразные улучшения дополнения табуляцией в psql (Вигнеш Си, Александр Алексеев, Дагфинн Ильмари Маннсакер, Ши Юй, Микаэль Пакье, Кен Като, Питер Смит) § § § § § § § § § § § §
Добавление управления выгрузкой дочерних таблиц и секций в pg_dump (Жиль Даролд) §
Для этого предназначены параметры
--table-and-children,--exclude-table-and-childrenи--exclude-table-data-and-children.Поддержка сжатия LZ4 и Zstandard в pg_dump (Георгиос Коколатос, Джастин Призби)
Поддержка режима сжатия
longв pg_dump и pg_basebackup (Джастин Призби) § § § §Улучшение синтаксиса pg_dump в части определения сжатия (Георгиос Коколатос) §
Теперь принимаются такие параметры, как
--compress=gzip:5.
E.32.3.10. Серверные приложения #
Добавление параметра initdb для указания серверных переменных на время выполнения initdb и для последующих запусков сервера (Том Лейн) §
Параметр устанавливается так:
-c имя=значение.Добавление параметров в createuser для управления поведением пользователей (Синъя Като) § §
В частности, эти параметры позволяют управлять сроком действия роли, пропуском проверок политик защиты на уровне строк и членством в ролях.
Объявление ключа
--roleв createuser устаревшим (Натан Боссарт) § §Этот ключ можно перепутать с новыми параметрами createuser для членства в ролях, поэтому добавлен новый параметр
--member-ofс той же функциональностью. Ключ--roleпока можно использовать.Добавление управления обработкой схемы в vacuumdb (Жиль Даролд) §
Для этого предназначены ключи
--schemaи--exclude-schema.Использование новых параметров
VACUUMдля улучшения производительности vacuumdb (Том Лейн, Натан Боссарт) §Назначение локали и кодировки для нового кластера во время pg_upgrade (Джефф Девис) §
В результате отменяется требование сохранения локали и кодировки старого кластера.
Добавление ключа для pg_upgrade, задающего режим передачи по умолчанию (Питер Эйзентраут) §
Это ключ
--copy.Поддержка числовых параметров при определении сжатия в pg_basebackup (Георгиос Коколатос, Микаэль Пакье) §
Теперь поддерживаются параметры, заданные как
--compress=server-5.Исправление логики pg_basebackup в части обработки табличных пространств в каталоге
PGDATA(Роберт Хаас) §Добавление ключа
--save-fullpageдля выгрузки образов полных страниц в pg_waldump (Дэвид Кристенсен) §Поддержка передачи шестнадцатеричных значений в параметры
-t/--timelineв pg_waldump (Питер Эйзентраут) §Поддержка отслеживания выполнения в pg_verifybackup (Масахико Савада) §
Возможность корректного отслеживания смены линии времени в pg_rewind (Хейкки Линнакангас) § §
Ранее утилита pg_rewind могла некорректно выявлять отсутствие необходимости синхронизации в случаях запуска после смены линии времени, но до начала контрольной точки.
Обеспечение штатного завершения работы pg_receivewal и pg_recvlogical по сигналу
SIGTERM(Кристоф Берг) §Этот сигнал часто используется systemd.
E.32.3.11. Исходный код #
Поддержка сборки с ICU по умолчанию (Джефф Девис) §
В результате удалён флаг сборки
--with-icuи добавлен--without-icu.Поддержка векторных операций SSE2 (Streaming SIMD Extensions 2, Потоковые расширения SIMD) для архитектур x86-64 (Джон Нейлор) §
Поддержка расширенных SIMD-инструкций (Single Instruction Multiple Data, Одиночный поток команд, множественный поток данных) (NEON) для архитектур ARM (Натан Боссарт) §
Требование использования
RandomizedBaseAddress(ASLR) для всех двоичных файлов, собираемых для Windows с MSVC (Микаэль Пакье) §Ранее это требование уже было включено для сборок с MinGW.
Отключение экспорта символов библиотеками расширений по умолчанию (Андрес Фройнд, Том Лейн) § §
Теперь функции, вызываемые из кода ядра или других расширений, должны быть явно помечены
PGDLLEXPORT.Требование Windows 10 или выше (Микаэль Пакье, Хуан Хосе Сантамария Флеча) §
Ранее также поддерживались Windows Vista и Windows XP.
Требование Perl версии 5.14 или выше (Джон Нейлор) §
Требование Bison версии 2.3 или выше (Джон Нейлор) §
Требование Flex версии 2.5.35 или выше (Джон Нейлор) §
Требование MIT Kerberos для поддержки GSSAPI (Стивен Фрост) §
Прекращение поддержки Visual Studio 2013 (Микаэль Пакье) §
Прекращение поддержки HP-UX (Томас Манро) §
Прекращение поддержки HP/Intel Itanium (Томас Манро) §
Прекращение поддержки архитектур M68K, M88K, M32R и SuperH (Томас Манро) § §
Прекращение поддержки аутентификации по учётным данным SCM в libpq (Микаэль Пакье) §
Внутренняя поддержка этого метода аутентификации была прекращена в PostgreSQL 9.1.
Поддержка системы сборки meson (Андрес Фройнд, Назир Билал Явуз, Питер Эйзентраут) §
Впоследствии эта система сборки заменит Autoconf и MSVC для Windows.
Возможность задать расположение исполняемого файла openssl, используемого системой сборки (Питер Эйзентраут) §
Теперь можно указать программу openssl для configure или meson.
Добавление параметра сборки для тестирования сегментов WAL небольшого размера (Андрес Фройнд) §
Параметры сборки называются
--with-segsize-blocksи-Dsegsize_blocks.Добавление параметров pgindent (Эндрю Дунстан) § § § § § § §
Добавлены параметры
--show-diff,--silent-diff,--commitи--help, и теперь допускается задавать--excludeмногократно. Кроме того, требуется явно указать файл определения типа. Параметры--code-baseи--buildбыли удалены.Добавление исходного кода pg_bsd_indent в основное дерево кода (Том Лейн) §
Улучшения make_ctags и make_etags (Юго Нагата) §
Изменение
pg_attributeдля повышения эффективности (Питер Эйзентраут) §
E.32.3.12. Дополнительные модули #
Улучшение работы индексов из расширений по логическим столбцам (Цюань Цзунлян, Том Лейн) §
Поддержка Daitch-Mokotoff Soundex в fuzzystrmatch (Даг Лем) §
Возможность auto_explain протоколировать значения, передаваемые для параметризованных операторов (Дагфинн Ильмари Маннсакер) §
Это распространяется на запросы с
PREPARE/EXECUTEна стороне сервера и разбором/привязкой параметров на стороне клиента. Протоколированием управляет параметрauto_explain.log_parameter_max_length. По умолчанию параметры запросов записываются без ограничения длины.Использование значения
compute_query_idв режимеlog_verboseмодуля auto_explain (Атсуши Торикоши) §Ранее в режиме
log_verboseне выводился идентификатор запроса даже при включённом параметреcompute_query_id.Изменение максимальной длины меток ltree с 256 до 1000 символов и возможность использовать в них дефисы (Гарен Торикян) §
Нормализация констант, используемых в служебных командах, в
pg_stat_statements(Микаэль Пакье) §Ранее вместо местозаполнителей отображались константы, например
$1.Добавление функции
pg_get_wal_block_info()в pg_walinspect, возвращающей информацию о блоке WAL (Микаэль Пакье, Мелани Плейгман, Бхарат Рупиредди) § § § §Изменение интерпретации завершающих LSN функциями
pg_get_wal_records_info()иpg_get_wal_stats()в pg_walinspect (Бхарат Рупиредди) §Ранее при обработке завершающих LSN для несуществующих позиций WAL выдавались ошибки, тогда как теперь они интерпретируются как конец файла WAL.
Добавление подробного описания записей WAL в pg_walinspect и pg_waldump (Мелани Плейгман, Питер Гейган) § § § §
Добавление функции
bt_multi_page_stats()в pageinspect, возвращающей статистику по нескольким страницам (Хамид Ахтар) §Эта функция подобна
bt_page_stats(), но работает для нескольких страниц.Добавление выходного столбца для пустых зон в функцию
brin_page_items()pageinspect (Томаш Вондра) §Переработка модулей архивирования для увеличения гибкости (Натан Боссарт) §
Изменения инициализации требуют обновления модулей, написанных для предыдущих версий PostgreSQL.
Корректировка отслеживания строк pg_stat_statements запросов, передаваемых по расширенному протоколу (Сами Имсейх) §
Добавление функции
pg_buffercache_usage_counts()в pg_buffercache, возвращающей сводную информацию по счётчикам использования (Натан Боссарт) §Добавление функции
pg_buffercache_summary()в pg_buffercache, возвращающей сводную информацию о буферном кеше (Мелих Мутлу) §Возможность ссылаться на схемы требуемых расширений из скриптов расширений с использованием нового синтаксиса
@extschema:referenced_extension_name@(Регина Обе) §Возможность помечать требуемые расширения как неперемещаемые при помощи
no_relocate(Регина Обе) §В результате
@extschema:referenced_extension_name@будет обрабатываться как константа на протяжении жизни расширения.
E.32.3.12.1. postgres_fdw #
Возможность параллельного прерывания транзакций в postgres_fdw (Эцуро Фудзита) §
Для такого прерывания транзакций предназначен параметр postgres_fdw
parallel_abort.Повышение эффективности
ANALYZEдля сторонних таблиц postgres_fdw (Томаш Вондра) §Метод выборки указывается в параметре postgres_fdw
analyze_sampling.Ограничение передачи констант типов
reg* в postgres_fdw только константами, ссылающимися на встроенные объекты или поставляемые расширения (Том Лейн) §Обработка прерываний во время установки подключений модулями postgres_fdw и dblink (Андрес Фройнд) §
E.32.4. Благодарственный список #
Перечисленные ниже (в алфавитном порядке) лица сделали вклад в этот выпуск, разрабатывая, совершенствуя и рецензируя код, принимая правки, проводя тестирование или сообщая о проблемах.
| Абхиджит Менон-Сен (Abhijit Menon-Sen) |
| Адам Маклер (Adam Mackler) |
| Аджин Чериан (Ajin Cherian) |
| Аджит Авекар (Ajit Awekar) |
| Адриан Клавер (Adrian Klaver) |
| Айзек Морленд (Isaac Morland) |
| Алан Ходжсон (Alan Hodgson) |
| Алекс Денман (Alex Denman) |
| Александр Алексеев (Aleksander Alekseev) |
| Александр Кожемякин (Alex Kozhemyakin) |
| Александр Королев (Alexander Korolev) |
| Александр Коротков (Alexander Korotkov) |
| Александр Лахин (Alexander Lakhin) |
| Александр Пыхалов (Alexander Pyhalov) |
| Алексей Борзов (Alexey Borzov) |
| Алексей Ермаков (Alexey Ermakov) |
| Алексей Махмутов (Alexey Makhmutov) |
| Альваро Эррера (Álvaro Herrera) |
| Амит Капила (Amit Kapila) |
| Амит Ланготе (Amit Langote) |
| Амит Хандекар (Amit Khandekar) |
| Амул Сул (Amul Sul) |
| Анастасия Лубенникова (Anastasia Lubennikova) |
| Анбан Компани (Anban Company) |
| Андреас Диджкмен (Andreas Dijkman) |
| Андреас Карлссон (Andreas Karlsson) |
| Андреас Шербаум (Andreas Scherbaum) |
| Андрей Билле (Andrew Bille) |
| Андрей Бородин (Andrey Borodin) |
| Андрей Зубков (Andrei Zubkov) |
| Андрей Лепихов (Andrey Lepikhov) |
| Андрей Соколов (Andrey Sokolov) |
| Андрес Фройнд (Andres Freund) |
| Анкит Кумар Пандей (Ankit Kumar Pandey) |
| Анте Крешич (Ante Kresic) |
| Антон Волошин (Anton Voloshin) |
| Антон Мельников (Anton Melnikov) |
| Антон Сидякин (Anton Sidyakin) |
| Антонин Хоуска (Antonin Houska) |
| Арне Роланд (Arne Roland) |
| Артем Анисимов (Artem Anisimov) |
| Артур Закиров (Artur Zakirov) |
| Асим Правин (Asim Praveen) |
| Атсуши Торикоши (Atsushi Torikoshi) |
| Ахсан Хади (Ahsan Hadi) |
| Ашутош Бапат (Ashutosh Bapat) |
| Ашутош Шарма (Ashutosh Sharma) |
| Аяки Тачикаке (Ayaki Tachikake) |
| Балаж Силфаи (Balazs Szilfai) |
| Бенуа Лобро (Benoit Lobréau) |
| Бернд Хелмле (Bernd Helmle) |
| Бертран Друво (Bertrand Drouvot) |
| Билва Санба (Bilva Sanaba) |
| Боб Криер (Bob Krier) |
| Борис Зентнер (Boris Zentner) |
| Брар Пининг (Brar Piening) |
| Бруно да Силва (Bruno da Silva) |
| Брэд Николсон (Brad Nicholson) |
| Брюс Момджян (Bruce Momjian) |
| Бхарат Рупиредди (Bharath Rupireddy) |
| Валери Вулард (Valerie Woolard) |
| Ван Вэй (Wang Wei) |
| Вейл Сонг (Whale Song) |
| Вибхор Кумар (Vibhor Kumar) |
| Вигнеш Си (Vignesh C) |
| Вик Фиринг (Vik Fearing) |
| Виктор Спирин (Victor Spirin) |
| Виктория Шепард (Victoria Shepard) |
| Вилл Мортенсен (Will Mortensen) |
| Виталий Буровой (Vitaly Burovoy) |
| Виталий Давыдов (Vitaly Davydov) |
| Вольфганг Вальтер (Wolfgang Walther) |
| Вэньцзин Цзэн (Wenjing Zeng) |
| Гарен Торикян (Garen Torikian) |
| Георгиос Коколатос (Georgios Kokolatos) |
| Гийом Леларж (Guillaume Lelarge) |
| Грег Старк (Greg Stark) |
| Гуннар Блут (Gunnar Bluth) |
| Гуннар Морлинг (Gunnar Morling) |
| Гуржит Сингх (Gurjeet Singh) |
| Давид Гайер (David Geier) |
| Давид Туронь (David Turon) |
| Давиндер Сингх (Davinder Singh) |
| Даг Лем (Dag Lem) |
| Дагфинн Ильмари Маннсакер (Dagfinn Ilmari Mannsåker) |
| Даниель Вестерман (Daniel Westermann) |
| Даниил Анисимов (Daniil Anisimov) |
| Даниэле Вараццо (Daniele Varrazzo) |
| Даниэль Ватцингер (Daniel Watzinger) |
| Даниэль Верите (Daniel Vérité) |
| Даниэль Густафссон (Daniel Gustafsson) |
| Данкан Сэндс (Duncan Sands) |
| Дейв Пейдж (Dave Page) |
| Денис Лаксельд (Denis Laxalde) |
| Джастин Призби (Justin Pryzby) |
| Джастин Чжан (Justin Zhang) |
| Джейкоб Спидел (Jacob Speidel) |
| Джейкоб Чемпион (Jacob Champion) |
| Джеймс Ваннс (James Vanns) |
| Джеймс Информ (James Inform) |
| Джеймс Коулман (James Coleman) |
| Джефф Девис (Jeff Davis) |
| Джефф Джейнс (Jeff Janes) |
| Дживан Ладхе (Jeevan Ladhe) |
| Джим Джонс (Jim Jones) |
| Джо Конвей (Joe Conway) |
| Джозеф Кошаков (Joseph Koshakow) |
| Джон Нейлор (John Naylor) |
| Джонатан С Кац (Jonathan S. Katz) |
| Джоэл Джейкобсон (Joel Jacobson) |
| Дилип Кумар (Dilip Kumar) |
| Димос Стаматакис (Dimos Stamatakis) |
| Дин Рашид (Dean Rasheed) |
| Дмитрий Астапов (Dmitry Astapov) |
| Дмитрий Долгов (Dmitry Dolgov) |
| Дмитрий Коваль (Dmitry Koval) |
| Дмитрий Кузьмин (Dmitriy Kuzmin) |
| Донмин Лю (Dongming Liu) |
| Дрю ДеВолт (Drew DeVault) |
| Дэвид Гилман (David Gilman) |
| Дэвид Дж. Джонстон (David G. Johnston) |
| Дэвид Кимура (David Kimura) |
| Дэвид Кристенсен (David Christensen) |
| Дэвид Роули (David Rowley) |
| Дэвид Стил (David Steele) |
| Дэвид Чжан (David Zhang) |
| Дэнни Шемеш (Danny Shemesh) |
| Евгений Жужнев (Eugeny Zhuzhnev) |
| Евгений Морозов (Evgeny Morozov) |
| Егор Чиндяскин (Egor Chindyaskin) |
| Екатерина Кирьянова (Ekaterina Kiryanova) |
| Елена Индрупская (Elena Indrupskaya) |
| Ерки Еэссаар (Erki Eessaar) |
| Жеан-Гийом де Рорте (Jehan-Guillaume de Rorthais) |
| Жиль Даролд (Gilles Darold) |
| Жюльен Розе (Julien Roze) |
| Жюльен Руо (Julien Rouhaud) |
| Ибрар Ахмед (Ibrar Ahmed) |
| Израэл Барт (Israel Barth Rubio) |
| Илья Гладышев (Ilya Gladyshev) |
| Илья Ненашев (Ilya Nenashev) |
| Иэн Барвик (Ian Barwick) |
| Йелте Феннема (Jelte Fennema) |
| Йозеф Шиманек (Josef Šimánek) |
| Карина Лицкевич (Karina Litskevich) |
| Карл О. Пинц (Karl O. Pinc) |
| Карл Сопчак (Carl Sopchak) |
| Кевин Маккиббин (Kevin McKibbin) |
| Кен Като (Ken Kato) |
| Киран Маккаскер (Kieran McCusker) |
| Кирк Волак (Kirk Wolak) |
| Константин Книжник (Konstantin Knizhnik) |
| Кори Хинкер (Corey Huinker) |
| Котаро Кавамото (Kotaro Kawamoto) |
| Коши Шибагаки (Koshi Shibagaki) |
| Крейг Рингер (Craig Ringer) |
| Крис Трэверс (Chris Travers) |
| Кристоф Берг (Christoph Berg) |
| Кристоф Петтус (Christophe Pettus) |
| Куй Лю (Kui Liu) |
| Курт Коловсон (Curt Kolovson) |
| Кэйсукэ Курода (Keisuke Kuroda) |
| Кэри Хуан (Cary Huang) |
| Кётаро Хоригути (Kyotaro Horiguchi) |
| Лакшми Нараян Шритар (Lakshmi Narayanan Sreethar) |
| Лауренц Альбе (Laurenz Albe) |
| Ли Дон Ук (Lee Dong Wook) |
| Лоуренс Пэрри (Laurence Parry) |
| Лука Феррари (Luca Ferrari) |
| Лукас Фиттл (Lukas Fittl) |
| Магнус Хагандер (Magnus Hagander) |
| Майк Ох (Mike Oh) |
| Майя Заложник (Maja Zaloznik) |
| Максим Орлов (Maxim Orlov) |
| Максим Яблоков (Maxim Yablokov) |
| Марина Полякова (Marina Polyakova) |
| Марк Дилгер (Mark Dilger) |
| Марко Тииккая (Marko Tiikkaja) |
| Маркус Винанд (Markus Winand) |
| Марсель Хофштеттер (Marcel Hofstetter) |
| Мартейн Ван Остерхаут (Martijn van Oosterhout) |
| Мартин Калхер (Martin Kalcher) |
| Мартин Юрча (Martin Jurca) |
| Масао Фудзии (Masao Fujii) |
| Масахико Савада (Masahiko Sawada) |
| Масахиро Икеда (Masahiro Ikeda) |
| Матеус Алькантара (Matheus Alcantara) |
| Матс Киндаль (Mats Kindahl) |
| Маттейс ван дер Влётен (Matthijs van der Vleuten) |
| Маттиас ван де Меент (Matthias van de Meent) |
| Мачик Сакрейда (Maciek Sakrejda) |
| Мейсон Шарп (Mason Sharp) |
| Мелани Плейгман (Melanie Plageman) |
| Мелих Мутлу (Melih Mutlu) |
| Мехмет Эмин Каракас (Mehmet Emin Karakas) |
| Мика Гейтс (Micah Gates) |
| Микаэль Пакье (Michael Paquier) |
| Мингли Чжан (Mingli Zhang) |
| Мирослав Бендик (Miroslav Bendik) |
| Михаил Грибков (Mikhail Gribkov) |
| Михаил Николаев (Michail Nikolaev) |
| Михаэль Банк (Michael Banck) |
| Мишель Пельтье (Michel Pelletier) |
| Мэри Сюй (Mary Xu) |
| Мё Вай Тан (Myo Wai Thant) |
| Назир Билал Явуз (Nazir Bilal Yavuz) |
| Наим Ахтер (Naeem Akhter) |
| Наоки Окано (Naoki Okano) |
| Натан Боссарт (Nathan Bossart) |
| Неха Шарма (Neha Sharma) |
| Ник Бабаджанян (Nick Babadzhanian) |
| Никита Глухов (Nikita Glukhov) |
| Никола Конту (Nicola Contu) |
| Николай Самохвалов (Nikolay Samokhvalov) |
| Николай Шаплов (Nikolay Shaplov) |
| Никхил Шетти (Nikhil Shetty) |
| Нитин Ядав (Nitin Jadhav) |
| Нишант Шарма (Nishant Sharma) |
| Нобору Сайто (Noboru Saito) |
| Ной Миш (Noah Misch) |
| Нориёси Синода (Noriyoshi Shinoda) |
| Нуко Иокогама (Nuko Yokohama) |
| Олег Бартунов (Oleg Bartunov) |
| Олег Целебровский (Oleg Tselebrovskiy) |
| Олли Беттс (Olly Betts) |
| Ондер Каладжи (Onder Kalaci) |
| Онур Тиртир (Onur Tirtir) |
| Пабло Федерико (Pablo Federico) |
| Павел Борисов (Pavel Borisov) |
| Павел Кулаков (Pavel Kulakov) |
| Павел Лузанов (Pavel Luzanov) |
| Павел Стехуле (Pavel Stehule) |
| Палле Гиргензон (Palle Girgensohn) |
| Питер Гейган (Peter Geoghegan) |
| Питер Смит (Peter Smith) |
| Питер Эйзентраут (Peter Eisentraut) |
| Платон Пронко (Platon Pronko) |
| Пол Гуо (Paul Guo) |
| Пол Рамсей (Paul Ramsey) |
| Пол Юнгвирт (Paul Jungwirth) |
| Пшемыслав Штох (Przemyslaw Sztoch) |
| Пэйфэн Цю (Peifeng Qiu) |
| Райнер Петерке (Reiner Peterke) |
| Ранье Вилела (Ranier Vilela) |
| Регина Обе (Regina Obe) |
| Рид Томпсон (Reid Thompson) |
| Рииво Колка (Riivo Kolka) |
| Ричард Гуо (Richard Guo) |
| Ришу Багга (Rishu Bagga) |
| Роберт Трит (Robert Treat) |
| Роберт Хаас (Robert Haas) |
| Роберт Шёблом (Robert Sjöblom) |
| Роберто Мелло (Roberto Mello) |
| Робинс Таракан (Robins Tharakan) |
| Роман Жарков (Roman Zharkov) |
| Ронан Данклау (Ronan Dunklau) |
| Рушаб Латиа (Rushabh Lathia) |
| Рэйчел Хитон (Rachel Heaton) |
| Рё Мацумура (Ryo Matsumura) |
| Саймон Риггс (Simon Riggs) |
| Сами Имсейх (Sami Imseih) |
| Сандип Таккар (Sandeep Thakkar) |
| Сандро Сантилли (Sandro Santilli) |
| Свен Клемм (Sven Klemm) |
| Себастьян Лардье (Sébastien Lardière) |
| Себастьян Флеш (Sebastien Flaesch) |
| Сергей Беляшов (Sergey Belyashov) |
| Сергей Панков (Sergey Pankov) |
| Сергей Шиндерук (Sergey Shinderuk) |
| Сероп Саркуни (Sehrope Sarkuni) |
| Син Вэнь (Xin Wen) |
| Син Го (Xing Guo) |
| Синван Сюй (Xingwang Xu) |
| Синди Сенорита (Sindy Senorita) |
| Синъя Като (Shinya Kato) |
| Сириша Чамарти (Sirisha Chamarthi) |
| Стефан Ташуар (Stéphane Tachoires) |
| Стив Чавес (Steve Chavez) |
| Стивен Фрост (Stephen Frost) |
| Стоун Тикл (Stone Tickle) |
| Сюэцзин Чжао (XueJing Zhao) |
| Такамити Осуми (Takamichi Osumi) |
| Такэси Идэриха (Takeshi Ideriha) |
| Тацуо Исии (Tatsuo Ishii) |
| Тацухиро Накамори (Tatsuhiro Nakamori) |
| Теджа Муппарти (Teja Mupparti) |
| Тендер Ван (Tender Wang) |
| Тим Кэри-Смит (Tim Carey-Smith) |
| Тим Филд (Tim Field) |
| Тимо Штольц (Timo Stolz) |
| Том Браун (Thom Brown) |
| Том Лейн (Tom Lane) |
| Томас Маккей (Thomas Mc Kay) |
| Томас Манро (Thomas Munro) |
| Томас Хабетс (Thomas Habets) |
| Томаш Вондра (Tomas Vondra) |
| Тор Эрик Линнеруд (Tor Erik Linnerud) |
| Торстен Фёрч (Torsten Förtsch) |
| Тристан Партин (Tristan Partin) |
| Трой Фрерикс (Troy Frericks) |
| Тушар Ахуджа (Tushar Ahuja) |
| Тьягу Нунес (Thiago Nunes) |
| Фабрицио де Ройес Мелло (Fabrízio de Royes Mello) |
| Фариас де Оливейра (Farias de Oliveira) |
| Фил Флорент (Phil Florent) |
| Филипп Годфрин (Philippe Godfrin) |
| Флорин Ирион (Florin Irion) |
| Франц-Йозеф Фербер (Franz-Josef Färber) |
| Фёдор Сигаев (Teodor Sigaev) |
| Хайато Курода (Hayato Kuroda) |
| Хайин Тан (Haiying Tang) |
| Хайме Казанова (Jaime Casanova) |
| Хайян Ван (Haiyang Wang) |
| Хамид Ахтар (Hamid Akhtar) |
| Ханс Бушман (Hans Buschmann) |
| Хао Ву (Hao Wu) |
| Хейкки Линнакангас (Heikki Linnakangas) |
| Химаншу Упадхьяя (Himanshu Upadhyaya) |
| Хината Мицуру (Mitsuru Hinata) |
| Хисахиро Каучи (Hisahiro Kauchi) |
| Хит Лорд (Heath Lord) |
| Хоу Чжицзе (Hou Zhijie) |
| Хуан Хосе Сантамария Флеча (Juan José Santamaría Flecha) |
| Хуберт Любачевски (Hubert Lubaczewski) |
| Хунъюй Сонг (Hongyu Song) |
| Хунь Нгуен (Hung Nguyen) |
| Цзиньбао Чен (Jinbao Chen) |
| Цзумин Цзян (Zuming Jiang) |
| Цзюньван Жао (Junwang Zhao) |
| Цзянь Хи (Jian He) |
| Цюань Цзунлян (Quan Zongliang) |
| Чанхун Фей (Changhong Fei) |
| Чжихун Юй (Zhihong Yu) |
| Чжэнь Ли (Zheng Li) |
| Чжэнь Мин Ян (Zhen Ming Yang) |
| Шамай Шарма (Samay Sharma) |
| Швета Маллик (Shveta Mallik) |
| Ши Юй (Shi Yu) |
| Шо Като (Sho Kato) |
| Шраван Кумар (Sravan Kumar) |
| Шрути Говда (Shruthi Gowda) |
| Эван Джонс (Evan Jones) |
| Эд Маст (Ed Maste) |
| Эйлер Тавейра (Euler Taveira) |
| Эммануэль Кенсро (Emmanuel Quincerot) |
| Эндрю Алсуп (Andrew Alsup) |
| Эндрю Гирт (Andrew Gierth) |
| Эндрю Дунстан (Andrew Dunstan) |
| Эндрю Кеспер (Andrew Kesper) |
| Эрвин Брандштеттер (Erwin Brandstetter) |
| Эрик Мутта (Eric Mutta) |
| Эрик Рижкерс (Erik Rijkers) |
| Эцуро Фудзита (Etsuro Fujita) |
| Юго Нагата (Yugo Nagata) |
| Юмю Мо (Youmiu Mo) |
| Юрий Соколов (Yura Sokolov) |
| Юта Кацураги (Yuta Katsuragi) |
| Якуб Вартак (Jakub Wartak) |
| Ян Вик (Jan Wieck) |
| Яньлян Лэй (Yanliang Lei) |
| Япинь Ли (Japin Li) |
E.32. Release 16 #
Release date: 2023-09-14
E.32.1. Overview #
PostgreSQL 16 contains many new features and enhancements, including:
Allow parallelization of
FULLand internal rightOUTERhash joinsAllow logical replication from standby servers
Allow logical replication subscribers to apply large transactions in parallel
Allow monitoring of I/O statistics using the new
pg_stat_ioviewAdd SQL/JSON constructors and identity functions
Improve performance of vacuum freezing
Add support for regular expression matching of user and database names in
pg_hba.conf, and user names inpg_ident.conf
The above items and other new features of PostgreSQL 16 are explained in more detail in the sections below.
E.32.2. Migration to Version 16 #
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 16 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:
Change assignment rules for PL/pgSQL bound cursor variables (Tom Lane) §
Previously, the string value of such variables was set to match the variable name during cursor assignment; now it will be assigned during
OPEN, and will not match the variable name. To restore the previous behavior, assign the desired portal name to the cursor variable beforeOPEN.Disallow
NULLS NOT DISTINCTindexes for primary keys (Daniel Gustafsson) §Change
REINDEX DATABASEand reindexdb to not process indexes on system catalogs (Simon Riggs) § §Processing such indexes is still possible using
REINDEX SYSTEMandreindexdb --system.Tighten
GENERATEDexpression restrictions on inherited and partitioned tables (Amit Langote, Tom Lane) §Columns of parent/partitioned and child/partition tables must all have the same generation status, though now the actual generation expressions can be different.
Remove pg_walinspect functions
pg_get_wal_records_info_till_end_of_wal()andpg_get_wal_stats_till_end_of_wal()(Bharath Rupireddy) §Rename server variable
force_parallel_modetodebug_parallel_query(David Rowley) § §Remove the ability to create views manually with
ON SELECTrules (Tom Lane) §Remove the server variable
vacuum_defer_cleanup_age(Andres Freund) §This has been unnecessary since
hot_standby_feedbackand replication slots were added.Remove server variable
promote_trigger_file(Simon Riggs) §This was used to promote a standby to primary, but is now more easily accomplished with
pg_ctl promoteorpg_promote().Role inheritance now controls the default inheritance status of member roles added during
GRANT(Robert Haas) §The role's default inheritance behavior can be overridden with the new
GRANT ... WITH INHERITclause. This allows inheritance of some roles and not others because the members' inheritance status is set atGRANTtime. Previously the inheritance status of member roles was controlled only by the role's inheritance status, and changes to a role's inheritance status affected all previous and future member roles.Restrict the privileges of
CREATEROLEand its ability to modify other roles (Robert Haas) § §Previously roles with
CREATEROLEprivileges could change many aspects of any non-superuser role. Such changes, including adding members, now require the role requesting the change to haveADMIN OPTIONpermission. For example, they can now change theCREATEDB,REPLICATION, andBYPASSRLSproperties only if they also have those permissions.Remove symbolic links for the postmaster binary (Peter Eisentraut) §
E.32.3. Changes #
Below you will find a detailed account of the changes between PostgreSQL 16 and the previous major release.
E.32.3.1. Server #
E.32.3.1.1. Optimizer #
Allow incremental sorts in more cases, including
DISTINCT(David Rowley) § §Add the ability for aggregates having
ORDER BYorDISTINCTto use pre-sorted data (David Rowley) § § §The new server variable
enable_presorted_aggregatecan be used to disable this.Allow memoize atop a
UNION ALL(Richard Guo) §Allow anti-joins to be performed with the non-nullable input as the inner relation (Richard Guo) §
Allow parallelization of
FULLand internal rightOUTERhash joins (Melanie Plageman, Thomas Munro) §Improve the accuracy of
GINindex access optimizer costs (Ronan Dunklau) §
E.32.3.1.2. General Performance #
Allow more efficient addition of heap and index pages (Andres Freund) § §
During non-freeze operations, perform page freezing where appropriate (Peter Geoghegan) § § §
This makes full-table freeze vacuums less necessary.
Allow window functions to use the faster
ROWSmode internally whenRANGEmode is active but unnecessary (David Rowley) §Allow optimization of always-increasing window functions
ntile(),cume_dist()andpercent_rank()(David Rowley) §Allow aggregate functions
string_agg()andarray_agg()to be parallelized (David Rowley) §Improve performance by caching
RANGEandLISTpartition lookups (Amit Langote, Hou Zhijie, David Rowley) §Allow control of the shared buffer usage by vacuum and analyze (Melanie Plageman) § § §
The
VACUUM/ANALYZEoption isBUFFER_USAGE_LIMIT, and the vacuumdb option is--buffer-usage-limit. The default value is set by server variablevacuum_buffer_usage_limit, which also controls autovacuum.Support
wal_sync_method=fdatasyncon Windows (Thomas Munro) §Allow HOT updates if only
BRIN-indexed columns are updated (Matthias van de Meent, Josef Simanek, Tomas Vondra) §Improve the speed of updating the process title (David Rowley) §
Allow
xid/subxidsearches and ASCII string detection to use vector operations (Nathan Bossart, John Naylor) § § § §ASCII detection is particularly useful for
COPY FROM. Vector operations are also used for some C array searches.Reduce overhead of memory allocations (Andres Freund, David Rowley) §
E.32.3.1.3. Monitoring #
Add system view
pg_stat_ioview to track I/O statistics (Melanie Plageman) § § § § §Record statistics on the last sequential and index scans on tables (Dave Page) §
This information appears in
pg_stat_*_tablesandpg_stat_*_indexes.Record statistics on the occurrence of updated rows moving to new pages (Corey Huinker) §
The
pg_stat_*_tablescolumn isn_tup_newpage_upd.Add speculative lock information to the
pg_lockssystem view (Masahiko Sawada, Noriyoshi Shinoda) §The transaction id is displayed in the
transactionidcolumn and the speculative insertion token is displayed in theobjidcolumn.Add the display of prepared statement result types to the
pg_prepared_statementsview (Dagfinn Ilmari Mannsåker) § §Create subscription statistics entries at subscription creation time so
stats_resetis accurate (Andres Freund) §Previously entries were created only when the first statistics were reported.
Correct the I/O accounting for temp relation writes shown in
pg_stat_database(Melanie Plageman) §Add function
pg_stat_get_backend_subxact()to report on a session's subtransaction cache (Dilip Kumar) §Have
pg_stat_get_backend_idset(),pg_stat_get_backend_activity(), and related functions use the unchanging backend id (Nathan Bossart) §Previously the index values might change during the lifetime of the session.
Report stand-alone backends with a special backend type (Melanie Plageman) §
Add wait event
SpinDelayto report spinlock sleep delays (Andres Freund) §Create new wait event
DSMAllocateto indicate waiting for dynamic shared memory allocation (Thomas Munro) §Previously this type of wait was reported as
DSMFillZeroWrite, which was also used bymmap()allocations.Add the database name to the process title of logical WAL senders (Tatsuhiro Nakamori) §
Physical WAL senders do not display a database name.
Add checkpoint and
REDO LSNinformation tolog_checkpointsmessages (Bharath Rupireddy, Kyotaro Horiguchi) §Provide additional details during client certificate failures (Jacob Champion) §
E.32.3.1.4. Privileges #
Add predefined role
pg_create_subscriptionwith permission to create subscriptions (Robert Haas) §Allow subscriptions to not require passwords (Robert Haas) § § §
This is accomplished with the option
password_required=false.Simplify permissions for
LOCK TABLE(Jeff Davis) §Previously a user's ability to perform
LOCK TABLEat various lock levels was limited to the lock levels required by the commands they had permission to execute on the table. For example, someone withUPDATEpermission could perform all lock levels exceptACCESS SHARE, even though it was a lesser lock level. Now users can issue lesser lock levels if they already have permission for greater lock levels.Allow
ALTER GROUP group_name ADD USER user_nameto be performed withADMIN OPTION(Robert Haas) §Previously
CREATEROLEpermission was required.Allow
GRANTto useWITH ADMIN TRUE/FALSEsyntax (Robert Haas) §Previously only the
WITH ADMIN OPTIONsyntax was supported.Allow roles that create other roles to automatically inherit the new role's rights or the ability to
SET ROLEto the new role (Robert Haas, Shi Yu) § §This is controlled by server variable
createrole_self_grant.Prevent users from changing the default privileges of non-inherited roles (Robert Haas) §
This is now only allowed for inherited roles.
When granting role membership, require the granted-by role to be a role that has appropriate permissions (Robert Haas) §
This is a requirement even when a non-bootstrap superuser is granting role membership.
Allow non-superusers to grant permissions using a granted-by user that is not the current user (Robert Haas) §
The current user still must have sufficient permissions given by the specified granted-by user.
Add
GRANTto control permission to useSET ROLE(Robert Haas) §This is controlled by a new
GRANT ... SEToption.Add dependency tracking to roles which have granted privileges (Robert Haas) §
For example, removing
ADMIN OPTIONwill fail if there are privileges using that option;CASCADEmust be used to revoke dependent permissions.Add dependency tracking of grantors for
GRANTrecords (Robert Haas) §This guarantees that
pg_auth_members.grantorvalues are always valid.Allow multiple role membership records (Robert Haas) § §
Previously a new membership grant would remove a previous matching membership grant, even if other aspects of the grant did not match.
Prevent removal of superuser privileges for the bootstrap user (Robert Haas) §
Restoring such users could lead to errors.
Allow
makeaclitem()to accept multiple privilege names (Robins Tharakan) §Previously only a single privilege name, like
SELECT, was accepted.
E.32.3.1.5. Server Configuration #
Add support for Kerberos credential delegation (Stephen Frost) § § § §
This is enabled with server variable
gss_accept_delegationand libpq connection parametergssdelegation.Allow the SCRAM iteration count to be set with server variable
scram_iterations(Daniel Gustafsson) §Improve performance of server variable management (Tom Lane) § §
Tighten restrictions on which server variables can be reset (Masahiko Sawada) §
Previously, while certain variables, like
transaction_isolation, were not affected byRESET ALL, they could be individually reset in inappropriate situations.Move various
postgresql.confitems into new categories (Shinya Kato) §This also affects the categories displayed in the
pg_settingsview.Prevent configuration file recursion beyond 10 levels (Julien Rouhaud) §
Allow autovacuum to more frequently honor changes to delay settings (Melanie Plageman) § §
Rather than honor changes only at the start of each relation, honor them at the start of each block.
Remove restrictions that archive files be durably renamed (Nathan Bossart) § §
The
archive_commandcommand is now more likely to be called with already-archived files after a crash.Prevent
archive_libraryandarchive_commandfrom being set at the same time (Nathan Bossart) §Previously
archive_librarywould overridearchive_command.Allow the postmaster to terminate children with an abort signal (Tom Lane) §
This allows collection of a core dump for a stuck child process. This is controlled by
send_abort_for_crashandsend_abort_for_kill. The postmaster's-Tswitch is now the same as settingsend_abort_for_crash.Remove the non-functional postmaster
-noption (Tom Lane) §Allow the server to reserve backend slots for roles with
pg_use_reserved_connectionsmembership (Nathan Bossart) §The number of reserved slots is set by server variable
reserved_connections.Allow huge pages to work on newer versions of Windows 10 (Thomas Munro) §
This adds the special handling required to enable huge pages on newer versions of Windows 10.
Add
debug_io_directsetting for developer usage (Thomas Munro, Andres Freund, Bharath Rupireddy) § §While primarily for developers,
wal_sync_method=open_sync/open_datasynchas been modified to not use direct I/O withwal_level=minimal; this is now enabled withdebug_io_direct=wal.Add function
pg_split_walfile_name()to report the segment and timeline values of WAL file names (Bharath Rupireddy) § §
E.32.3.1.6. pg_hba.conf #
Add support for regular expression matching on database and role entries in
pg_hba.conf(Bertrand Drouvot) §Regular expression patterns are prefixed with a slash. Database and role names that begin with slashes need to be double-quoted if referenced in
pg_hba.conf.Improve user-column handling of
pg_ident.confto matchpg_hba.conf(Jelte Fennema) §Specifically, add support for
all, role membership with+, and regular expressions with a leading slash. Any user name that matches these patterns must be double-quoted.Allow include files in
pg_hba.confandpg_ident.conf(Julien Rouhaud) §These are controlled by
include,include_if_exists, andinclude_dir. System viewspg_hba_file_rulesandpg_ident_file_mappingsnow display the file name.Allow
pg_hba.conftokens to be of unlimited length (Tom Lane) §Add rule and map numbers to the system view
pg_hba_file_rules(Julien Rouhaud) §
E.32.3.1.7. Localization #
Determine the default encoding from the locale when using ICU (Jeff Davis) §
Previously the default was always
UTF-8.Have
CREATE DATABASEandCREATE COLLATION'sLOCALEoptions, and initdb and createdb--localeoptions, control non-libc collation providers (Jeff Davis)Previously they only controlled libc providers.
Add predefined collations
unicodeanducs_basic(Peter Eisentraut) §This only works if ICU support is enabled.
Allow custom ICU collation rules to be created (Peter Eisentraut) §
This is done using
CREATE COLLATION's newRULESclause, as well as new options forCREATE DATABASE, createdb, and initdb.Allow Windows to import system locales automatically (Juan José Santamaría Flecha) §
Previously, only ICU locales could be imported on Windows.
E.32.3.2. Logical Replication #
Allow logical decoding on standbys (Bertrand Drouvot, Andres Freund, Amit Khandekar) § § §
Snapshot WAL records are required for logical slot creation but cannot be created on standbys. To avoid delays, the new function
pg_log_standby_snapshot()allows creation of such records.Add server variable to control how logical decoding publishers transfer changes and how subscribers apply them (Shi Yu) § § §
The variable is
debug_logical_replication_streaming.Allow logical replication initial table synchronization to copy rows in binary format (Melih Mutlu) §
This is only possible for subscriptions marked as binary.
Allow parallel application of logical replication (Hou Zhijie, Wang Wei, Amit Kapila) § § §
The
CREATE SUBSCRIPTIONSTREAMINGoption now supportsparallelto enable application of large transactions by parallel workers. The number of parallel workers is controlled by the new server variablemax_parallel_apply_workers_per_subscription. Wait eventsLogicalParallelApplyMain,LogicalParallelApplyStateChange, andLogicalApplySendDatawere also added. Columnleader_pidwas added to system viewpg_stat_subscriptionto track parallel activity.Improve performance for logical replication apply without a primary key (Onder Kalaci, Amit Kapila) §
Specifically,
REPLICA IDENTITY FULLcan now use btree indexes rather than sequentially scanning the table to find matches.Allow logical replication subscribers to process only changes that have no origin (Vignesh C, Amit Kapila) § §
This can be used to avoid replication loops. This is controlled by the new
CREATE SUBSCRIPTION ... ORIGINoption.Perform logical replication
SELECTand DML actions as the table owner (Robert Haas) § §This improves security and now requires subscription owners to be either superusers or to have
SET ROLEpermission on all roles owning tables in the replication set. The previous behavior of performing all operations as the subscription owner can be enabled with the subscriptionrun_as_owneroption.Have
wal_retrieve_retry_intervaloperate on a per-subscription basis (Nathan Bossart) §Previously the retry time was applied globally. This also adds wait events >
LogicalRepLauncherDSAandLogicalRepLauncherHash.
E.32.3.3. Utility Commands #
Add
EXPLAINoptionGENERIC_PLANto display the generic plan for a parameterized query (Laurenz Albe) §Allow a
COPY FROMvalue to map to a column'sDEFAULT(Israel Barth Rubio) §Allow
COPYinto foreign tables to add rows in batches (Andrey Lepikhov, Etsuro Fujita) §This is controlled by the postgres_fdw option
batch_size.Allow the
STORAGEtype to be specified byCREATE TABLE(Teodor Sigaev, Aleksander Alekseev) § §Previously only
ALTER TABLEcould control this.Allow truncate triggers on foreign tables (Yugo Nagata) §
Allow
VACUUMand vacuumdb to only processTOASTtables (Nathan Bossart) §This is accomplished by having
VACUUMturn offPROCESS_MAINor by vacuumdb using the--no-process-mainoption.Add
VACUUMoptions to skip or update all frozen statistics (Tom Lane, Nathan Bossart) §The options are
SKIP_DATABASE_STATSandONLY_DATABASE_STATS.Change
REINDEX DATABASEandREINDEX SYSTEMto no longer require an argument (Simon Riggs) § §Previously the database name had to be specified.
Allow
CREATE STATISTICSto generate a statistics name if none is specified (Simon Riggs) §
E.32.3.4. Data Types #
Allow non-decimal integer literals (Peter Eisentraut) §
For example,
0x42F,0o273, and0b100101.Allow
NUMERICto process hexadecimal, octal, and binary integers of any size (Dean Rasheed) §Previously only unquoted eight-byte integers were supported with these non-decimal bases.
Allow underscores in integer and numeric constants (Peter Eisentraut, Dean Rasheed) §
This can improve readability for long strings of digits.
Accept the spelling
+infinityin datetime input (Vik Fearing) §Prevent the specification of
epochandinfinitytogether with other fields in datetime strings (Joseph Koshakow) §Remove undocumented support for date input in the form
Y(Joseph Koshakow) §yearMmonthDdayAdd functions
pg_input_is_valid()andpg_input_error_info()to check for type conversion errors (Tom Lane) § §
E.32.3.5. General Queries #
E.32.3.6. Functions #
Add SQL/JSON constructors (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Amit Langote) §
The new functions
JSON_ARRAY(),JSON_ARRAYAGG(),JSON_OBJECT(), andJSON_OBJECTAGG()are part of the SQL standard.Add SQL/JSON object checks (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov, Amit Langote, Andrew Dunstan) §
The
IS JSONchecks include checks for values, arrays, objects, scalars, and unique keys.Allow JSON string parsing to use vector operations (John Naylor) §
Improve the handling of full text highlighting function
ts_headline()forORandNOTexpressions (Tom Lane) §Add functions to add, subtract, and generate
timestamptzvalues in a specified time zone (Przemyslaw Sztoch, Gurjeet Singh) §The functions are
date_add(),date_subtract(), andgenerate_series().Change
date_trunc(unit, timestamptz, time_zone)to be an immutable function (Przemyslaw Sztoch) §This allows the creation of expression indexes using this function.
Add server variable
SYSTEM_USER(Bertrand Drouvot) §This reports the authentication method and its authenticated user.
Add functions
array_sample()andarray_shuffle()(Martin Kalcher) §Add aggregate function
ANY_VALUE()which returns any value from a set (Vik Fearing) §Add function
random_normal()to supply normally-distributed random numbers (Paul Ramsey) §Add error function
erf()and its complementerfc()(Dean Rasheed) §Improve the accuracy of numeric
power()for integer exponents (Dean Rasheed) §Add
XMLSERIALIZE()optionINDENTto pretty-print its output (Jim Jones) §Change
pg_collation_actual_version()to return a reasonable value for the default collation (Jeff Davis) §Previously it returned
NULL.Allow
pg_read_file()andpg_read_binary_file()to ignore missing files (Kyotaro Horiguchi) §Add byte specification (
B) topg_size_bytes()(Peter Eisentraut) §Allow
to_reg* functions to accept numeric OIDs as input (Tom Lane) §
Add the ability to get the current function's OID in PL/pgSQL (Pavel Stehule) §
This is accomplished with
GET DIAGNOSTICS variable = PG_ROUTINE_OID.
Add libpq connection option
require_authto specify a list of acceptable authentication methods (Jacob Champion) §This can also be used to disallow certain authentication methods.
Allow multiple libpq-specified hosts to be randomly selected (Jelte Fennema) § §
This is enabled with
load_balance_hosts=randomand can be used for load balancing.Add libpq option
sslcertmodeto control transmission of the client certificate (Jacob Champion) §The option values are
disable,allow, andrequire.Allow libpq to use the system certificate pool for certificate verification (Jacob Champion, Thomas Habets) §
This is enabled with
sslrootcert=system, which also enablessslmode=verify-full.
E.32.3.9. Client Applications #
Allow psql to control the maximum width of header lines in expanded format (Platon Pronko) §
This is controlled by
xheader_width.Add psql command
\drgto show role membership details (Pavel Luzanov) § §The
Member ofoutput column has been removed from\duand\dgbecause this new command displays this information in more detail.Allow psql's access privilege commands to show system objects (Nathan Bossart) § §
Add
FOREIGNdesignation to psql\d+for foreign table children and partitions (Ian Lawrence Barwick) §Prevent
\df+from showing function source code (Isaac Morland) §Function bodies are more easily viewed with
\sf.Allow psql to submit queries using the extended query protocol (Peter Eisentraut) §
Passing arguments to such queries is done using the new psql
\bindcommand.Allow psql
\watchto limit the number of executions (Andrey Borodin) §The
\watchoptions can now be named when specified.Detect invalid values for psql
\watch, and allow zero to specify no delay (Andrey Borodin) §Allow psql scripts to obtain the exit status of shell commands and queries (Corey Huinker, Tom Lane) § §
The new psql control variables are
SHELL_ERRORandSHELL_EXIT_CODE.Various psql tab completion improvements (Vignesh C, Aleksander Alekseev, Dagfinn Ilmari Mannsåker, Shi Yu, Michael Paquier, Ken Kato, Peter Smith) § § § § § § § § § § § §
Add pg_dump control of dumping child tables and partitions (Gilles Darold) §
The new options are
--table-and-children,--exclude-table-and-children, and--exclude-table-data-and-children.Add LZ4 and Zstandard compression to pg_dump (Georgios Kokolatos, Justin Pryzby)
Allow pg_dump and pg_basebackup to use
longmode for compression (Justin Pryzby) § § § §Improve pg_dump to accept a more consistent compression syntax (Georgios Kokolatos) §
Options like
--compress=gzip:5.
E.32.3.10. Server Applications #
Add initdb option to set server variables for the duration of initdb and all future server starts (Tom Lane) §
The option is
-c name=value.Add options to createuser to control more user options (Shinya Kato) § §
Specifically, the new options control the valid-until date, bypassing of row-level security, and role membership.
Deprecate createuser option
--role(Nathan Bossart) § §This option could be easily confused with new createuser role membership options, so option
--member-ofhas been added with the same functionality. The--roleoption can still be used.Allow control of vacuumdb schema processing (Gilles Darold) §
These are controlled by options
--schemaand--exclude-schema.Use new
VACUUMoptions to improve the performance of vacuumdb (Tom Lane, Nathan Bossart) §Have pg_upgrade set the new cluster's locale and encoding (Jeff Davis) §
This removes the requirement that the new cluster be created with the same locale and encoding settings.
Add pg_upgrade option to specify the default transfer mode (Peter Eisentraut) §
The option is
--copy.Improve pg_basebackup to accept numeric compression options (Georgios Kokolatos, Michael Paquier) §
Options like
--compress=server-5are now supported.Fix pg_basebackup to handle tablespaces stored in the
PGDATAdirectory (Robert Haas) §Add pg_waldump option
--save-fullpageto dump full page images (David Christensen) §Allow pg_waldump options
-t/--timelineto accept hexadecimal values (Peter Eisentraut) §Add support for progress reporting to pg_verifybackup (Masahiko Sawada) §
Allow pg_rewind to properly track timeline changes (Heikki Linnakangas) § §
Previously if pg_rewind was run after a timeline switch but before a checkpoint was issued, it might incorrectly determine that a rewind was unnecessary.
Have pg_receivewal and pg_recvlogical cleanly exit on
SIGTERM(Christoph Berg) §This signal is often used by systemd.
E.32.3.11. Source Code #
Build ICU support by default (Jeff Davis) §
This removes build flag
--with-icuand adds flag--without-icu.Add support for SSE2 (Streaming SIMD Extensions 2) vector operations on x86-64 architectures (John Naylor) §
Add support for Advanced SIMD (Single Instruction Multiple Data) (NEON) instructions on ARM architectures (Nathan Bossart) §
Have Windows binaries built with MSVC use
RandomizedBaseAddress(ASLR) (Michael Paquier) §This was already enabled on MinGW builds.
Prevent extension libraries from exporting their symbols by default (Andres Freund, Tom Lane) § §
Functions that need to be called from the core backend or other extensions must now be explicitly marked
PGDLLEXPORT.Require Windows 10 or newer versions (Michael Paquier, Juan José Santamaría Flecha) §
Previously Windows Vista and Windows XP were supported.
Require Perl version 5.14 or later (John Naylor) §
Require Bison version 2.3 or later (John Naylor) §
Require Flex version 2.5.35 or later (John Naylor) §
Require MIT Kerberos for GSSAPI support (Stephen Frost) §
Remove support for Visual Studio 2013 (Michael Paquier) §
Remove support for HP-UX (Thomas Munro) §
Remove support for HP/Intel Itanium (Thomas Munro) §
Remove support for M68K, M88K, M32R, and SuperH CPU architectures (Thomas Munro) § §
Remove libpq support for SCM credential authentication (Michael Paquier) §
Backend support for this authentication method was removed in PostgresSQL 9.1.
Add meson build system (Andres Freund, Nazir Bilal Yavuz, Peter Eisentraut) §
This eventually will replace the Autoconf and Windows-based MSVC build systems.
Allow control of the location of the openssl binary used by the build system (Peter Eisentraut) §
Make finding openssl program a configure or meson option
Add build option to allow testing of small table segment sizes (Andres Freund) §
The build options are
--with-segsize-blocksand-Dsegsize_blocks.Add pgindent options (Andrew Dunstan) § § § § § § §
The new options are
--show-diff,--silent-diff,--commit, and--help, and allow multiple--excludeoptions. Also require the typedef file to be explicitly specified. Options--code-baseand--buildwere also removed.Add pg_bsd_indent source code to the main tree (Tom Lane) §
Improve make_ctags and make_etags (Yugo Nagata) §
Adjust
pg_attributecolumns for efficiency (Peter Eisentraut) §
E.32.3.12. Additional Modules #
Improve use of extension-based indexes on boolean columns (Zongliang Quan, Tom Lane) §
Add support for Daitch-Mokotoff Soundex to fuzzystrmatch (Dag Lem) §
Allow auto_explain to log values passed to parameterized statements (Dagfinn Ilmari Mannsåker) §
This affects queries using server-side
PREPARE/EXECUTEand client-side parse/bind. Logging is controlled byauto_explain.log_parameter_max_length; by default query parameters will be logged with no length restriction.Have auto_explain's
log_verbosemode honor the value ofcompute_query_id(Atsushi Torikoshi) §Previously even if
compute_query_idwas enabled,log_verbosewas not showing the query identifier.Change the maximum length of ltree labels from 256 to 1000 and allow hyphens (Garen Torikian) §
Have
pg_stat_statementsnormalize constants used in utility commands (Michael Paquier) §Previously constants appeared instead of placeholders, e.g.,
$1.Add pg_walinspect function
pg_get_wal_block_info()to report WAL block information (Michael Paquier, Melanie Plageman, Bharath Rupireddy) § § § §Change how pg_walinspect functions
pg_get_wal_records_info()andpg_get_wal_stats()interpret ending LSNs (Bharath Rupireddy) §Previously ending LSNs which represent nonexistent WAL locations would generate an error, while they will now be interpreted as the end of the WAL.
Add detailed descriptions of WAL records in pg_walinspect and pg_waldump (Melanie Plageman, Peter Geoghegan) § § § §
Add pageinspect function
bt_multi_page_stats()to report statistics on multiple pages (Hamid Akhtar) §This is similar to
bt_page_stats()except it can report on a range of pages.Add empty range output column to pageinspect function
brin_page_items()(Tomas Vondra) §Redesign archive modules to be more flexible (Nathan Bossart) §
Initialization changes will require modules written for older versions of Postgres to be updated.
Correct inaccurate pg_stat_statements row tracking extended query protocol statements (Sami Imseih) §
Add pg_buffercache function
pg_buffercache_usage_counts()to report usage totals (Nathan Bossart) §Add pg_buffercache function
pg_buffercache_summary()to report summarized buffer statistics (Melih Mutlu) §Allow the schemas of required extensions to be referenced in extension scripts using the new syntax
@extschema:referenced_extension_name@(Regina Obe) §Allow required extensions to be marked as non-relocatable using
no_relocate(Regina Obe) §This allows
@extschema:referenced_extension_name@to be treated as a constant for the lifetime of the extension.
E.32.3.12.1. postgres_fdw #
Allow postgres_fdw to do aborts in parallel (Etsuro Fujita) §
This is enabled with postgres_fdw option
parallel_abort.Make
ANALYZEon foreign postgres_fdw tables more efficient (Tomas Vondra) §The postgres_fdw option
analyze_samplingcontrols the sampling method.Restrict shipment of
reg* type constants in postgres_fdw to those referencing built-in objects or extensions marked as shippable (Tom Lane) §Have postgres_fdw and dblink handle interrupts during connection establishment (Andres Freund) §
E.32.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 |
| Adam Mackler |
| Adrian Klaver |
| Ahsan Hadi |
| Ajin Cherian |
| Ajit Awekar |
| Alan Hodgson |
| Aleksander Alekseev |
| Alex Denman |
| Alex Kozhemyakin |
| Alexander Korolev |
| Alexander Korotkov |
| Alexander Lakhin |
| Alexander Pyhalov |
| Alexey Borzov |
| Alexey Ermakov |
| Alexey Makhmutov |
| Álvaro Herrera |
| Amit Kapila |
| Amit Khandekar |
| Amit Langote |
| Amul Sul |
| Anastasia Lubennikova |
| Anban Company |
| Andreas Dijkman |
| Andreas Karlsson |
| Andreas Scherbaum |
| Andrei Zubkov |
| Andres Freund |
| Andrew Alsup |
| Andrew Bille |
| Andrew Dunstan |
| Andrew Gierth |
| Andrew Kesper |
| Andrey Borodin |
| Andrey Lepikhov |
| Andrey Sokolov |
| Ankit Kumar Pandey |
| Ante Kresic |
| Anton Melnikov |
| Anton Sidyakin |
| Anton Voloshin |
| Antonin Houska |
| Arne Roland |
| Artem Anisimov |
| Arthur Zakirov |
| Ashutosh Bapat |
| Ashutosh Sharma |
| Asim Praveen |
| Atsushi Torikoshi |
| Ayaki Tachikake |
| Balazs Szilfai |
| Benoit Lobréau |
| Bernd Helmle |
| Bertrand Drouvot |
| Bharath Rupireddy |
| Bilva Sanaba |
| Bob Krier |
| Boris Zentner |
| Brad Nicholson |
| Brar Piening |
| Bruce Momjian |
| Bruno da Silva |
| Carl Sopchak |
| Cary Huang |
| Changhong Fei |
| Chris Travers |
| Christoph Berg |
| Christophe Pettus |
| Corey Huinker |
| Craig Ringer |
| Curt Kolovson |
| Dag Lem |
| Dagfinn Ilmari Mannsåker |
| Daniel Gustafsson |
| Daniel Vérité |
| Daniel Watzinger |
| Daniel Westermann |
| Daniele Varrazzo |
| Daniil Anisimov |
| Danny Shemesh |
| Dave Page |
| David Christensen |
| David G. Johnston |
| David Geier |
| David Gilman |
| David Kimura |
| David Rowley |
| David Steele |
| David Turon |
| David Zhang |
| Davinder Singh |
| Dean Rasheed |
| Denis Laxalde |
| Dilip Kumar |
| Dimos Stamatakis |
| Dmitriy Kuzmin |
| Dmitry Astapov |
| Dmitry Dolgov |
| Dmitry Koval |
| Dong Wook Lee |
| Dongming Liu |
| Drew DeVault |
| Duncan Sands |
| Ed Maste |
| Egor Chindyaskin |
| Ekaterina Kiryanova |
| Elena Indrupskaya |
| Emmanuel Quincerot |
| Eric Mutta |
| Erik Rijkers |
| Erki Eessaar |
| Erwin Brandstetter |
| Etsuro Fujita |
| Eugeny Zhuzhnev |
| Euler Taveira |
| Evan Jones |
| Evgeny Morozov |
| Fabrízio de Royes Mello |
| Farias de Oliveira |
| Florin Irion |
| Franz-Josef Färber |
| Garen Torikian |
| Georgios Kokolatos |
| Gilles Darold |
| Greg Stark |
| Guillaume Lelarge |
| Gunnar Bluth |
| Gunnar Morling |
| Gurjeet Singh |
| Haiyang Wang |
| Haiying Tang |
| Hamid Akhtar |
| Hans Buschmann |
| Hao Wu |
| Hayato Kuroda |
| Heath Lord |
| Heikki Linnakangas |
| Himanshu Upadhyaya |
| Hisahiro Kauchi |
| Hongyu Song |
| Hubert Lubaczewski |
| Hung Nguyen |
| Ian Barwick |
| Ibrar Ahmed |
| Ilya Gladyshev |
| Ilya Nenashev |
| Isaac Morland |
| Israel Barth Rubio |
| Jacob Champion |
| Jacob Speidel |
| Jaime Casanova |
| Jakub Wartak |
| James Coleman |
| James Inform |
| James Vanns |
| Jan Wieck |
| Japin Li |
| Jeevan Ladhe |
| Jeff Davis |
| Jeff Janes |
| Jehan-Guillaume de Rorthais |
| Jelte Fennema |
| Jian He |
| Jim Jones |
| Jinbao Chen |
| Joe Conway |
| Joel Jacobson |
| John Naylor |
| Jonathan Katz |
| Josef Simanek |
| Joseph Koshakow |
| Juan José Santamaría Flecha |
| Julien Rouhaud |
| Julien Roze |
| Junwang Zhao |
| Justin Pryzby |
| Justin Zhang |
| Karina Litskevich |
| Karl O. Pinc |
| Keisuke Kuroda |
| Ken Kato |
| Kevin McKibbin |
| Kieran McCusker |
| Kirk Wolak |
| Konstantin Knizhnik |
| Koshi Shibagaki |
| Kotaro Kawamoto |
| Kui Liu |
| Kyotaro Horiguchi |
| Lakshmi Narayanan Sreethar |
| Laurence Parry |
| Laurenz Albe |
| Luca Ferrari |
| Lukas Fittl |
| Maciek Sakrejda |
| Magnus Hagander |
| Maja Zaloznik |
| Marcel Hofstetter |
| Marina Polyakova |
| Mark Dilger |
| Marko Tiikkaja |
| Markus Winand |
| Martijn van Oosterhout |
| Martin Jurca |
| Martin Kalcher |
| Mary Xu |
| Masahiko Sawada |
| Masahiro Ikeda |
| Masao Fujii |
| Mason Sharp |
| Matheus Alcantara |
| Mats Kindahl |
| Matthias van de Meent |
| Matthijs van der Vleuten |
| Maxim Orlov |
| Maxim Yablokov |
| Mehmet Emin Karakas |
| Melanie Plageman |
| Melih Mutlu |
| Micah Gates |
| Michael Banck |
| Michael Paquier |
| Michail Nikolaev |
| Michel Pelletier |
| Mike Oh |
| Mikhail Gribkov |
| Mingli Zhang |
| Miroslav Bendik |
| Mitsuru Hinata |
| Myo Wai Thant |
| Naeem Akhter |
| Naoki Okano |
| Nathan Bossart |
| Nazir Bilal Yavuz |
| Neha Sharma |
| Nick Babadzhanian |
| Nicola Contu |
| Nikhil Shetty |
| Nikita Glukhov |
| Nikolay Samokhvalov |
| Nikolay Shaplov |
| Nishant Sharma |
| Nitin Jadhav |
| Noah Misch |
| Noboru Saito |
| Noriyoshi Shinoda |
| Nuko Yokohama |
| Oleg Bartunov |
| Oleg Tselebrovskiy |
| Olly Betts |
| Onder Kalaci |
| Onur Tirtir |
| Pablo Federico |
| Palle Girgensohn |
| Paul Guo |
| Paul Jungwirth |
| Paul Ramsey |
| Pavel Borisov |
| Pavel Kulakov |
| Pavel Luzanov |
| Pavel Stehule |
| Peifeng Qiu |
| Peter Eisentraut |
| Peter Geoghegan |
| Peter Smith |
| Phil Florent |
| Philippe Godfrin |
| Platon Pronko |
| Przemyslaw Sztoch |
| Rachel Heaton |
| Ranier Vilela |
| Regina Obe |
| Reid Thompson |
| Reiner Peterke |
| Richard Guo |
| Riivo Kolka |
| Rishu Bagga |
| Robert Haas |
| Robert Sjöblom |
| Robert Treat |
| Roberto Mello |
| Robins Tharakan |
| Roman Zharkov |
| Ronan Dunklau |
| Rushabh Lathia |
| Ryo Matsumura |
| Samay Sharma |
| Sami Imseih |
| Sandeep Thakkar |
| Sandro Santilli |
| Sebastien Flaesch |
| Sébastien Lardière |
| Sehrope Sarkuni |
| Sergey Belyashov |
| Sergey Pankov |
| Sergey Shinderuk |
| Shi Yu |
| Shinya Kato |
| Sho Kato |
| Shruthi Gowda |
| Shveta Mallik |
| Simon Riggs |
| Sindy Senorita |
| Sirisha Chamarthi |
| Sravan Kumar |
| Stéphane Tachoires |
| Stephen Frost |
| Steve Chavez |
| Stone Tickle |
| Sven Klemm |
| Takamichi Osumi |
| Takeshi Ideriha |
| Tatsuhiro Nakamori |
| Tatsuo Ishii |
| Teja Mupparti |
| Tender Wang |
| Teodor Sigaev |
| Thiago Nunes |
| Thom Brown |
| Thomas Habets |
| Thomas Mc Kay |
| Thomas Munro |
| Tim Carey-Smith |
| Tim Field |
| Timo Stolz |
| Tom Lane |
| Tomas Vondra |
| Tor Erik Linnerud |
| Torsten Förtsch |
| Tristan Partin |
| Troy Frericks |
| Tushar Ahuja |
| Valerie Woolard |
| Vibhor Kumar |
| Victor Spirin |
| Victoria Shepard |
| Vignesh C |
| Vik Fearing |
| Vitaly Burovoy |
| Vitaly Davydov |
| Wang Wei |
| Wenjing Zeng |
| Whale Song |
| Will Mortensen |
| Wolfgang Walther |
| Xin Wen |
| Xing Guo |
| Xingwang Xu |
| XueJing Zhao |
| Yanliang Lei |
| Youmiu Mo |
| Yugo Nagata |
| Yura Sokolov |
| Yuta Katsuragi |
| Zhen Mingyang |
| Zheng Li |
| Zhihong Yu |
| Zhijie Hou |
| Zongliang Quan |
| Zuming Jiang |