E.6. Выпуск 18#

E.6. Выпуск 18

E.6. Выпуск 18 #

Дата выпуска:  2025-09-25

E.6.1. Обзор #

Tantor BE 18 содержит множество новых возможностей и улучшений, в том числе:

  • подсистему асинхронного ввода-вывода (AIO), которая может повысить производительность последовательного сканирования, операций сканирования кучи по битовой карте, очистки (vacuum) и других операций.

  • pg_upgrade теперь сохраняет статистику оптимизатора.

  • поддержку "skip scan", позволяющую использовать составные B-tree индексы в большем числе случаев.

  • функцию uuidv7() для генерации упорядоченных по времени UUID.

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

  • поддержку аутентификации OAuth.

  • поддержку OLD и NEW в выражении RETURNING команд INSERT, UPDATE, DELETE и MERGE.

  • временные ограничения или ограничения на диапазоны для ограничений целостности PRIMARY KEY, UNIQUE и FOREIGN KEY.

Вышеуказанные и другие новые возможности Tantor BE 18 подробно описываются дальше, в следующих разделах.

E.6.2. Миграция на версию 18 #

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

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

  • В initdb теперь по умолчанию включен подсчет контрольных сумм (Грег Сабино Маллейн) §

    Новый параметр initdb --no-data-checksums отключает подсчет контрольных сумм. Утилита pg_upgrade требует, чтобы параметр подсчета контрольных сумм у обновляемого и созданного кластера совпадали, поэтому опция --no-data-checksums может быть полезна для обновления старых кластеров, на которых подсчет контрольных сумм не включен.

  • Изменена обработка аббревиатур часовых поясов (Том Лейн) §

    Теперь приоритет отдается аббревиатурам часовых поясов текущей сессии перед проверкой серверной переменной timezone_abbreviations. В предыдущих версиях сначала проверялась timezone_abbreviations.

  • Аутентификация по паролю MD5 объявлена устаревшей (Натан Боссарт) §

    Поддержка паролей MD5 будет удалена в следующей мажорной версии. CREATE ROLE и ALTER ROLE теперь выводят предупреждения об устаревании при установке паролей MD5. Эти предупреждения могут быть отключены путем установки параметра md5_password_warnings в значение off.

  • Изменено поведение команд VACUUM и ANALYZE при обработке потомков родительской таблицы (Майкл Харрис) §

    Предыдущее поведение можно включить с помощью новой опции нового параметра ONLY.

  • Запрет команде COPY FROM обрабатывать \. как маркер конца файла при чтении файлов CSV (Даниэль Верите, Том Лейн) § §

    psql по-прежнему будет обрабатывать \. как маркер конца файла при чтении файлов CSV из STDIN. Более старые клиенты psql, подключающиеся к серверам Tantor BE 18, могут столкнуться с проблемами \copy. В этом выпуске проверяется, что \. должен появляться на отдельной строке.

  • Запрещено использование нежурналируемых секционированных таблиц (Микаэль Пакье) §

    Ранее команда ALTER TABLE SET [UN]LOGGED ничего не выполняла, и создание нежурналируемой секционированной таблицы не приводило к тому, что её дочерние таблицы становились нежурналируемыми.

  • Выполнение триггеров AFTER от имени роли, которая была активна в момент постановки событий триггера в очередь (Лауренц Альбе) §

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

  • Была удалена поддержка неработающих прав RULE в GRANT/REVOKE (Фудзии Масао) §

    Они были неработоспособными начиная с PostgreSQL 8.2.

  • Удалён столбец pg_backend_memory_contexts.parent (Мелих Мутлу) §

    Этот столбец стал не нужен после добавления столбца pg_backend_memory_contexts.path.

  • Нумерация в pg_backend_memory_contexts.level и pg_log_backend_memory_contexts() теперь начинается с единицы (Мелих Мутлу, Атсуши Торикоши, Дэвид Роули, Фудзии Масао) § § §

    Раньше нумерация начиналась с нуля.

  • Изменён полнотекстовый поиск для использования провайдера правил сортировки по умолчанию при чтении файлов конфигурации и словарей, вместо безусловного использования libc (Питер Эйзентраут) §

    Кластеры, в которых по умолчанию используются провайдеры сортировки, отличные от libc (например, ICU, builtin), и которые ведут себя иначе, чем libc для символов, обрабатываемых LC_CTYPE, могут столкнуться с изменениями в поведении некоторых функций полнотекстового поиска, а также расширения pg_trgm. При обновлении таких кластеров с помощью pg_upgrade рекомендуется перестроить все индексы, связанные с полнотекстовым поиском и pg_trgm, после обновления.

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

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

E.6.3.1. Сервер #

E.6.3.1.1. Оптимизатор #
  • Автоматическое удаление лишних соединений таблиц самих с собой (Андрей Лепихов, Александр Кузьменков, Александр Коротков, Алена Рыбакина) §

    Эту оптимизацию можно отключить с помощью серверной переменной enable_self_join_elimination.

  • Некоторые выражения IN (VALUES ...) преобразуются в x = ANY ... для улучшения работы оптимизатора со статистикой (Алена Рыбакина, Андрей Лепихов) §

  • Разрешается преобразование OR-выражений в массивы для более быстрой обработки индексов (Александр Коротков, Андрей Лепихов) §

  • Ускорена обработка INTERSECT, EXCEPT, оконных функций и псевдонимов столбцов представлений (Том Лейн, Дэвид Роули) § § § §

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

    Эту оптимизацию можно отключить с помощью параметра кофнигурации enable_distinct_reordering.

  • Игнорирование столбцов GROUP BY, которые функционально зависят от других столбцов (Чжан Минли, Цзянь Хи, Дэвид Роули) §

    Если выражение GROUP BY включает все столбцы уникального индекса, а также другие столбцы той же таблицы, эти другие столбцы считаются избыточными и исключаются из группировки. Такое поведение уже использовалось для первичных ключей без отложенной проверки.

  • Разрешено перемещать некоторые выражения HAVING для GROUPING SETS в выражения WHERE (Ричард Гуо) § § § §

    Это позволяет фильтровать строки заранее, до группировки. В этой версии также были исправлены некоторые запросы с GROUPING SETS, которые возвращали некорректные результаты.

  • Улучшены оценки числа строк, возвращаемых функцией generate_series() для типов numeric и timestamp (Дэвид Роули, Сон Цзиньчжоу) § §

  • Оптимизатор теперь может использовать правые полусоединения Right Semi Join (Ричард Гуо) §

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

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

  • Повышена эффективность планирования запросов, обращающихся к большому количеству секций (Ашутуш Бапат, Юя Ватари, Дэвид Роули) § §

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

  • Улучшены оценки стоимости запросов к секционированным таблицам (Никита Малахов, Андрей Лепихов) §

  • Улучшено кэширование планов функций на языке SQL (Александр Пыхалов, Том Лейн) § §

  • Улучшена работа с опциями, отключающими функционал оптимизатора (Роберт Хаас) §

