E.15. Выпуск 16#

E.15. Выпуск 16

E.15. Выпуск 16 #

Дата релиза:  2023-09-14

E.15.1. Обзор #

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

  • Разрешена параллелизация FULL и внутреннего правого OUTER хэш-соединения

  • Разрешена логическая репликация с резервных серверов

  • Разрешено подписчикам логической репликации применять большие транзакции параллельно

  • Разрешено мониторинг статистики I/O с использованием нового представления pg_stat_io

  • Добавлены SQL/JSON конструкторы и функции идентичности

  • Улучшена производительность замораживания vacuum

  • Добавлена поддержка сопоставления регулярных выражений для имен пользователей и баз данных в pg_hba.conf, и имен пользователей в pg_ident.conf

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

E.15.2. Миграция на версию 16 #

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

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

  • Изменены правила присвоения для PL/pgSQL связанных переменных курсора (Tom Lane) §

    Ранее строковое значение таких переменных устанавливалось в соответствии с именем переменной при присвоении курсора; теперь оно будет присваиваться во время OPEN, и не будет совпадать с именем переменной. Чтобы восстановить прежнее поведение, присвойте желаемое имя портала переменной курсора перед OPEN.

  • Запрещены индексы NULLS NOT DISTINCT для первичных ключей (Даниэль Густафссон) §

  • Изменено REINDEX DATABASE и reindexdb, чтобы не обрабатывать индексы в системных каталогах (Саймон Риггс) § §

    Обработка таких индексов все еще возможна с использованием REINDEX SYSTEM и reindexdb --system.

  • Ужесточены ограничения выражений GENERATED на унаследованных и секционированных таблицах (Амит Ланготе, Том Лейн) §

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

  • Удалены функции pg_walinspect pg_get_wal_records_info_till_end_of_wal() и pg_get_wal_stats_till_end_of_wal() (Bharath Rupireddy) §

  • Переименована серверная переменная force_parallel_mode в debug_parallel_query (Дэвид Роули) § §

  • Удалена возможность создавать представления вручную с помощью правил ON SELECT (Tom Lane) §

  • Удалена серверная переменная vacuum_defer_cleanup_age (Андрес Фройнд) §

    Это было ненужно с тех пор, как hot_standby_feedback и слоты репликации были добавлены.

  • Переменная сервера promote_trigger_file удалена (Саймон Риггс) §

    Это использовалось для повышения резервного сервера до основного, но теперь это легче выполняется с помощью pg_ctl promote или pg_promote().

  • Удалены серверные переменные только для чтения lc_collate и lc_ctype (Петер Айзентраут) §

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

  • Наследование ролей теперь контролирует статус наследования по умолчанию для добавленных ролей-участников во время GRANT (Роберт Хаас) §

    Поведение наследования по умолчанию для роли может быть переопределено с помощью нового предложения GRANT ... WITH INHERIT. Это позволяет наследовать некоторые роли, а не другие, потому что статус наследования участников устанавливается во время GRANT. Ранее статус наследования ролей-участников контролировался только статусом наследования роли, и изменения в статусе наследования роли влияли на все предыдущие и будущие роли-участники.

  • Ограничены привилегии CREATEROLE и его способность изменять другие роли (Роберт Хаас) § §

    Ранее роли с привилегиями CREATEROLE могли изменять многие аспекты любой роли, не являющейся суперпользователем. Такие изменения, включая добавление участников, теперь требуют, чтобы роль, запрашивающая изменение, имела разрешение ADMIN OPTION. Например, теперь они могут изменять свойства CREATEDB, REPLICATION и BYPASSRLS только в том случае, если у них также есть эти разрешения.

  • Символические ссылки для бинарного файла postmaster были удалены (Петер Айзенраут) §

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

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

E.15.3.1. Сервер #

E.15.3.1.1. Оптимизатор #
  • Разрешены инкрементные сортировки в большем числе случаев, включая DISTINCT (Дэвид Роули) § §

  • Добавлена возможность для агрегатов с ORDER BY или DISTINCT использовать предварительно отсортированные данные (Дэвид Роули) § § §

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

  • Разрешено использование мемоизации поверх UNION ALL (Ричард Гуо) §

  • Разрешено выполнение анти-соединений с ненулевым вводом в качестве внутреннего отношения (Ричард Гуо) §

  • Разрешена параллелизация FULL и внутренних правых OUTER хеш-соединений (Мелани Плагеман, Томас Мунро) §

  • Улучшена точность оценок стоимости доступа к индексу GIN оптимизатором (Ronan Dunklau) §

