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

Дата выпуска: 2023-09-14

E.11.1. Обзор #

PostgreSQL 16 содержит много новых возможностей и улучшений, в том числе:

  • Возможность параллельного выполнения полных (FULL) и правых внешних (OUTER) соединений по хешу

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

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

  • Сбор статистики ввода-вывода с использованием нового представления pg_stat_io

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

  • Улучшение производительности операций очистки с заморозкой

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

Предыдущие пункты и другие новые возможности PostgreSQL 16 более подробно описаны в следующих разделах.

E.11.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.11.3. Изменения #

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

E.11.3.1. Сервер #

E.11.3.1.1. Оптимизатор #
  • Возможность выполнения инкрементальной сортировки в различных случаях, в том числе с DISTINCT (Дэвид Роули)

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

    Отключить данную функциональность можно с помощью новой серверной переменной enable_presorted_aggregate.

  • Возможности мемоизации поверх UNION ALL (Ричард Гуо)

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

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

  • Повышение точности оценки стоимости планировщиком для индексов GIN (Ронан Данклау)

E.11.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.11.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.11.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.11.3.1.5. Конфигурация сервера #
  • Добавление поддержки делегирования учётных данных Kerberos (Стивен Фрост)

    Для этого предназначены серверная переменная gss_accept_delegation и параметр подключения libpq gssdelegation.

  • Возможность задать число итераций 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.11.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 (Жюльен Руо)

  • Определение кодировки по умолчанию из локали при использовании 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.

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

    Для создания слота логической репликации требуется запись 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.11.3.3. Служебные команды #

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

  • Возможность при копировании с использованием COPY FROM использовать значение столбца по умолчанию (DEFAULT) (Израэл Барт)

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

    Для этого предназначен параметр batch_size postgres_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.11.3.4. Типы данных #

  • Поддержка недесятичных целочисленных констант (Питер Эйзентраут)

    Примеры: 0x42F, 0o273 и 0b100101.

  • Поддержка шестнадцатеричных, восьмеричных и двоичных целых чисел для NUMERIC (Дин Рашид)

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

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

    Благодаря этому удобнее читать длинные строки цифр.

  • Поддержка +infinity при вводе даты и времени (Вик Фиринг)

  • Запрет указывать epoch и infinity одновременно с другими полями в строках даты и времени (Джозеф Кошаков)

  • Удаление недокументированной поддержки ввода даты в формате YгодMмесяцDдень (Джозеф Кошаков)

  • Добавление функций pg_input_is_valid() и pg_input_error_info() для проверки на наличие ошибок преобразования типов (Том Лейн)

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

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

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

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

E.11.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 (Том Лейн)

E.11.3.7. PL/pgSQL #

E.11.3.8. libpq #

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

    Кроме того, в этом параметре можно запретить определённые методы аутентификации.

  • Возможность случайного выбора узлов в libpq (Йелте Феннема)

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

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

    Допустимые значения: disable, allow и require.

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

    Эту возможность включает значение sslrootcert=system, и в результате устанавливается значение sslmode=verify-full.

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

  • Возможность при объявлении переменных в ECPG использовать имена объявлений типов, совпадающие с незарезервированными ключевыми словами SQL (Том Лейн)

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

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

    Этой возможностью управляет параметр xheader_width.

  • Добавление команды \drg в psql, показывающей информацию о членстве в ролях (Павел Лузанов)

    Поскольку новая команда выводит более подробную информацию, для \du и \dg выходной столбец Member of теперь удалён.

  • Возможность выводить системные объекты командами psql, показывающими права доступа (Натан Боссарт)

    Для этого предназначены команды \dpS и \zS.

  • Возможность добавления признака FOREIGN для дочерних таблиц и секций сторонних таблиц командой \d+ в psql (Иэн Барвик)

  • Исключение вывода исходного кода функции командой \df+ (Айзек Морленд)

    Тело функции удобнее просматриваться командой \sf.

  • Возможность psql отправлять запросы по расширенному протоколу (Питер Эйзентраут)

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

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

    Теперь в \watch можно передавать именованные параметры.

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

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

    Для этого предназначены новые переменные psql: SHELL_ERROR и SHELL_EXIT_CODE.

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

E.11.3.9.2. pg_dump #
  • Добавление управления выгрузкой дочерних таблиц и секций в 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.11.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.11.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.11.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.11.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.11.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)