E.6.3.1.2. Индексы #
  • Поддержка Skip Scans для btree индексов (Питер Геогеган) § §

    Позволяет чаще использовать составные btree-индексы, например, когда в предикатах не используются (или используются неравенства) ведущие столбцы индекса, но есть предикаты на другие столбцы индекса, которыми можно воспользоваться.

  • Теперь можно использовать уникальные индексы типов, отличных от btree, в качестве ключей секционирования и в материализованных представлениях (Марк Дилгер) § §

    Тип индекса должен поддерживать сравнение на равенство.

  • Индексы GIN могут создаваться в параллельном режиме (Томаш Вондра, Маттиас ван де Меент) §

  • Для ускорения создания индексов GiST и btree по диапазонным типам значения сортируются (Бернд Хелмле) §

E.6.3.1.3. Общая производительность #
  • Добавлена подсистема асинхронного ввода-вывода (Андрес Фройнд, Томас Манро, Назир Билал Явуз, Мелани Плейгман) § § § § § § § § § § §

    Эта функция позволяет серверным процессам ставить в очередь несколько запросов на чтение, что повышает производительность последовательного сканирования, сканирования по битовой карте, очистки (vacuum) и других методов доступа. Функциональность включается параметром конфигурации io_method, а для управления функциональностью добавлены параметры конфигурации io_combine_limit и io_max_combine_limit. Также функциональность позволяет использовать значения параметров конфигурации effective_io_concurrency и maintenance_io_concurrency больше нуля для систем без поддержки fadvise(). Новое представление pg_aios отображает файловые дескрипторы, используемые с асинхронным вводом-выводом.

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

  • Улучшена производительность и уменьшено использование памяти для хеш-соединений и GROUP BY (Дэвид Роули, Джефф Дэвис) § § § § §

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

  • Обычная очистка (vacuum) теперь может замораживать страницы, в том числе те, в которых все версии строк видимы (Мелани Плейгман) § §

    Это позволяет уменьшить трудоемкость операции полной заморозки. Активность заморозки при обычной очистке можно настроить параметром конфигурации vacuum_max_eager_freeze_failure_rate, который также доступен на уровне таблицы. В предыдущих версиях обычный vacuum никогда не обрабатывал страницы, в которых все версии строк видимы (all-visible pages) до тех пор, пока не потребуется заморозка.

  • Добавлен параметр конфигурации vacuum_truncate для отключения фазы усечения файлов при выполнении очистки VACUUM (Натан Боссарт, Гуржит Сингх) §

    Параметр на уровне таблицы с тем же именем и поведением уже существовал.

  • Увеличены до 16 значения по умолчанию параметров конфигурации effective_io_concurrency и maintenance_io_concurrency (Мелани Плейгман) § §

    Новые значения более точно соответствуют современному оборудованию.

E.6.3.1.4. Мониторинг #
  • Улучшена детализация логирования для параметра конфигурации log_connections (Мелани Плейгман) §

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

  • Добавлена опция log_connections для логирования длительности этапов подключения (Мелани Плейгман) §

  • Добавлен символ %L для параметра log_line_prefix, который позволяет выводить IP-адрес клиента (Грег Сабино Маллейн) §

  • Добавлен параметр конфигурации log_lock_failures для логирования неудачных попыток получения блокировок (Юки Сэйно, Фудзии Масао) § §

    В частности, логируются ошибки получения блокировки командой SELECT ... NOWAIT.

  • В представлении pg_stat_all_tables и его вариантах теперь отображается время, затраченное на VACUUM, ANALYZE и их автоматически выполняемых вариациях (Сами Имсейх) §

    В представления были добавлены столбцы: total_vacuum_time, total_autovacuum_time, total_analyze_time и total_autoanalyze_time.

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

    Эта информация отображается в диагностическом журнале, в системных представлениях pg_stat_progress_vacuum и pg_stat_progress_analyze, а также в выводе команд VACUUM и ANALYZE в режиме VERBOSE; отслеживание должно было быть включено с помощью параметра конфигурации track_cost_delay_timing.

  • Добавлены статистические данные по WAL, CPU и среднему времени чтения в вывод ANALYZE VERBOSE (Антонин Боннефой) § §

  • Добавлено количество переполненных буферов WAL в вывод логов команд VACUUM/ANALYZE (VERBOSE) и автоочистки (Бертран Друво) §

  • Добавлена отчетность по статистике ввода-вывода для каждого backend-процесса (Бертран Друво) § §

    Статистика была получена через pg_stat_get_backend_io(). Статистика ввода-вывода по отдельным серверным процессам может быть сброшена через pg_stat_reset_backend_stats().

  • Добавлены столбцы pg_stat_io для отображения активности ввода-вывода в байтах (Назир Билал Явуз) §

    Новые столбцы: read_bytes, write_bytes и extend_bytes. Столбец op_bytes, который всегда был равен BLCKSZ, был удалён.

  • Добавлены строки активности ввода-вывода WAL в pg_stat_io (Назир Билал Явуз, Бертран Друво, Микаэль Пакье) § § §

    Теперь представление показывает активность и события ожидания для процесса-приёмника WAL.

  • Переменная сервера track_wal_io_timing была изменена для управления отслеживанием времени WAL в pg_stat_io вместо pg_stat_wal (Бертран Друво) §

  • Столбцы read/sync были удалены из pg_stat_wal (Бертран Друво) § §

    Из представления удалены столбцы wal_write, wal_sync, wal_write_time и wal_sync_time.

  • Функция pg_stat_get_backend_wal() была добавлена для возврата статистики WAL по каждому серверному процессу (Бертран Друво) §

    Статистика WAL для каждого бэкенда сбрасывается функцией pg_stat_reset_backend_stats().

  • Добавлена функция pg_ls_summariesdir() для выдачи списка файлов директории PGDATA/pg_wal/summaries (Юси Огивара) §

  • Добавлен столбец pg_stat_checkpointer.num_done для отображения количества завершённых контрольных точек (Антон А. Мельников) §

    Столбцы num_timed и num_requested учитывали как завершённые, так и пропущенные контрольные точки.

  • Был добавлен столбец pg_stat_checkpointer.slru_written для отображения количества записанных буферов SLRU (Нитин Ядав) §

    Также было изменено сообщение в журнале сервера о контрольных точках для отображения отдельных значений общих буферов и буферов SLRU.

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

    Новые столбцы — parallel_workers_to_launch и parallel_workers_launched.

  • Вычисление идентификатора запроса для списков констант на основе только первой и последней константы (Дмитрий Долгов, Сами Имсейх) § § §

    Jumbling теперь используется расширением pg_stat_statements.

  • Были скорректированы вычисления идентификатора запроса для группировки запросов, использующих одно и то же имя отношения (Микаэль Пакье, Сами Имсейх) §

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

  • Добавлен столбец pg_backend_memory_contexts.type для отображения типа контекста памяти (Дэвид Роули) §

  • Добавлен столбец pg_backend_memory_contexts.path для отображения родительских контекстов памяти (Мелих Мутлу) §