E.15.3.1.2. Общая производительность #
  • Разрешено более эффективное добавление страниц кучи и индекса (Андрес Фройнд) § §

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

    Это делает полные вакуумы заморозки таблиц менее необходимыми.

  • Разрешено оконным функциям использовать более быстрый ROWS режим внутренне, когда активен, но не требуется режим RANGE (Дэвид Роули) §

  • Разрешена оптимизация всегда увеличивающихся оконных функций ntile(), cume_dist() и percent_rank() (David Rowley) §

  • Разрешено агрегатным функциям string_agg() и array_agg() быть распараллелены (David Rowley) §

  • Улучшена производительность за счет кэширования RANGE и LIST поиска разделов (Amit Langote, Hou Zhijie, David Rowley) §

  • Разрешено управление использованием разделяемого буфера вакуумом и анализом (Мелани Плагеман) § § §

    Опция VACUUM/ANALYZE - это BUFFER_USAGE_LIMIT, а опция vacuumdb - это --buffer-usage-limit. Значение по умолчанию задается серверной переменной vacuum_buffer_usage_limit, которая также контролирует autovacuum.

  • Поддержка wal_sync_method=fdatasync на Windows (Томас Мунро) §

  • Разрешены обновления с HOT, если обновлены только колонки, индексированные с помощью BRIN (Маттиас ван де Меент, Йозеф Симанек, Томаш Вондра) §

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

  • Разрешены поиски xid/subxid и обнаружение строк в ASCII с использованием векторных операций (Натан Боссарт, Джон Нейлор) § § § §

    ASCII обнаружение особенно полезно для COPY FROM. Векторные операции также использованы для некоторых поисков в массивах C.

  • Снижена нагрузка на выделение памяти (Андрес Фройнд, Дэвид Роули) §

E.15.3.1.3. Мониторинг #
  • Добавлено системное представление pg_stat_io для отслеживания статистики I/O (Мелани Плагеман) § § § § §

  • Запись статистики о последних последовательных и индексных сканированиях таблиц (Дэйв Пейдж) §

    Эта информация отображается в pg_stat_*_tables и pg_stat_*_indexes.

  • Запись статистики о случаях перемещения обновленных строк на новые страницы (Кори Хуинкер) §

    Колонка pg_stat_*_tables n_tup_newpage_upd.

  • Добавлена информация о спекулятивных блокировках в системное представление pg_locks (Масахико Савада, Норийоши Шинода) §

    Идентификатор транзакции отображается в transactionid столбце, а токен спекулятивной вставки отображается в objid столбце.

  • Добавлено отображение типов результатов подготовленных операторов в представление pg_prepared_statements (Дагфинн Илмари Маннсокер) § §

  • Созданы записи статистики подписки во время создания подписки, чтобы stats_reset был точным (Андрес Фройнд) §

    Ранее записи создавались только при первом сообщении о статистике.

  • Исправлен учет I/O для записей временных отношений, показанных в pg_stat_database (Мелани Плагеман) §

  • Добавлена функция pg_stat_get_backend_subxact() для отчета о кэше подтранзакций сессии (Дилип Кумар) §

  • Были использованы pg_stat_get_backend_idset(), pg_stat_get_backend_activity() и связанные функции с использованием неизменяемого идентификатора бэкенда (Натан Боссарт) §

    Ранее значения индекса могли изменяться в течение сессии.

  • Отдельные серверные процессы были отмечены специальным типом серверного процесса (Мелани Плагеман) §

  • Добавлено событие ожидания SpinDelay для отчета о задержках сна спинлока (Андрес Фройнд) §

  • Создано новое событие ожидания DSMAllocate для указания ожидания выделения динамической общей памяти (Томас Мунро) §

    Ранее этот тип ожидания был сообщен как DSMFillZeroWrite, который также использовался для выделений mmap().

  • Добавлено имя базы данных в заголовок процесса логических отправителей WAL (Tatsuhiro Nakamori) §

    Физические отправители WAL не отображают имя базы данных.

  • Добавлена информация о контрольной точке и REDO LSN в сообщения log_checkpoints (Бхарат Рупиредди, Кётаро Хоригучи) §

  • Предоставлены дополнительные детали при сбоях клиентского сертификата (Джейкоб Чемпион) §

E.15.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.

  • Разрешено GRANT использовать синтаксис WITH ADMIN TRUE/FALSE (Роберт Хаас) §

    Ранее поддерживался только синтаксис WITH ADMIN OPTION.

  • Разрешено ролям, которые создают другие роли, автоматически наследовать права новой роли или возможность SET ROLE для новой роли (Роберт Хаас, Ши Ю) § §

    Это контролируется серверной переменной createrole_self_grant.

  • Предотвращено изменение пользователями привилегий по умолчанию для неунаследованных ролей (Роберт Хаас) §

    Это теперь разрешено только для унаследованных ролей.

  • При предоставлении членства в роли требуется, чтобы роль, предоставляющая права, была ролью, имеющей соответствующие разрешения (Роберт Хаас) §

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

  • Разрешено несуперпользователям предоставлять разрешения, используя пользователя, предоставившего права, который не является текущим пользователем (Роберт Хаас) §

    Текущий пользователь все еще должен иметь достаточные разрешения, предоставленные указанным пользователем, который предоставил.

  • Добавлена GRANT для управления разрешением на использование SET ROLE (Роберт Хаас) §

    Это контролируется новой опцией GRANT ... SET.

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

    Например, удаление ADMIN OPTION завершится неудачей, если существуют привилегии, использующие эту опцию; необходимо использовать CASCADE для отзыва зависимых разрешений.

  • Добавлено отслеживание зависимостей грантодателей для записей GRANT (Роберт Хаас) §

    Это гарантирует, что pg_auth_members.grantor значения всегда действительны.

  • Разрешено наличие нескольких записей членства в роли (Роберт Хаас) § §

    Ранее новое предоставление членства удаляло бы предыдущее соответствующее предоставление членства, даже если другие аспекты предоставления не совпадали.

  • Предотвращено удаление привилегий суперпользователя для пользователя начальной загрузки (Роберт Хаас) §

    Восстановление таких пользователей могло привести к ошибкам.

  • Разрешено makeaclitem() принимать несколько имен привилегий (Робинс Тхаракан) §

    Ранее принималось только одно имя привилегии, например, SELECT.

E.15.3.1.5. Конфигурация сервера #
  • Добавлена поддержка делегирования учетных данных Kerberos (Stephen Frost) § § § §

    Это было включено с помощью серверной переменной gss_accept_delegation и параметра подключения libpq gssdelegation.

  • Позволено установить количество итераций SCRAM с помощью серверной переменной scram_iterations (Даниэль Густафссон) §

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

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

    Ранее, хотя некоторые переменные, такие как transaction_isolation, не затрагивались RESET ALL, они могли быть индивидуально сброшены в неподходящих ситуациях.

  • Перемещены различные элементы postgresql.conf в новые категории (Shinya Kato) §

    Это также влияет на категории, отображаемые в представлении pg_settings.

  • Предотвращена рекурсия конфигурационного файла более чем на 10 уровней (Жюльен Рухауд) §

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

    Вместо того чтобы учитывать изменения только в начале каждой связи, они учитываются в начале каждого блока.

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

    Команда archive_command теперь с большей вероятностью будет вызвана с уже архивированными файлами после сбоя.

  • Предотвращено одновременное задание archive_library и archive_command (Натан Боссарт) §

    Ранее archive_library переопределял archive_command.

  • Разрешено завершение дочерних процессов постмастером с помощью сигнала прерывания (Tom Lane) §

    Это позволяет собирать дамп памяти для зависшего дочернего процесса. Это контролируется send_abort_for_crash и send_abort_for_kill. Переключатель -T постмастера теперь эквивалентен установке send_abort_for_crash.

  • Удалена нефункциональная опция postmaster -n (Tom Lane) §

  • Разрешено серверу резервировать слоты для ролей с pg_use_reserved_connections членством (Натан Боссарт) §

    Количество зарезервированных слотов устанавливается серверной переменной reserved_connections.

  • Разрешено использование больших страниц на более новых версиях Windows 10 (Томас Мунро) §

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

  • Добавлена настройка debug_io_direct для использования разработчиками (Томас Мунро, Андрес Фройнд, Бхарат Рупиредди) § §

    Хотя в первую очередь для разработчиков, wal_sync_method=open_sync/open_datasync был изменен, чтобы не использовать прямой I/O с wal_level=minimal; теперь это включено с debug_io_direct=wal.

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