E.6.3.1.5. Привилегии #
  • Добавлена функция pg_get_acl() для получения сведений о правах доступа к объектам баз данных (Джоэл Джейкобсон) § §

  • Добавлена функция has_largeobject_privilege() для проверки прав на большие объекты (Юго Нагата) §

  • ALTER DEFAULT PRIVILEGES разрешено определять привилегии для больших объектов (Харука Такацука, Юго Нагата, Лауренц Альбе) §

  • Была добавлена предопределённая роль pg_signal_autovacuum_worker (Кирилл Решке) §

    Роль позволяет отправлять сигналы рабочим процессам autovacuum.

E.6.3.1.6. Конфигурация сервера #
  • Добавлена поддержка метода аутентификации OAuth (Джейкоб Чемпион, Даниэль Густафссон, Томас Манро) §

    Добавлен новый метод аутентификации oauth в pg_hba.conf,

  • Добавлена серверная переменная ssl_tls13_ciphers для указания нескольких наборов шифров TLSv1.3, разделённых двоеточием (Эрика Чжан, Даниэль Густафссон) §

  • Значение серверной переменной ssl_groups's по умолчанию было изменено для включения эллиптической кривой X25519 (Даниэль Густафссон, Джейкоб Чемпион) §

  • Переименована серверная переменная ssl_ecdh_curve в ssl_groups и разрешено указывать несколько ECDH-кривых, разделённых двоеточием (Эрика Чжан, Даниэль Густафссон) §

    Предыдущее имя переменной всё ещё работает.

  • Ключи отмены запроса могут иметь длину до 256 бит (Хейкки Линнакангас, Йелте Феннема-Нио) § §

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

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

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

  • Добавлена возможность указания фиксированного числа "мертвых" версий строк, которое будет вызывать автоматическую очистку (autovacuum) (Натан Боссарт, Фредерик Юэль) §

    Переменная сервера — autovacuum_vacuum_max_threshold. В качестве порогового значения всё ещё можно использовать проценты.

  • Параметр кофнигурации max_files_per_process теперь ограничивает только файлы, открытые серверным процессом (Андрес Фройнд) §

    Файлы, открытые процессом postmaster, ранее учитывались в этом параметре.

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

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

  • Добавлен параметр конфигурации extension_control_path, который позволяет задать расположение управляющих файлов расширений (Питер Эйзентраут, Матеус Алькантара) § §

E.6.3.1.7. Потоковая репликация и восстановление #
  • Разрешено автоматически инвалидировать неактивные слоты репликации с помощью нового параметра конфигурации idle_replication_slot_timeout (Ниша Мунд, Бхарата Рупиредди) §

  • Добавлен параметр конфигурации max_active_replication_origins для управления максимальным числом активных источников репликации (Эйлер Тавейра) §

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

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

    Если в публикации указан список столбцов, то публикуются все эти столбцы, автоматически генерируемые и не генерируемые. Без указанного списка столбцов опция публикации publish_generated_columns управляет публикацией автоматически генерируемых столбцов. Ранее значения автоматически генерируемых столбцов не реплицировались, и подписчик должен был вычислять значения, если это возможно; новшество особенно полезно для подписчиков, не использующих Tantor BE, у которых отсутствует такая возможность.

  • Изменён параметр потоковой передачи по умолчанию в CREATE SUBSCRIPTION с off на parallel (Вигнеш Си) §

  • ALTER SUBSCRIPTION теперь может изменять поведение репликационного слота в отношении двухфазной фиксации (Хайато Курода, Аджин Чериан, Амит Капила, Хоу Чжицзе) § §

  • Логируются конфликты, возникающие при применении изменений логической репликации (Хоу Чжицзе, Ниша Мунд) § § § § §

    Также конфликты отображаются в новых столбцах представления pg_stat_subscription_stats.

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

  • Добавлены виртуальные генерируемые столбцы, которые теперь используются по умолчанию (Питер Эйзентраут, Цзянь Хи, Ричард Гуо, Дин Рашид) § § §

    Виртуальные вычисляемые столбцы генерируют свои значения при чтении столбцов, а не при записи. Поведение при записи всё ещё может быть задано с помощью опции STORED.

  • Добавлена поддержка OLD/NEW для RETURNING в запросах DML (Дин Рашид) §

    Ранее RETURNING возвращал только новые значения для INSERT и UPDATE, и старые значения для DELETE; для MERGE возвращалось соответствующее значение для выполненного внутреннего запроса. Этот новый синтаксис позволил списку RETURNING в INSERT/UPDATE/DELETE/MERGE явно возвращать старые и новые значения с помощью специальных псевдонимов old и new. Эти псевдонимы могли быть переименованы для избежания конфликтов идентификаторов.

  • Разрешено создавать внешние таблицы по образцу существующих локальных таблиц (Чжан Минли) §

    Синтаксис выглядит следующим образом: CREATE FOREIGN TABLE ... LIKE.

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

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

    Ранее это приводило к ошибке.

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

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

  • Разрешено командам VACUUM и ANALYZE обрабатывать секционированные таблицы без обработки их дочерних таблиц (Майкл Харрис) §

    Это стало возможным с помощью новой опции ONLY. Функция полезна, поскольку autovacuum не обрабатывал секционированные таблицы, а только их дочерние элементы.

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

    Добавлены следующие функции pg_restore_relation_stats(), pg_restore_attribute_stats(), pg_clear_relation_stats() и pg_clear_attribute_stats().

  • Добавлена серверная переменная file_copy_method для управления методом копирования файлов (Назир Билал Явуз) §

    Она позволяет указать, использовалась ли при CREATE DATABASE ... STRATEGY=FILE_COPY и ALTER DATABASE ... SET TABLESPACE копия файлов или клон.

  • Добавлена возможность указывать неперекрывающиеся ограничения PRIMARY KEY, UNIQUE и внешнего ключа (Пол А. Юнгвирт) § §

    Это можно сделать с помощью WITHOUT OVERLAPS для PRIMARY KEY и UNIQUE, а также с помощью PERIOD для внешних ключей, все ограничения применяются к последнему указанному столбцу.

  • Разрешено указывать ограничения CHECK и внешнего ключа как NOT ENFORCED (Амул Сул) § §

    Это также было добавлено в столбец pg_constraint.conenforced.

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

    Переход на новую версию путём восстановления из дампа, созданного утилитой pg_dump или с использованием pg_upgrade, завершится с ошибкой, если эти требования будут нарушены; при возникновении такой ошибки, для успешного обновления на новую версию, придётся вручную внести изменения в определения объектов.

  • Ограничения целостности NOT NULL теперь хранятся, как и другие ограничения в pg_constraint (Альваро Эррера, Бернд Хелмле) § §

    Это позволило указывать имена для ограничений типа NOT NULL. Также были добавлены ограничения NOT NULL для внешних таблиц и возможность наследования NOT NULL для дочерних таблиц.

  • Командой ALTER TABLE теперь можно устанавливать атрибут NOT VALID для ограничений целостности NOT NULL (Рушаб Латия, Цзянь Хи) §

  • Возможность включить или отключить наследование ограничений NOT NULL (Сурадж Хараге, Альваро Эррера) § §

    Используется синтаксис: ALTER TABLE ... ALTER CONSTRAINT ... [NO] INHERIT.

  • Возможность использовать внешние ключи без проверки NOT VALID на секционированных таблицах (Амул Сул) §

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

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