E.15.3.1.6. pg_hba.conf #
  • Добавлена поддержка сопоставления с регулярными выражениями для записей базы данных и ролей в pg_hba.conf (Бертран Друво) §

    Шаблоны регулярных выражений начинаются с косой черты. Имена баз данных и ролей, которые начинаются с косых черт, должны быть заключены в двойные кавычки, если они упоминаются в pg_hba.conf.

  • Улучшена обработка пользовательских колонок в pg_ident.conf для соответствия pg_hba.conf (Jelte Fennema) §

    В частности, добавлена поддержка all, членства в роли с +, и регулярных выражений с ведущей косой чертой. Любое имя пользователя, соответствующее этим шаблонам, должно быть заключено в двойные кавычки.

  • Разрешено включение файлов в pg_hba.conf и pg_ident.conf (Жюльен Рухауд) §

    Эти параметры контролируются include, include_if_exists и include_dir. Системные представления pg_hba_file_rules и pg_ident_file_mappings теперь отображают имя файла.

  • Разрешено токенам в pg_hba.conf иметь неограниченную длину (Tom Lane) §

  • Добавлены номера правил и карт в системное представление pg_hba_file_rules (Жюльен Рухауд) §

  • Определение кодировки по умолчанию из локали при использовании ICU (Джефф Дэвис) §

    Ранее по умолчанию всегда использовался UTF-8.

  • Опции CREATE DATABASE и CREATE COLLATION LOCALE, а также опции initdb и createdb --locale, контролируют поставщиков правил сортировки, не относящихся к libc (Джефф Дэвис)

    Ранее они контролировались только провайдерами libc.

  • Добавлены предопределенные сортировки unicode и ucs_basic (Петер Айзентраут) §

    Это работает только если поддержка ICU включена.

  • Разрешено создание пользовательских правил сортировки ICU (Питер Айзентраут) §

    Это было сделано с использованием нового предложения RULES в CREATE COLLATION, а также новых опций для CREATE DATABASE, createdb, и initdb.

  • Разрешено Windows автоматически импортировать системные локали (Хуан Хосе СантаМария Флеча) §

    Ранее могли быть импортированы только локали ICU на Windows.

  • Разрешено логическое декодирование на резервных серверах (Бертран Друво, Андрес Фройнд, Амит Хандекар) § § §

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

  • Добавлена серверная переменная для управления тем, как издатели логического декодирования передают изменения и как подписчики их применяют (Shi Yu) § § §

    Переменная debug_logical_replication_streaming.

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

    Это возможно только для подписок, отмеченных как двоичные.

  • Разрешено параллельное применение логической репликации (Hou Zhijie, Wang Wei, Amit Kapila) § § §

    Опция CREATE SUBSCRIPTION STREAMING теперь поддерживает parallel для включения применения больших транзакций параллельными рабочими. Количество параллельных рабочих контролируется новой серверной переменной max_parallel_apply_workers_per_subscription. События ожидания LogicalParallelApplyMain, LogicalParallelApplyStateChange и LogicalApplySendData также были добавлены. Колонка leader_pid была добавлена в системное представление pg_stat_subscription для отслеживания параллельной активности.

  • Улучшена производительность для применения логической репликации без первичного ключа (Onder Kalaci, Amit Kapila) §

    В частности, REPLICA IDENTITY FULL теперь может использовать btree индексы вместо последовательного сканирования таблицы для поиска совпадений.

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

    Это может быть использовано для предотвращения циклов репликации. Это контролируется новой опцией CREATE SUBSCRIPTION ... ORIGIN.

  • Выполнение логической репликации SELECT и DML действий как владельца таблицы (Роберт Хаас) § §

    Это улучшает безопасность и теперь требует, чтобы владельцы подписок были либо суперпользователями, либо имели SET ROLE разрешение на все роли, владеющие таблицами в наборе репликации. Предыдущее поведение выполнения всех операций от имени владельца подписки может быть включено с помощью опции подписки run_as_owner.

  • wal_retrieve_retry_interval настроен на работу на основе каждой подписки (Натан Боссарт) §

    Ранее время повторной попытки применялось глобально. Это также добавляет события ожидания >LogicalRepLauncherDSA и LogicalRepLauncherHash.

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

  • Добавлена опция EXPLAIN GENERIC_PLAN для отображения общего плана для параметризованного запроса (Лауренц Альбе) §

  • Разрешено значению COPY FROM отображаться на DEFAULT столбца (Исраэль Барт Рубио) §

  • Разрешено COPY в иностранные таблицы добавлять строки пакетами (Андрей Лепихов, Эцуро Фуджита) §

    Это контролируется опцией postgres_fdw batch_size.

  • Разрешено указание типа STORAGE с помощью CREATE TABLE (Теодор Сигаев, Александр Алексеев) § §

    Ранее только ALTER TABLE могло это контролировать.

  • Разрешены триггеры усечения на внешних таблицах (Юго Нагата) §

  • Разрешено VACUUM и vacuumdb обрабатывать только таблицы TOAST (Натан Боссарт) §

    Это было достигнуто путем отключения VACUUM параметра PROCESS_MAIN или с помощью vacuumdb с использованием опции --no-process-main.

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

    Опции SKIP_DATABASE_STATS и ONLY_DATABASE_STATS.

  • Изменены REINDEX DATABASE и REINDEX SYSTEM так, чтобы больше не требовался аргумент (Саймон Риггс) § §

    Ранее имя базы данных должно было быть указано.

  • Разрешено CREATE STATISTICS генерировать имя статистики, если оно не указано (Саймон Риггс) §

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

  • Разрешены недесятичные целочисленные литералы (Питер Айзентраут) §

    Например, 0x42F, 0o273, и 0b100101.

  • Разрешено NUMERIC обрабатывать шестнадцатеричные, восьмеричные и двоичные целые числа любого размера (Дин Рашид) §

    Ранее поддерживались только некавыченные восьмибайтовые целые числа с этими недесятичными основаниями.

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

    Это может улучшить читаемость для длинных строк цифр.

  • Было принято написание +infinity в вводе даты и времени (Вик Фиринг) §

  • Предотвращено указание epoch и infinity вместе с другими полями в строках даты и времени (Joseph Koshakow) §

  • Удалена недокументированная поддержка ввода даты в форме YyearMmonthDday (Джозеф Кошаков) §

  • Добавлены функции pg_input_is_valid() и pg_input_error_info() для проверки ошибок преобразования типов (Tom Lane) § §

E.15.3.5. Общие запросы #

  • Разрешено подзапросам в FROM клаузе опускать алиасы (Дин Рашид) §

  • Добавлена поддержка расширенных числовых литералов в путях SQL/JSON (Петер Айзентраут) §

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

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

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

    Новые функции JSON_ARRAY(), JSON_ARRAYAGG(), JSON_OBJECT() и JSON_OBJECTAGG() являются частью стандарта SQL.

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

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

  • Разрешен разбор строк JSON с использованием векторных операций (Джон Нейлор) §

  • Улучшена обработка функции выделения полного текста ts_headline() для выражений OR и NOT (Tom Lane) §

  • Добавлены функции для сложения, вычитания и генерации значений timestamptz в указанной временной зоне (Przemyslaw Sztoch, Gurjeet Singh) §

    Функции date_add(), date_subtract(), и generate_series().

  • Изменение date_trunc(unit, timestamptz, time_zone) на неизменяемую функцию (Przemyslaw Sztoch) §

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

  • Добавлена серверная переменная SYSTEM_USER (Бертран Друво) §

    Этот метод аутентификации и его аутентифицированный пользователь были сообщены.

  • Добавлены функции array_sample() и array_shuffle() (Мартин Кальхер) §

  • Добавлена агрегатная функция ANY_VALUE(), которая возвращает любое значение из набора (Вик Фиринг) §

  • Добавлена функция random_normal() для предоставления нормально распределённых случайных чисел (Пол Рэмси) §

  • Добавлена функция ошибки erf() и её дополнение erfc() (Дин Рашид) §

  • Улучшена точность числовой power() для целых показателей степени (Дин Рашид) §

  • Добавлена опция XMLSERIALIZE() INDENT для форматирования вывода (Jim Jones) §

  • Изменено pg_collation_actual_version() для возврата разумного значения для коллации по умолчанию (Джефф Дэвис) §

    Ранее возвращалось NULL.

  • Разрешено pg_read_file() и pg_read_binary_file() игнорировать отсутствующие файлы (Киотаро Хоригучи) §

  • Добавлена спецификация байтов (B) в pg_size_bytes() (Петер Айзентраут) §

  • Разрешено to_reg* функциям принимать числовые OID в качестве ввода (Tom Lane) §

E.15.3.7. PL/pgSQL #

  • Добавлена возможность получения OID текущей функции в PL/pgSQL (Pavel Stehule) §

    Это было выполнено с помощью GET DIAGNOSTICS variable = PG_ROUTINE_OID.

E.15.3.8. libpq #

  • Добавлена опция подключения libpq require_auth для указания списка допустимых методов аутентификации (Джейкоб Чемпион) §

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

  • Разрешено случайное выбор нескольких узлов, указанных libpq (Йелте Феннема) § §

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

  • Добавлена опция libpq sslcertmode для управления передачей клиентского сертификата (Джейкоб Чемпион) §

    Значения параметра: disable, allow и require.

  • Разрешено libpq использовать системный пул сертификатов для проверки сертификатов (Джейкоб Чемпион, Томас Хабетс) §

    Это было включено с sslrootcert=system, что также включает sslmode=verify-full.

E.15.3.9. Клиентские приложения #

  • Разрешено ECPG объявления переменных использовать имена, определенные с помощью typedef, которые совпадают с незарезервированными SQL ключевыми словами (Tom Lane) §

    Это изменение предотвращает обработку ключевых слов, которые совпадают с именами typedef в C, как ключевых слов в последующих блоках EXEC SQL.

E.15.3.9.1. psql #
  • Позволено psql управлять максимальной шириной строк заголовка в расширенном формате (Платон Пронко) §

    Это контролируется xheader_width.

  • Добавлена команда psql \drg для отображения деталей членства в роли (Павел Лузанов) § §

    Столбец вывода Member of был удалён из \du и \dg, потому что эта новая команда отображает эту информацию более подробно.

  • Разрешено командам управления привилегиями доступа psql показывать системные объекты (Nathan Bossart) § §

    Опции \dpS и \zS.

  • Добавлено обозначение FOREIGN в psql \d+ для дочерних внешних таблиц и партиций (Ian Lawrence Barwick) §

  • Предотвращено отображение исходного кода функции в \df+ (Айзек Морланд) §

    Тела функций легче просматриваются с помощью \sf.

  • Разрешено psql отправлять запросы, используя расширенный протокол запросов (Петер Айзенштраут) §

    Передача аргументов в такие запросы осуществлялась с использованием новой команды psql \bind.

  • Разрешено psql \watch ограничивать количество выполнений (Андрей Бородин) §

    Опции \watch теперь могут быть названы при указании.

  • Обнаружены недопустимые значения для psql \watch, и разрешено использование нуля для указания отсутствия задержки (Андрей Бородин) §

  • Разрешено сценариям psql получать статус выхода команд оболочки и запросов (Кори Хуинкер, Том Лейн) § §

    Новые переменные управления psql - это SHELL_ERROR и SHELL_EXIT_CODE.

  • Различные улучшения автодополнения в psql (Виньеш С, Александр Алексеев, Дагфинн Илмари Маннсокер, Ши Ю, Майкл Пакье, Кен Като, Питер Смит) § § § § § § § § § § § §