E.6.3.2.2. COPY #
  • Добавлена возможность указать REJECT_LIMIT для установки максимального числа строк с неверными значениями, которые COPY FROM сможет игнорировать при загрузке (Атсуши Торикоши) §

    Параметр работает, когда ON_ERROR = 'ignore'.

  • Команде COPY TO разрешено выгружать строки из заполненных материализованных представлений (Цзянь Хи) §

  • Добавлен уровень silent для COPY LOG_VERBOSITY для того, чтобы не логировать в диагностический журнал кластера строки, которые были отвергнуты при загрузке (Атсуши Торикоши) §

    Новый уровень важности подавляет вывод сообщений о незагруженных строках, когда установлен on_error = 'ignore'.

  • На внешних таблицах был запрещён COPY FREEZE (Натан Боссарт) §

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

E.6.3.2.3. EXPLAIN #
  • Теперь в EXPLAIN ANALYZE опция BUFFERS включена по умолчанию (Гийом Леларж, Дэвид Роули) §

  • В вывод EXPLAIN (WAL) добавлено количество полностью заполненных WAL-буферов (Бертран Друво) §

  • В EXPLAIN ANALYZE было добавлено отображение количества обращений к индексу, использованных на каждый узел сканирования индекса (Питер Геогеган) §

  • Теперь команда EXPLAIN выводит число строк с точностью до двух знаков после десятичной точки (Ибрар Ахмед, Илья Евдокимов, Роберт Хаас) § §

  • В вывод EXPLAIN добавлены детали об использования памяти и диска узлами Material, Window Aggregate, а также узлами CTE (Дэвид Роули, Тацуро Исии) § § § §

  • В вывод EXPLAIN добавлены детали об аргументах оконных функций (Том Лейн) §

  • В вывод EXPLAIN ANALYZE добавлены статистики по кэшу рабочих процессов для Parallel Bitmap Heap Scan (Дэвид Гейер, Хейкки Линнакангас, Дунхан Лин, Алена Рыбакина, Дэвид Роули) §

  • В вывод EXPLAIN ANALYZE добавлено отображение числа отключенных узлов (Роберт Хаас, Дэвид Роули, Лауренц Альбе) § § §

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

  • Улучшен full case mapping для Unicode (Джефф Дэвис) § §

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

  • Возможность приводить значение null из jsonb к скалярным типам как NULL (Том Лейн) §

    Ранее такие приведения типов вызывали ошибку.

  • Добавлен необязательный параметр в функцию json{b}_strip_nulls для удаления элементов массива со значением null (Флоренц Целай) §

  • Добавлена функция array_sort(), которая сортирует первое измерение массива (Цзюньван Жао, Цзянь Хи) §

  • Добавлена функция array_reverse(), которая обращает (переставляет в обратном порядке) первое измерение массива (Александр Алексеев) §

  • Добавлена функция reverse(), которая переставляет байты в обратном порядке в bytea (Александр Алексеев) §

  • Приведение типов между целочисленными типами и bytea (Александр Алексеев) §

    Целочисленные значения сохраняются как значения bytea в дополнительном коде.

  • Обновление Unicode до версии 16.0.0 (Питер Эйзентраут) §

  • Поддержка стемминга для эстонского языка (Том Лейн) §

  • Улучшены коды ошибок XML для более точного соответствия стандарту SQL (Том Лейн) §

    Эти ошибки можно получить через SQLSTATE.

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

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

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

  • Появилась возможность использования функций MIN()/MAX() с массивами и составными типами данных (Александр Алексеев, Марат Бухаров) § §

  • В функцию EXTRACT() добавлен аргумент WEEK (Том Лейн) §

  • Улучшен вывод EXTRACT(QUARTER ...) для отрицательных значений (Том Лейн) §

  • Добавлена поддержка римских цифр в функции to_number() (Хунаид Сохаил) §

    Для этого используется шаблон RN.

  • Добавлена функция uuidv7() генерации UUID версии 7 (Андрей Бородин) §

    Значения UUID версии 7 отсортированы по времени. Добавлена функция uuidv4() для генерации UUID версии 4.

  • Добавлены функции crc32() и crc32c() для вычисления значений CRC (Александр Алексеев) §

  • Добавлены математические функции gamma() и lgamma() (Дин Рашид) §

  • Разрешён синтаксис => для поименованных параметров курсора в PL/pgSQL (Павел Стехуле) §

    Ранее принимался только синтаксис :=.

  • Добавлена поддержка именованных аргументов в функциях regexp_match[es]()/regexp_like()/regexp_replace()/regexp_count()/regexp_instr()/regexp_substr()/regexp_split_to_table()/regexp_split_to_array() (Цзянь Хи) §