E.15.3.9.2. pg_dump #
  • Добавлен контроль pg_dump для дампа дочерних таблиц и разделов (Gilles Darold) §

    Новые параметры: --table-and-children, --exclude-table-and-children и --exclude-table-data-and-children.

  • Добавлены LZ4 и Zstandard сжатие в pg_dump (Georgios Kokolatos, Justin Pryzby)

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

  • Улучшено pg_dump для принятия более согласованного синтаксиса сжатия (Georgios Kokolatos) §

    Опции, такие как --compress=gzip:5.

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

  • Добавлена initdb опция для установки серверных переменных на время выполнения initdb и всех будущих запусков сервера (Tom Lane) §

    Опция -c name=value.

  • Добавлены опции в createuser для управления дополнительными параметрами пользователя (Shinya Kato) § §

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

  • Устаревший createuser параметр --role (Натан Боссарт) § §

    Эта опция могла бы быть легко перепутана с новыми createuser параметрами членства в роли, поэтому опция --member-of была добавлена с той же функциональностью. Опция --role все еще может быть использована.

  • Разрешено управление обработкой схем в vacuumdb (Жиль Дарольд) §

    Эти параметры контролируются опциями --schema и --exclude-schema.

  • Использованы новые VACUUM опции для улучшения производительности vacuumdb (Tom Lane, Nathan Bossart) §

  • Были pg_upgrade установлены локаль и кодировка нового кластера (Джефф Дэвис) §

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

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

    Опция --copy.

  • Улучшено pg_basebackup для принятия числовых параметров сжатия (Георгиос Коколатос, Майкл Пакье) §

    Опции, такие как --compress=server-5, теперь поддерживаются.

  • Исправлено pg_basebackup для обработки таблиц, хранящихся в каталоге PGDATA (Роберт Хаас) §

  • Добавлена pg_waldump опция --save-fullpage для дампа полных изображений страниц (Дэвид Кристенсен) §

  • Разрешены pg_waldump опции -t/--timeline для принятия шестнадцатеричных значений (Петер Айзентраут) §

  • Добавлена поддержка отчета о прогрессе в pg_verifybackup (Масахико Савада) §

  • Разрешено pg_rewind правильно отслеживать изменения временной шкалы (Хейкки Линнакангас) § §

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

  • pg_receivewal и pg_recvlogical завершены корректно при получении SIGTERM (Christoph Berg) §

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

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

  • Поддержка ICU была включена по умолчанию (Джефф Дэвис) §

  • Добавлена поддержка SSE2 (Streaming SIMD Extensions 2) векторных операций на архитектурах x86-64 (Джон Нейлор) §

  • Добавлена поддержка расширенных инструкций SIMD (Single Instruction Multiple Data) (NEON) на архитектурах ARM (Nathan Bossart) §

  • Бинарные файлы для Windows, собранные с использованием MSVC, были настроены для использования RandomizedBaseAddress (ASLR) (Майкл Пакье) §

    Это уже было включено в сборках 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 была удалена (Thomas Munro) §

  • Поддержка архитектур M68K, M88K, M32R, и SuperH CPU была удалена (Thomas Munro) § §

  • Удалена поддержка libpq аутентификации с использованием учетных данных SCM (Майкл Пакье) §

    Поддержка этого метода аутентификации на стороне сервера была удалена в PostgresSQL 9.1.

  • Это в конечном итоге заменит системы сборки на основе Autoconf и Windows, MSVC.

  • Разрешено управление местоположением openssl бинарного файла, используемого системой сборки (Петер Айзентраут) §

    Сделано нахождение программы openssl опцией configure или meson

  • Добавлена опция сборки для тестирования небольших размеров сегментов таблиц (Андрес Фройнд) §

  • Добавлены опции для pgindent (Эндрю Данстан) § § § § § § §

    Новые параметры: --show-diff, --silent-diff, --commit, и --help, и разрешено использование нескольких параметров --exclude. Также требуется явное указание файла typedef. Параметры --code-base и --build также были удалены.

  • Добавлен исходный код pg_bsd_indent в основное дерево (Tom Lane) §

  • Улучшены make_ctags и make_etags (Юго Нагата) §

  • Настроены pg_attribute столбцы для повышения эффективности (Петер Айзентраут) §

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

  • Улучшено использование индексов на основе расширений на булевых столбцах (Zongliang Quan, Tom Lane) §

  • Добавлена поддержка Daitch-Mokotoff Soundex в fuzzystrmatch (Dag Lem) §

  • Разрешено auto_explain записывать значения, переданные параметризованным операторам (Дагфинн Илмари Маннсокер) §

    Это влияет на запросы, использующие серверные PREPARE/EXECUTE и клиентскую разборку/привязку. Логирование контролируется параметром auto_explain.log_parameter_max_length; по умолчанию параметры запроса будут записываться в журнал без ограничения длины.

  • Был auto_explain режим log_verbose учтен в значении compute_query_id (Ацуши Торикоши) §

    Ранее, даже если compute_query_id был включен, log_verbose не показывал идентификатор запроса.

  • Изменена максимальная длина меток ltree с 256 до 1000 и разрешены дефисы (Гарен Торикиан) §

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

    Ранее вместо заполнителей появлялись константы, например, $1.

  • Добавлена pg_walinspect функция pg_get_wal_block_info() для отчета информации о блоках WAL (Майкл Пакье, Мелани Плагеман, Бхарат Рупиредди) § § § §

  • Изменено, как pg_walinspect функции pg_get_wal_records_info() и pg_get_wal_stats() интерпретируют конечные LSN (Бхарат Рупиредди) §

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

  • Подробные описания записей WAL были добавлены в pg_walinspect и pg_waldump (Мелани Плагеман, Питер Геогеган) § § § §

  • Добавлена pageinspect функция bt_multi_page_stats() для отчета статистики по нескольким страницам (Хамид Ахтар) §

    Это похоже на bt_page_stats(), за исключением того, что оно может сообщать о диапазоне страниц.

  • Добавлен пустой столбец диапазона в pageinspect функцию brin_page_items() (Томаш Вондра) §

  • Модули архива были переработаны для большей гибкости (Натан Боссарт) §

    Изменения инициализации потребуют обновления модулей, написанных для более старых версий Postgres.

  • Исправлено неточное отслеживание строк pg_stat_statements для операторов расширенного протокола запросов (Сами Имсейх) §

  • Добавлена pg_buffercache функция pg_buffercache_usage_counts() для отчета об общем использовании (Nathan Bossart) §

  • Добавлена pg_buffercache функция pg_buffercache_summary() для отчета обобщенной статистики буферов (Мелих Мутлу) §

  • Разрешено, чтобы схемы требуемых расширений ссылались в скриптах расширений, используя новый синтаксис @extschema:referenced_extension_name@ (Регина Оби) §

  • Разрешено обязательным расширениям быть помеченными как не перемещаемые с использованием no_relocate (Регина Оби) §

    Это позволило @extschema:referenced_extension_name@ рассматриваться как константа на протяжении всего времени существования расширения.