E.6.3.5. Libpq #

  • Добавлена функция PQfullProtocolVersion(), которая используется для отображения полной версии протокола взаимодействия клиента и сервера, включая минорный номер версии (Джейкоб Чемпион, Йелте Феннема-Нио) §

  • Добавлены параметры подключения libpq и переменные окружения для указания минимальной и максимальной допустимой версии протокола (Йелте Феннема-Нио) § §

  • Вывод изменений search_path клиенту (Александр Кукушкин, Йелте Феннема-Нио, Томаш Вондра) § §

  • Добавлен вывод функции PQtrace() для всех типов сообщений, включая сообщения об аутентификации (Йелте Феннема-Нио) § § § § §

  • Добавлен параметр подключения libpq sslkeylogfile, позволяющий логировать SSL-ключи (Абхишек Чанда, Даниэль Густафссон) §

    Полезно для отладки.

  • Поменялись сигнатуры части функций libpq, в них стал использоваться тип данных int64_t (Томас Манро) §

    Ранее использовался тип pg_int64, который теперь считается устаревшим.

E.6.3.6. psql #

  • Добавлена возможность psql разбирать, связывать и закрывать именованные подготовленные запросы (Антонин Боннефой, Микаэль Пакье) § §

    Для этого используются новые команды \parse, \bind_named и \close_prepared.

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

    Добавлены команды: \startpipeline, \syncpipeline, \sendpipeline, \endpipeline, \flushrequest, \flush, \getresults.

  • Появилась возможность добавить статус конвейера в промпт psql, и добавлены переменные psql, описывающие состояние конвейера (Антонин Боннефой) §

    Новый символ промпта — %P, новые переменные psqlPIPELINE_SYNC_COUNT, PIPELINE_COMMAND_COUNT и PIPELINE_RESULT_COUNT.

  • Возможность добавить название службы подключения в промпт psql - %s новая перменная psql - SERVICE (Михаэль Банк) §

  • Добавлен параметр psql для использования расширенного режима в командах выведения данных \d*, \l, \z, \lo_list, кроме \dx (Дин Рашид) §

    Для этого в конец команды добавляется символ x.

  • Команда psql \conninfo теперь использует табличный формат и выводит больше дополнительной информации (Альваро Эррера, Майквел Грасси, Хунаид Сохаил) §

  • В вывод команд \df+, \do+, \dAo+, \dC+ psql добавлен индикатор Leakproof? защищённости функции от утечек (Юго Нагата) §

  • Добавлены подробные данные о методе доступа к секционированным таблицам и индексам в вывод команды \dP+ (Джастин Призби) §

  • В вывод команды psql \dx добавлена версия расширения по умолчанию default_version (Магнус Хагандер) §

  • Добавлена переменная psql WATCH_INTERVAL, которая задает время ожидания по умолчанию для команды \watch (Даниэль Густафссон) §

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

  • В initdb по умолчанию включен подсчет контрольных сумм (Грег Сабино Маллейн) § §

    Новый параметр initdb --no-data-checksums отключает расчет контрольных сумм.

  • Добавлен параметр initdb --no-sync-data-files для пропуска фазы синхронизации файлов данных (Натан Боссарт) §

    Опция initdb --no-sync всё ещё доступна для отключения синхронизации любых файлов.

  • Добавлена функция vacuumdb --missing-stats-only для сбора статистики только по тем объектам, на которых она отсутствует (Кори Хинкер, Натан Боссарт) § §

    Парметр доступен только суперпользователям и может использоваться только с параметрами --analyze-only или --analyze-in-stages.

  • Добавлен параметр pg_combinebackup -k/--link, чтобы использовать жесткие ссылки (Израэль Барт Рубио, Роберт Хаас) §

    Жёсткие ссылки можно использовать не для всех файлов. Параметр не стоит использовать, если резервные копии планируется использоваться независимо друг от друга.

  • Утилита pg_verifybackup теперь может проверять резервные копии, созданные в формате tar (Амул Сул) §

  • Если в параметре pg_rewind --source-server указывается имя базы данных, то оно теперь добавляется в параметр primary_conninfo, который формируется параметром --write-recovery-conf (Масахико Савада) §

  • В утилиту pg_resetwal добавлен параметр --char-signedness, который обновляет в управляющем файле флаг знаковости типа char (Масахико Савада) §

  • В утилиту pg_dump добавлен параметр --statistics (Джефф Дэвис) § §

  • В pg_dump и pg_dumpall добавлен параметр --sequence-data, чтобы выгружать данные последовательностей при использовании параметров --no-data, --schema-only, --statistics-only (Натан Боссарт) § §

  • В утилиты pg_dump, pg_dumpall и pg_restore добавлены параметры --statistics-only, --no-statistics, --no-data и --no-schema (Кори Хинкер, Джефф Дэвис) §

  • В утилиты pg_dump, pg_dumpall и pg_restore добавлен параметр --no-policies, отключающий выгрузку и восстановление из дампа политики защиты на уровне строк (Николай Самохвалов) §

    Может быть полезно при миграции на системы с другими политиками.

E.6.3.7.2. pg_upgrade #
  • pg_upgrade теперь, по умолчанию, сохраняет статистику оптимизатора (Кори Хинкер, Джефф Дэвис, Натан Боссарт) § § § §

    Расширенная статистика не сохраняется. Для отключения сохранения статистики добавлен параметр pg_upgrade --no-statistics.

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

    Функциональность включается существующим параметром --jobs.

  • Добавлена параметр pg_upgrade --swap для переноса каталогов вместо копирования, клонирования или связывания файлов (Натан Боссарт) §

    Этот режим потенциально является самым быстрым.

  • Добавлен параметр pg_upgrade --set-char-signedness для задания знаковости по умолчанию для char в новом кластере (Масахико Савада) § §

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

E.6.3.7.3. Приложения логической репликации #
  • Добавлен параметр --all для pg_createsubscriber, позволяющий создавать логические реплики для всех баз данных (Шубхам Ханна) §

  • Добавлен параметр pg_createsubscriber --clean для удаления публикаций на подписчике (Шубхам Ханна) § §

  • Добавлен параметр pg_createsubscriber --enable-two-phase, позволяющий включать подготовленные транзакции (Шубхам Ханна) §

  • Добавлен параметр pg_recvlogical --enable-failover для задания свойства failover при создании логического слота репликации (Хайато Курода) §

    Также был добавлен параметр --enable-two-phase в качестве синонима параметра --two-phase, который объявлен устаревшим.

  • Параметр pg_recvlogical --drop-slot теперь может работать без --dbname (Хайато Курода) §

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

  • Добавлена поддержка аргументов, задаваемых во время выполнения в точках внедрения (Микаэль Пакье) §

  • Улучшена производительность обработки длинных строк JSON с использованием инструкций SIMD (Single Instruction Multiple Data) (Дэвид Роули) §

  • Ускорены вычисления CRC32C с использованием инструкций x86 AVX-512 (Рагхувир Девулапалли, Пол Амонсон) §

  • Добавлены встроенные функции ARM Neon и SVE CPU для popcount (подсчёта количества бит в целых числах) (Чиранмой Бхаттачарья, Деванга Сусмита, Рама Маллади) § §

  • Ускорено умножение и деление значений типа numeric (Джоэл Джейкобсон, Дин Рашид) § § § §

  • Добавлена TOAST-таблица к pg_index для поддержки очень больших выражений в индексах, основанных на выражении (Натан Боссарт) §

  • Удалён столбец pg_attribute.attcacheoff (Дэвид Роули) §

  • Добавлен столбец pg_class.relallfrozen (Мелани Плейгман) §

  • Добавлены процедуры amgettreeheight, а также свойства amconsistentequality и amconsistentordering в API индексных методов доступа (Марк Дилгер) § §

  • Добавлена опорная функция GiST stratnum() (Пол А. Юнгвирт) §

  • Регистрация знаковости типа char, которое используется по умолчанию для CPU в файле pg_controldata (Масахико Савада) §

  • Добавлена поддержка Python Limited API (ограниченного API Python) в PL/Python (Питер Эйзентраут) § §

    Это предотвращает проблемы, вызванные несоответствием версий Python 3.x.

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

  • Прекращена поддержка версий OpenSSL старше 1.1.1 (Даниэль Густафссон) § §

  • Для LLVM (при наличии) теперь требуется версия 14 или новее (Томас Манро) §

  • Добавлен макрос PG_MODULE_MAGIC_EXT, позволяющий расширениям сообщать своё имя и версию (Андрей Лепихов) §

    Эту информацию можно получить с помощью новой функции pg_get_loaded_modules().

  • Задокументировано, что функции SPI_connect()/SPI_connect_ext() всегда возвращают успешный результат (SPI_OK_CONNECT) (Степан Неретин) §

    Сообщения об ошибках всегда генерируются через ereport().

  • В PostgreSQL удалены параметры скрипта конфигурирования при установке из исходных кодов configure --disable-spinlocks и --disable-atomics (Томас Манро) § §

    32-битные атомарные операции теперь обязательны.

  • В PostgreSQL перестали поддерживать архитектуру HPPA/PA-RISC (Том Лейн) §

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

  • Добавлено расширение pg_logicalinspect для проверки снимков, полученных при логическом декодировании (Бертран Друво) §

  • Добавлено расширение pg_overexplain, которое добавляет отладочную информацию в вывод команды EXPLAIN (Роберт Хаас) §

  • Добавлены выходные столбцы в функцию postgres_fdw_get_connections() (Хайато Курода, Сагар Дилип Шедж) § § § §

    Новые выходные столбцы показывают следующее: used_in_xact - используется ли обёртка сторонних данных текущей транзакцией, closed - закрыто ли соединение, user_name - имя пользователя, а remote_backend_pid - идентификатор удалённого бэкэнд-процесса.

  • Разрешена сквозная аутентификация SCRAM между клиентом и серверами postgres_fdw (Матеус Алькантара, Питер Эйзентраут) §

    Это позволяет избежать хранения информации для аутентификации postgres_fdw в базе данных postgres_fdw, и включается параметром use_scram_passthrough. libpq использует новые параметры подключения scram_client_key и scram_server_key.

  • Разрешена сквозная аутентификация SCRAM между клиентом и серверами dblink (Матеус Алькантара) §

  • В file_fdw добавлены параметры on_error и log_verbosity (Атсуши Торикоши) §

    Эти параметры управляют тем, как file_fdw обрабатывает и сообщает об ошибочных строках в файлах.

  • Добавлен параметр reject_limit для задания максимального числа ошибочных строк, которые file_fdw может игнорировать (Атсуши Торикоши) §

    Активируется при условии ON_ERROR = 'ignore'.

  • В passwordcheck добавлен параметр конфигурации min_password_length (Эмануэле Музелла, Маурицио Бориани) §

    Параметр позволяет задавать минимальную длину пароля.

  • В отчёты pgbench добавлено отображение количества неуспешных, повторно выполненных или пропущенных транзакций по каждому скрипту (Юго Нагата) §

  • Добавлен параметр конфигурации isn weak для возможности принимать значения ISN c неверными контрольными цифрами (Виктор Хольмберг) §

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

  • Добавлена возможность сортировки значений для ускорения создания индексов btree_gist (Бернд Хелмле, Андрей Бородин) §

  • Добавлена функция amcheck gin_index_check() для верификации индексов GIN (Григорий Крячко, Хейкки Линнакангас, Андрей Бородин) §

  • Добавлены функции pg_buffercache_evict_relation() и pg_buffercache_evict_all(), с помощью которых, из буферного кэша можно вытеснить незакреплённые буфера (Назир Билал Явуз) §

    Существовавшая ранее функция pg_buffercache_evict() теперь возвращает статус вытеснения буфера.

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

  • Расширениям разрешено использовать API накопительной статистики (Микаэль Пакье) § §

E.6.3.9.1. pg_stat_statements #
  • С помощью pg_stat_statements можно отслеживать запросы CREATE TABLE AS и DECLARE (Антонин Боннефой) §

    Этим командам теперь назначаются идентификаторы запросов.

  • В pg_stat_statements добавлена возможность параметризации значений SET (Грег Сабино Маллейн, Микаэль Пакье) §

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

  • В pg_stat_statements добавлены столбцы для отображения параллельной активности (Гийом Леларж) §

    Новые столбцы — parallel_workers_to_launch и parallel_workers_launched.

  • Добавлен столбец pg_stat_statements.wal_buffers_full для отображения количества полностью заполненных WAL-буферов (Бертран Друво) §