E.15.3.12.1. postgres_fdw #
  • Разрешено postgres_fdw выполнять прерывания параллельно (Etsuro Fujita) §

    Это было включено с postgres_fdw опцией parallel_abort.

  • Сделан ANALYZE на внешних таблицах postgres_fdw более эффективным (Tomas Vondra) §

    Опция postgres_fdw analyze_sampling контролирует метод выборки.

  • Ограничена отправка констант типа reg* в postgres_fdw только теми, которые ссылаются на встроенные объекты или расширения, отмеченные как отправляемые (Tom Lane) §

  • postgres_fdw и dblink обработали прерывания во время установления соединения (Andres Freund) §

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

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

Abhijit Menon-Sen
Adam Mackler
Адриан Клейвер
Ahsan Hadi
Ajin Cherian
Аджит Авекар
Алан Ходжсон
Aleksander Alekseev
Алекс Денман
Alex Kozhemyakin
Александр Королев
Alexander Korotkov
Alexander Lakhin
Alexander Pyhalov
Alexey Borzov
Alexey Ermakov
Алексей Махмутов
Álvaro Herrera
Amit Kapila
Amit Khandekar
Amit Langote
Amul Sul
Anastasia Lubennikova
Компания Anban
Andreas Dijkman
Андреас Карлссон
Андреас Шербаум
Andrei Zubkov
Andres Freund
Andrew Alsup
Andrew Bille
Andrew Dunstan
Andrew Gierth
Andrew Kesper
Andrey Borodin
Andrey Lepikhov
Andrey Sokolov
Анкит Кумар Пандей
Анте Крещич
Anton Melnikov
Антон Сидякин
Anton Voloshin
Antonin Houska)
Arne Roland
Артем Анисимов
Arthur Zakirov
Ashutosh Bapat
Ashutosh Sharma
Asim Praveen
Atsushi Torikoshi
Аяки Тачикэке
Балаж Сзилфаи
Benoit Lobréau
Бернд Хельмле
Bertrand Drouvot
Bharath Rupireddy
Билва Санаба
Боб Криер
Борис Центнер
Brad Nicholson
Brar Piening
Bruce Momjian
Bruno da Silva
Carl Sopchak
Cary Huang
Чанхон Фэй
Крис Трэверс
Christoph Berg
Christophe Pettus
Corey Huinker
Крейг Рингер
Курт Коловсон
Dag Lem
Dagfinn Ilmari Mannsåker
Daniel Gustafsson
Daniel Vérité
Даниэль Ватцингер
Daniel Westermann
Daniele Varrazzo
Daniil Anisimov
Danny Shemesh
Dave Page
David Christensen
David G. Johnston
Дэвид Гейер
Дэвид Гилман
Дэвид Кимура
David Rowley
David Steele
Дэвид Турон
David Zhang
Давиндер Сингх
Dean Rasheed
Денис Лаксальд
Dilip Kumar
Димос Стаматакес
Дмитрий Кузьмин
Дмитрий Астапов
Dmitry Dolgov
Dmitry Koval
Донг Ук Ли
Дунмин Лю
Drew DeVault
Дункан Сандс
Эд Масте
Egor Chindyaskin
Ekaterina Kiryanova
Elena Indrupskaya
Emmanuel Quincerot
Eric Mutta
Erik Rijkers
Erki Eessaar
Эрвин Брандштеттер
Etsuro Fujita
Евгений Жужнев
Euler Taveira
Эван Джонс
Евгений Морозов
Fabrízio de Royes Mello
Фариас де Оливейра
Florin Irion
Франц-Йозеф Фэрбер
Гарен Торикиан
Georgios Kokolatos
Gilles Darold
Greg Stark
Guillaume Lelarge
Gunnar Bluth
Гуннар Морлинг
Gurjeet Singh
Haiyang Wang
Haiying Tang
Хамид Ахтар
Hans Buschmann
Хао Ву
Hayato Kuroda
Heath Lord
Heikki Linnakangas
Himanshu Upadhyaya
Хисахиро Каути
Хонгю Сун
Hubert Lubaczewski
Хунг Нгуен
Ian Barwick
Ibrar Ahmed
Илья Гладышев
Илья Ненашев
Исаак Морланд
Израиль Барт Рубио
Jacob Champion
Джейкоб Шпайдель
Jaime Casanova
Jakub Wartak
James Coleman
James Inform
Джеймс Ваннс
Ян Вик
Japin Li
Jeevan Ladhe
Jeff Davis
Jeff Janes
Jehan-Guillaume de Rorthais
Jelte Fennema
Jian He
Джим Джонс
Цзиньбао Чэнь
Джо Конвей
Joel Jacobson
John Naylor
Jonathan Katz
Josef Simanek
Joseph Koshakow
Juan José Santamaría Flecha
Julien Rouhaud
Julien Roze
Junwang Zhao
Justin Pryzby
Джастин Чжан
Карина Лицкевич
Карл О. Пинк
Кейсуке Курода
Ken Kato
Kevin McKibbin
Киран МакКаскер
Кирк Волак
Konstantin Knizhnik
Коши Шибагаки
Kotaro Kawamoto
Куй Лю
Kyotaro Horiguchi
Лакшми Нараянан Сритхар
Лоуренс Парри
Laurenz Albe
Лука Феррари
Lukas Fittl
Maciek Sakrejda
Magnus Hagander
Майя Заложник
Марсель Хофштеттер
Marina Polyakova
Mark Dilger
Маркo Тииккая
Markus Winand
Martijn van Oosterhout
Martin Jurca
Martin Kalcher
Мэри Сюй
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Мейсон Шарп
Матеус Алкантара
Матс Киндал
Matthias van de Meent
Matthijs van der Vleuten
Maxim Orlov
Maxim Yablokov
Мехмет Эмин Каракас
Melanie Plageman
Мелих Мутлу
Майка Гейтса
Michael Banck
Michael Paquier
Михаил Николаев
Мишель Пельтье
Mike Oh
Михаил Грибков
Минли Чжан
Мирослав Бендик
Мицуру Хината
Мьо Вай Тант
Наим Ахтер
Naoki Okano
Nathan Bossart
Nazir Bilal Yavuz
Neha Sharma
Ник Бабаджанян
Nicola Contu
Nikhil Shetty
Nikita Glukhov
Nikolay Samokhvalov
Nikolay Shaplov
Нишант Шарма
Nitin Jadhav
Noah Misch
Noboru Saito
Noriyoshi Shinoda
Нуко Йокогама
Олег Бартунов
Олег Целебровский
Olly Betts
Onder Kalaci
Онур Тиртир
Пабло Федерико
Палле Гиргенсон
Paul Guo
Paul Jungwirth
Пол Рэмси
Pavel Borisov
Павел Кулаков
Pavel Luzanov
Pavel Stehule
Пейфэн Цю
Peter Eisentraut
Peter Geoghegan
Peter Smith
Phil Florent
Филипп Годфрен
Платон Пронко
Пшемыслав Штох
Rachel Heaton
Ranier Vilela
Регина Оби
Reid Thompson
Райнер Петерке
Richard Guo
Рииво Колка
Ришу Багга
Robert Haas
Роберт Шёблом
Роберт Трит
Roberto Mello
Robins Tharakan
Roman Zharkov
Ронан Дунклау
Рушаб Латия
Ryo Matsumura
Самай Шарма
Sami Imseih
Sandeep Thakkar
Сандро Сантилли
Себастьен Флеш
Себастьен Лардьер
Sehrope Sarkuni
Сергей Беляшов
Сергей Панков
Sergey Shinderuk
Shi Yu
Shinya Kato
Шо Като
Shruthi Gowda
Швета Маллик
Simon Riggs
Синди Сеньорита
Sirisha Chamarthi
Шраван Кумар
Стефан Ташуар
Stephen Frost
Steve Chavez
Стоун Тикл
Sven Klemm
Takamichi Osumi
Takeshi Ideriha
Tatsuhiro Nakamori
Tatsuo Ishii
Teja Mupparti
Тендер Ван
Федор Сигаев
Тиаго Нунес
Thom Brown
Томас Хабетс
Томас Мак Кей
Томас Манро
Тим Кэри-Смит
Тим Филд
Timo Stolz
Tom Lane
Tomas Vondra
Тор Эрик Линнеруд
Торстен Фёрч
Тристан Партин
Troy Frericks
Tushar Ahuja
Валери Вулард
Вибхор Кумар
Виктор Спирин
Виктория Шепард
Vignesh C
Vik Fearing
Vitaly Burovoy
Виталий Давыдов
Ван Вэй
Вэньцзинь Цзэн
Whale Song
Will Mortensen
Wolfgang Walther
Син Вэнь
Син Го
Синван Сюй
СюэЦзин Чжао
Yanliang Lei
Юмиу Мо
Yugo Nagata
Yura Sokolov
Юта Кацураги
Чжэнь Минъян
Чжэн Ли
Zhihong Yu
Чжицзе Хоу
Цзунлян Цюань
Цзумин Цзян