E.6.3.9.2. pgcrypto #
  • В функцию crypt() добавлены алгоритмы pgcrypto sha256crypt и sha512crypt (Бернд Хелмле) §

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

  • Добавлена функция fips_mode(), возвращающая true, если OpenSSL работает в соответствии с FIPS (Даниэль Густафссон) §

  • Добавлен параметр конфигурации pgcrypto builtin_crypto_enabled для отключения встроенных функций шифрования, не соответствующих FIPS (Даниэль Густафссон, Джо Конвей) §

    Полезно для гарантирования того, что работа расширения соответствует FIPS.

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

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

Абхишек Чанда
Адам Гуо
Адам Раух
Айдар Имамов
Ajin Cherian
Аластер Тёрнер
Алек Козенс
Aleksander Alekseev
Алена Рыбакина
Алекс Фридман
Алекс Ричман
Александр Алёхин
Александр Борисов
Alexander Korotkov
Александр Кожемякин
Alexander Kukushkin
Александр Кузьменков
Александр Кузнецов
Alexander Lakhin
Alexander Pyhalov
Александра Ван
Алексей Двойченков
Алексей Махмутов
Алексей Шишкин
Али Акбар
Álvaro Herrera
Альваро Монхиль
Amit Kapila
Amit Langote
Amul Sul
Андреас Карлссон
Андреас Шербаум
Андреас Ульбрих
Андрей Лепихов
Andres Freund
Эндрю
Andrew Bille
Andrew Dunstan
Эндрю Джексон
Эндрю Кейн
Эндрю Уоткинс
Andrey Borodin
Андрей Чудновский
Андрей Рачицкий
Андрей Рудометов
Энди Алсуп
Andy Fan
Anthonin Bonnefoy
Энтони Хсу
Энтони Люн
Anton Melnikov
Anton Voloshin
Antonin Houska)
Антти Лямпинен
Арсений Мухин
Артур Закиров
Арун Тхирупати
Ashutosh Bapat
Асфатор
Atsushi Torikoshi
Ави Вайнберг
Aya Iwata
Айюш Тивари
Айюш Ватса
Бастьен Рукарье
Бен Пичи Хигдон
Benoit Lobréau
Бернд Хельмле
Бернд Райс
Бернхард Видеманн
Bertrand Drouvot
Бертран Мамасам
Bharath Rupireddy
Богдан Григоренко
Бою Ян
Браулио Фернандо Гонсалес
Bruce Momjian
Иван Быков
Кэмерон Вогт
Cary Huang
Седрик Вильмен
Кис ван Зеланд
ЧанАо Чэнь
Чао Ли
Chapman Flack
Чарльз Самборски
Чэнвэнь Ву
Чэнси Сун
Чиранмой Бхаттачарья
Крис Гуч
Кристиан Харукевич
Christoph Berg
Кристоф Куртуа
Кристофер Инокути
Клеменс Рук
Corey Huinker
Крейг Милхайзер
Крисп Ли
Dagfinn Ilmari Mannsåker
Даниил Элишаков
Daniel Gustafsson
Daniel Vérité
Daniel Westermann
Daniele Varrazzo
Даниил Давыдов
Дарья Шанина
Dave Cramer
Dave Page
Дэвид Бенджамин
David Christensen
Дэвид Фидлер
David G. Johnston
Дэвид Гейер
David Rowley
David Steele
Дэвид Уилер
David Zhang
Давиндер Сингх
Dean Rasheed
Деванга Сусмита
Деврим Гюндюз
Dian Fay
Dilip Kumar
Димитриос Апостолу
Дипеш Дхамелия
Дмитрий Бондарь
Dmitry Dolgov
Dmitry Koval
Дмитрий Коваленко
Дмитрий Юричев
Dominique Devienne
Дунхан Лин
Доржпалам Батбаатар
Дрю Каллахан
Дункан Сандс
Дуэйн Тоуэлл
Дзмитрий Ячник
Egor Chindyaskin
Egor Rogov
Эмануэль Ионеску
Эмануэле Музелла
Emre Hasegeli
Эрик Сир
Erica Zhang
Эрик Нордстрём
Erik Rijkers
Эрик Винхольд
Erki Eessaar
Итан Мерц
Этьен Лафарж
Etsuro Fujita
Euler Taveira
Эван Си
Евгений Горбанёв
Фабио Р. Слузала
Fabrízio de Royes Mello
Фейке Стенберген
Feliphe Pozzer
Феликс
Огненный Изумруд
Флоренц Целай
Франческо Деграсси
Франк Штрайциг
Frédéric Yhuel
Фредрик Видлерт
Габриэле Бартолини
Гэвин Панелла
Geoff Winkless
Джордж МакКэррон
Gilles Darold
Грант Грычан
Грег Бёрд
Greg Sabino Mullane
Greg Stark
Григорий Крячко
Guillaume Lelarge
Гуннар Морлинг
Гуннар Вагнер
Gurjeet Singh
Хайфан Ван
Хадзиме Мацунага
Хамид Ахтар
Hannu Krosing
Хари Кришна Сундер
Харука Такацука
Hayato Kuroda
Heikki Linnakangas
Хиронобу Сузуки
Якобс Хольгер
Hubert Lubaczewski
Гюго Дюбуа
Хьюго Чжан
Хунаид Сохаил
Хайвел Карвер
Ian Barwick
Ibrar Ahmed
Игорь Гнатюк
Игорь Корот
Илья Евдокимов
Илья Гладышев
Ян Ильясов
Имран Захир
Исаак Морланд
Израиль Барт Рубио
Иван Куш
Джейкоб Брейзил
Jacob Champion
Jaime Casanova
Якоб Еггер
Jakub Wartak
James Coleman
Джеймс Хантер
Ян Беренс
Japin Li
Джейсон Смит
Джаеш Деханкар
Дживан Чалке
Jeff Davis
Jehan-Guillaume de Rorthais
Йелте Феннема-Нио
Jian He
Цзянхуа Ян
Цзяо Шуньтянь
Джим Джонс
Джим Нэсби
Jingtang Zhang
Цзинчжоу Фу
Джо Конвей
Joel Jacobson
Джон Хатчинс
John Naylor
Jonathan Katz
Хорхе Солорсано
Хосе Вилланова
Josef Šimánek
Joseph Koshakow
Julien Rouhaud
Junwang Zhao
Justin Pryzby
Кайдо Вайкла
Кайме
Карина Лицкевич
Картик С
Иван Картышов
Кашиф Зишан
Кейсуке Курода
Кевин Хейл Бойс
Кевин К Биджу
Кирилл Решке
Кирилл Здорный
Коэн Де Гроот
Коичи Судзуки
Коки Накамура
Konstantin Knizhnik
Кохэй Суту
Kuntal Ghosh
Kyotaro Horiguchi
Лакшми Нараяна Велаюдам
Lars Kanis
Лоуренс Парри
Laurenz Albe
Леле Гайфакс
Ли Юн
Лилиан Онтоуи
Линбинь Мэн
Любослав Шпилак
Лука Валлиза
Lukas Fittl
Maciek Sakrejda
Magnus Hagander
Mahendra Singh Thalor
Махендракар Шринивасарао
Майкель Грасси
Максим Коротков
Максим Мельников
Ман Цзэн
Марат Бухаров
Марк Балмер
Марко Ненчарини
Маркос Пегораро
Marina Polyakova
Марк Каллахан
Mark Dilger
Марлин Брандштеттер
Марлене Рейтерер
Мартин Рахманов
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Мейсон Маккаман
Мэт Арье
Матеус Алкантара
Матс Киндал
Мэтью Гейблер-Ли
Мэтью Ким
Мэтью Стерретт
Мэтью Вудкрафт
Matthias van de Meent
Матье Денэ
Маурицио Бориани
Макс Джонсон
Макс Мэдден
Максим Богу́к
Maxim Orlov
Максимилиан Хшан
Melanie Plageman
Мелих Мутлу
Мерт Алев
Michael Banck
Михаил Бондаренко
Майкл Христофидес
Майкл Гиссин
Michael Harris
Микаэль Пакье
Михаил Николаев
Михал Клечек
Мишель Пельтье
Микаэль Гурлауэн
Михаил Грибков
Михаил Кот
Милош Хмура
Мураликришна Бандара
Мурат Эфендиоглу
Мутаамба Мааша
Наим Ахтер
Нат Макаревич
Nathan Bossart
Навнит Кумар
Nazir Bilal Yavuz
Нейл Конвей
Никколо Фей
Ник Дэвис
Николас Маус
Ник Браса
Нихил Радж
Никита
Никита Калинин
Никита Малахов
Nikolay Samokhvalov
Nikolay Shaplov
Ниша Мунд
Nitin Jadhav
Нитин Мотиани
Noah Misch
Noboru Saito
Noriyoshi Shinoda
Оле Педер Брандцэг
Олег Сибиряков
Олег Целебровский
Олег Самойлов
Onder Kalaci
Ондржей Навратил
Патрик Штэлин
Пол Амонсон
Paul Jungwirth
Пол Рэмси
Pavel Borisov
Pavel Luzanov
Павел Некрасов
Pavel Stehule
Peter Eisentraut
Peter Geoghegan
Питер Миттере
Peter Smith
Фил Итон
Филипп Сальвисберг
Филипп Бодоэн
Пьер Жиро
Пиксянь Ши
Полина Бунгина
Пшемыслав Штох
Quynh Tran
Рафия Сабих
Рагхувир Девулапалли
Rahila Syed
Рама Маллади
Ран Бенита
Ranier Vilela
Ренан Алвес Фонсека
Richard Guo
Ричард Нилл
Ринтаро Икеда
Robert Haas
Роберт Трит
Robins Tharakan
Roman Zharkov
Рональд Круз
Ронан Дунклау
Rui Zhao
Рушаб Латия
Рустам Аллаков
Рё Канбаяши
Ryohei Takahashi
РётаК
Сагар Дилип Шедж
Сальваторе Дипьетро
Сэм Габриэльссон
Сэм Джеймс
Самир Кумар
Sami Imseih
Самуэль Тибо
Сатьянараяна Нарлапурам
Себастьян Скалецкий
Сенли Чхве
Sergei Kornilov
Сергей Беляшов
Сергей Дудоладов
Сергей Прохоренко
Сергей Саргсян
Сергей Соловьёв
Сергей Татаринцев
Шейк Мохаммад Муджиб
Шон Маккой
Shenhao Wang
Шихао Чжун
Shinya Kato
Шлок Кьял
Шубхам Ханна
Швета Малик
Simon Riggs
Григорий Смолкин
Софья Копикова
Сонг Хунъюй
Сун Цзиньчжоу
Soumyadeep Chakraborty
Шраван Кумар
Шринатх Редди
Stan Hu
Степан Неретин
Стивен Фьюэр
Stephen Frost
Steve Chavez
Стивен Ню
Suraj Kharage
Sven Klemm
Takamichi Osumi
Takeshi Ideriha
Tatsuo Ishii
Тед Юй
Телс
Тендер Ван
Федор Сигаев
Thom Brown
Томас Бэлер
Томас Креннвалльнер
Томас Манро
Тим Вуд
Тимур Магомедов
Тобиас Вендорфф
Тодд Кук
Тофиг Алиев
Tom Lane
Tomas Vondra
Томаш Рыбак
Томаш Шиповский
Торстен Фёрч
Тоши Харада
Тристан Партин
Тривени Н
Умар Хайат
Валлимахараджан Г
Вася Бойцов
Victor Yegorov
Vignesh C
Виктор Хольмберг
Винисиус Абраан
Винод Шридхаран
Вирендер Сингла
Виталий Давыдов
Владлен Пополитов
Владислав Небожин
Валид Ибрагим
Веббо Хан
Вэньхуэй Цю
Will Mortensen
Уилл Стори
Wolfgang Walther
Синь Чжан
Син Го
Сюнэн Чжоу
Янь Чэнпэнь
Ян Лэй
Ярослав Сабуров
Ярослав Сырыця
Ясир Хуссейн
Ясуо Хонда
Йогеш Шарма
Юнхао Ли
Йоран Хелинг
Юй Лян
Yugo Nagata
Юхан Цю
Юки Сейно
Yura Sokolov
Юрий Рашковский
Юси Огивара
Юсукэ Сугиэ
Юта Кацураги
Юто Сасаки
Юуки Фудзии
Юя Ватари
Зейн Даффилд
Цзэюань Ху
Zhang Mingli
Zhihong Yu
Чжицзе Хоу
Жолт Парраги