E.1. Выпуск 18 #
Дата выпуска: 2025-09-25
E.1.1. Обзор #
PostgreSQL 18 содержит много новых возможностей и улучшений, в том числе:
- Подсистема асинхронного ввода-вывода, которая позволяет повысить производительность последовательного сканирования, сканирования кучи по битовой карте, процесса очистки и других операций. 
- Утилита pg_upgrade теперь переносит статистику оптимизатора при обновлении сервера. 
- Поддержка пропуска при сканировании во время поиска по индексу, что позволяет использовать составные индексы-B-деревья в большем количестве случаев. 
- Функция - uuidv7()для генерирования упорядоченных по временным меткам UUID.
- Виртуальные генерируемые столбцы, значения которых вычисляются во время операций чтения. Теперь для генерируемых столбцов это поведение по умолчанию. 
- Поддержка аутентификации по OAuth. 
- Поддержка псевдонимов - OLDи- NEWв предложениях- RETURNINGкоманд INSERT, UPDATE, DELETE и MERGE.
- Временные ограничения или ограничения диапазонов для ограничений PRIMARY KEY, UNIQUE и FOREIGN KEY. 
Предыдущие пункты и другие новые возможности PostgreSQL 18 более подробно описаны в следующих разделах.
E.1.2. Миграция на версию 18 #
Тем, кто хочет перенести данные из любой предыдущей версии, необходимо выполнить выгрузку/загрузку данных с помощью pg_dumpall либо использовать pg_upgrade или логическую репликацию. Общую информацию о переходе на более новую основную версию можно найти в Разделе 18.6.
В версии 18 реализован ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Рассмотрите следующие несовместимые аспекты:
- Изменение значения по умолчанию initdb для включения расчёта контрольных сумм данных (Грег Сабино Маллейн) § - Расчёт контрольных сумм можно отключить при помощи нового параметра конфигурации initdb - --no-data-checksums. Он может быть полезен при обновлении старых кластеров без включённого расчёта контрольных сумм, для этого pg_upgrade требует, чтобы параметры контрольных сумм кластеров совпадали.
- Изменение обработки аббревиатур часовых поясов (Том Лейн) § - Теперь система проверяет аббревиатуры часовых поясов текущего сеанса до проверки параметра конфигурации timezone_abbreviations. Ранее он проверялся первым. 
- Объявление устаревшей аутентификации по паролю, зашифрованному алгоритмом MD5 (Натан Боссарт) § - Шифрование паролей алгоритмом MD5 перестанет поддерживаться в следующей основной версии. Команды CREATE ROLE и ALTER ROLE теперь выводят предупреждение об устаревании при установлении параметров паролей MD5. Эти предупреждения можно отключить, установив значение - offдля параметра md5_password_warnings.
- Изменение обработки потомков родительской таблицы командами VACUUM и ANALYZE (Майкл Харрис) § - Предыдущее поведение можно включить при помощи нового параметра - ONLY.
- Запрет - COPY FROMобрабатывать- \.как маркер конца файла при чтении файлов CSV (Даниэль Верите, Том Лейн) § §- psql всё ещё обрабатывает - \.как маркер конца файла при чтении файлов CSV из- STDIN. Старые клиенты psql, подключающиеся к серверам PostgreSQL 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(), которая теперь начинается с 1 (Мелих Мутлу, Атсуши Торикоши, Дэвид Роули, Фудзии Масао) § § §- Ранее нумерация начиналась с нуля. 
- Использование провайдера правил сортировки по умолчанию вместо libc для полнотекстового поиска при чтении файлов конфигурации и словарей (Питер Эйзентраут) § - Кластеры, по умолчанию использующие отличный от libc провайдер правил сортировки (например, ICU, builtin), поведение которого отличается от поведения libc в части обработки символов параметром LC_CTYPE, могут столкнуться с изменением поведения модуля pg_trgm и некоторых функций полнотекстового поиска. При обновлении таких кластеров при помощи pg_upgrade рекомендуется перестроить все индексы, связанные с полнотекстовым поиском и pg_trgm, после завершения обновления. 
E.1.3. Изменения #
Ниже вы найдёте подробный список изменений, произошедших между предыдущим основным выпуском и выпуском PostgreSQL 18.
E.1.3.1. Сервер #
E.1.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(Дэвид Роули, Сун Цзиньчжоу) § §
- Возможность оптимизатора использовать планы с правыми неполными соединениями (Ричард Гуо) § - Неполные соединения используются для поиска как минимум одного совпадения. 
- Возможность использовать инкрементальную сортировку при соединении слиянием (Ричард Гуо) § 
- Повышение эффективности планирования запросов, обращающихся к большому количеству секций (Ашутош Бапат, Юя Ватари, Дэвид Роули) § § 
- Возможность чаще использовать соединения с учётом секционирования и сокращение использования памяти такими соединениями (Ричард Гуо, Том Лейн, Ашутош Бапат) § § 
- Улучшение оценки стоимости запросов к секционированными таблицам (Никита Малахов, Андрей Лепихов) § 
- Улучшение кеширования планов для функций SQL (Александр Пыхалов, Том Лейн) § § 
- Улучшение обработки отключённой функциональности оптимизатора (Роберт Хаас) § 
E.1.3.1.2. Индексы #
- Возможность пропускать сканирование индексов btree (Питер Гейган) § § - Это позволяет чаще использовать составные индексы-B-деревья, например в случаях, когда отсутствуют ограничения на первый столбец или индексируемые раньше столбцы (или если есть условия неравенства) и есть полезные ограничения на столбцы, индексируемые позднее. 
- Возможность использовать уникальные индексы, отличные от B-дерева, в качестве ключей секционирования и в материализованных представлениях (Марк Дилгер) § § - Тип индексов должен поддерживать сравнение на равенство. 
- Возможность параллельного создания индексов - GIN(Томаш Вондра, Маттиас ван де Меент) §
- Возможность сортировки значений для ускорения построения индексов диапазонных типов GiST и btree (Бернд Хелмле) § 
E.1.3.1.3. Общая производительность #
- Добавление подсистемы асинхронного ввода-вывода (Андрес Фройнд, Томас Манро, Назир Билал Явуз, Мелани Плейгман) § § § § § § § § § § § - Благодаря этой функциональности обслуживающие процессы могут ставить в очередь несколько запросов на чтение, что позволяет повысить производительность последовательного сканирования, сканирования кучи по битовой карте, процесса очистки и других операций. Эта функциональность включается при помощи параметра конфигурации io_method и управляется параметрами io_combine_limit и io_max_combine_limit. Она также позволяет использовать параметры effective_io_concurrency и maintenance_io_concurrency со значениями больше нуля для систем без поддержки функции - fadvise(). В новом представлении- pg_aiosпоказываются дескрипторы, используемые для асинхронного ввода-вывода.
- Увеличение производительности блокировок запросов, обращающихся к большому числу отношений (Томаш Вондра) § 
- Увеличение производительности и сокращение использования памяти соединениями по хешу и предложениями - GROUP BY(Дэвид Роули, Джефф Девис) § § § § §- Кроме того, улучшена производительность операций с набором хешей, используемых предложениями - EXCEPT, и поиск по хешу значений подплана.
- Возможность заморозки отдельных даже полностью видимых страниц при обычных операциях очистки (Мелани Плейгман) § § - Таким образом снижаются издержки последующей заморозки всего отношения. Агрессивность этой функциональности управляется параметром конфигурации на уровне таблиц vacuum_max_eager_freeze_failure_rate. Ранее процесс очистки обрабатывал полностью видимые страницы, только когда требовалась заморозка. 
- Добавление параметра конфигурации vacuum_truncate, который управляет усечением файлов во время VACUUM (Натан Боссарт, Гуржит Сингх) § - Параметр уровня хранения с таким именем и поведением уже существовал. 
- Увеличение значения по умолчанию до 16 для параметров конфигурации effective_io_concurrency и maintenance_io_concurrency (Мелани Плейгман) § § - Это изменение более точно отражает требования современного аппаратного обеспечения. 
E.1.3.1.4. Мониторинг #
- Реализация более подробного протоколирования серверной переменной log_connections (Мелани Плейгман) § - Ранее переменная принимала только логическое значение, что всё ещё поддерживается. 
- Добавление нового значения - log_connections, которое позволяет протоколировать длительность этапов установления соединения (Мелани Плейгман) §
- Добавление спецсимвола - %Lдля параметра конфигурации log_line_prefix, что позволяет выводить IP-адрес клиента (Грег Сабино Маллейн) §
- Добавление серверной переменной log_lock_failures, обеспечивающей протоколирование ошибок получения блокировок (Юки Сэйно, Фудзии Масао) § § - В частности, протоколируются ошибки блокировки - SELECT ... NOWAIT.
- Отображение времени, затраченного при VACUUM, ANALYZE и их автоматизированных вариантах, в представлении - pg_stat_all_tablesи его вариантах (Сами Имсейх) §- Представления теперь содержат следующие новые столбцы: - 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 и процессора, а также статистики чтения в вывод команды - ANALYZE VERBOSE(Антонин Боннефой) § §
- Добавление количества переполненных буферов WAL в вывод команд - VACUUM/- ANALYZE (VERBOSE), а также журнала процесса автоочистки (Бертран Друво) §
- Добавление выдачи статистики ввода-вывода для каждого обслуживающего процесса (Бертран Друво) § § - Обращение к статистике выполняется вызовом функции - 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(Бертран Друво) §
- Удаление столбцов, связанных с записью/синхронизацией, из представления - 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.
- Вычисление идентификатора запроса на основе только первой и последней константы из списка констант (Дмитрий Долгов, Сами Имсейх) § § § - Генерирование нормализованного запроса используется модулем pg_stat_statements. 
- Группировка запросов, использующих одно имя отношения, при вычислении идентификаторов запросов (Микаэль Пакье, Сами Имсейх) § - Это работает, даже если у таблиц в разных схемах разные имена столбцов. 
- Добавление столбца - pg_backend_memory_contexts.- type, в котором показывается тип контекста памяти (Дэвид Роули) §
- Добавление столбца - pg_backend_memory_contexts.- path, в котором показываются родительские контексты памяти (Мелих Мутлу) §
E.1.3.1.5. Права #
- Добавление функции - pg_get_acl(), которая возвращает подробную информацию о контроле доступа к базе данных (Джоэл Джейкобсон) § §
- Добавление функции - has_largeobject_privilege(), которая проверяет права на большие объекты (Юго Нагата) §
- Возможность команды ALTER DEFAULT PRIVILEGES определять права по умолчанию для больших объектов (Харука Такацука, Юго Нагата, Лауренц Альбе) § 
- Добавление предопределённой роли - pg_signal_autovacuum_worker(Кирилл Решке) §- Она используется для отправки сигналов рабочим процессам автоочистки. 
E.1.3.1.6. Конфигурация сервера #
- Обеспечение поддержки метода аутентификации по OAuth (Джейкоб Чемпион, Даниэль Густафссон, Томас Манро) § - В этом выпуске добавляется метод аутентификации - oauthв- pg_hba.conf, параметры OAuth в libpq, параметр конфигурации oauth_validator_libraries, который позволяет загружать библиотеки для проверки токенов, и параметр скрипта configure- --with-libcurl, который добавляет необходимые библиотеки во время компиляции.
- Добавление серверной переменной ssl_tls13_ciphers, которая позволяет задавать несколько комплектов шифров TLS версии 1.3 в виде списка, раздёленного двоеточиями (Эрика Чжан, Даниэль Густафссон) § 
- Изменение значения по умолчанию параметра конфигурации ssl_groups, которое теперь включает эллиптическую кривую X25519 (Даниэль Густафссон, Джейкоб Чемпион) § 
- Переименование параметра конфигурации - ssl_ecdh_curveв ssl_groups, а также добавление возможности указывать несколько кривых ECDH через двоеточие (Эрика Чжан, Даниэль Густафссон) §- Старое название параметра по-прежнему можно указывать. 
- Увеличение максимальной длины ключей отмены запроса до 256 бит (Хейкки Линнакангас, Йелте Феннема-Нио) § § - Это изменение работает, только если и сервер, и клиент используют протокол передачи данных версии 3.2, представленный в этом выпуске. 
- Добавление серверной переменной autovacuum_worker_slots, которая позволяет указывать максимальное количество фоновых рабочих процессов (Натан Боссарт) § - Если переменная задана, значение параметра autovacuum_max_workers можно изменить до максимального значения этой переменной во время выполнения без перезапуска сервера. 
- Возможность указывать фиксированное количество мёртвых кортежей, по достижении которого запускается автоочистка (Натан Боссарт, Фредерик Юэль) § - Для этого используется серверная переменная autovacuum_vacuum_max_threshold. В качестве порогового значения срабатывания автоочистки проценты по-прежнему используются. 
- Изменение серверной переменной max_files_per_process, которая теперь ограничивает только количество файлов, открываемых обслуживающим процессом (Андрес Фройнд) § - Ранее в этом ограничении также учитывались файлы, открываемые процессом postmaster. 
- Добавление серверной переменной num_os_semaphores, которая сообщает количество требуемых семафоров (Натан Боссарт) § - Это полезно для конфигурации операционной системы. 
- Добавление серверной переменной extension_control_path, которая позволяет указывать расположение управляющих файлов расширений (Питер Эйзентраут, Матеус Алькантара) § § 
E.1.3.1.7. Потоковая репликация и восстановление #
- Возможность автоматического аннулирования неактивных слотов репликации при помощи серверной переменной idle_replication_slot_timeout (Ниша Мунд, Бхарат Рупиредди) § 
- Добавление серверной переменной max_active_replication_origins, которая позволяет управлять максимальным количеством активных источников репликации (Эйлер Тавейра) § - Ранее управление происходило при помощи параметра max_replication_slots, однако новый параметр допускает более высокое значение количества источников репликации в случаях, когда требуется меньшее количество слотов. 
E.1.3.1.8. Логическая репликация #
- Возможность логической репликации значений генерируемых столбцов (Шубхам Ханна, Вигнеш Си, Хоу Чжицзе, Шлок Кьял, Питер Смит) § § § § - Если в публикации указывается список столбцов, публикуются все указанные столбцы, будь то генерируемые или негенерируемые. Если список столбцов не указан, параметр публикации - publish_generated_columnsуправляет публикацией генерируемых столбцов. Ранее генерируемые столбцы не реплицировались, и подписчику приходилось вычислять значения, если это было возможно. Это особенно полезно для подписчиков, не относящихся к PostgreSQL, у которых нет такой функциональности.
- Изменение значения по умолчанию параметра - streamingкоманды CREATE SUBSCRIPTION с- offна- parallel(Вигнеш Си) §
- Возможность команды ALTER SUBSCRIPTION изменять поведение слота репликации в отношении двухфазной фиксации (Хайато Курода, Аджин Чериан, Амит Капила, Хоу Чжицзе) § § 
- Протоколирование конфликтов во время применения изменений логической репликации (Хоу Чжицзе, Ниша Мунд) § § § § § - Такие конфликты теперь также отображаются в новых столбцах представления - pg_stat_subscription_stats.
E.1.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. Она полезна, поскольку процесс автоочистки обрабатывает только потомков секционированных таблиц, а не сами таблицы.
- Добавление функций изменения статистики оптимизатора для отдельных отношений и столбцов (Кори Хинкер) § § § - Добавлены следующие функции: - 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— копию файла или его клон.
E.1.3.2.1. Ограничения #
- Возможность указывать неперекрывающиеся ограничения - 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для внешних таблиц и управлять наследованием этого ограничения для локальных таблиц.
- Возможность команды ALTER TABLE задавать указание - NOT VALIDдля ограничения- NOT NULL(Рушаб Латиа, Цзянь Хи) §
- Возможность изменять наследуемость ограничений - NOT NULL(Сурадж Хараге, Альваро Эррера) § §- Используется следующий синтаксис: - ALTER TABLE ... ALTER CONSTRAINT ... [NO] INHERIT.
- Возможность использовать ограничения внешнего ключа с указанием - NOT VALIDс секционированными таблицами (Амул Сул) §
- Возможность удалять ограничения только для секционированных таблиц (Альваро Эррера) § - Ранее по ошибке это было делать запрещено. 
- Добавление параметра - REJECT_LIMIT, управляющего количеством недействительных строк, которые команда- COPY FROMможет игнорировать (Атсуши Торикоши) §- Параметр работает при условии - ON_ERROR = 'ignore'.
- Возможность команды - COPY TOкопировать строки из наполненных данными материализованных представлений (Цзянь Хи) §
- Добавление нового значения - silentпараметра- LOG_VERBOSITYкоманды- COPY, которое исключает сообщения журнала об игнорируемых строках (Атсуши Торикоши) §- Новый уровень детализации журнала позволяет подавлять сообщения об игнорируемых входящих строках при условии - on_error = 'ignore'.
- Запрет использования команды - COPY FREEZEсо сторонними таблицами (Натан Боссарт) §- Ранее команда - COPYработала, но параметр- FREEZEигнорировался, поэтому теперь этой командой пользоваться запрещено.
- Автоматическое включение вывода - BUFFERSв- EXPLAIN ANALYZE(Гийом Леларж, Дэвид Роули) §
- Добавление количества переполненных буферов WAL в вывод команды - EXPLAIN (WAL)(Бертран Друво) §
- Добавление количества поисков по индексу, выполненных каждым узлом Index Scan, в вывод команды - EXPLAIN ANALYZE(Питер Гейган) §
- Вывод количества строк с точностью до двух цифр после десятичной точки в - EXPLAIN(Ибрар Ахмед, Илья Евдокимов, Роберт Хаас) § §
- Добавление подробной информации об использовании памяти и дискового пространства узлами - Materialи- Window Aggregate, а также узлами общих табличных выражений в вывод команды- EXPLAIN(Дэвид Роули, Тацуо Исии) § § § §
- Добавление подробной информации об аргументах оконных функций в вывод команды - EXPLAIN(Том Лейн) §
- Добавление статистики по кешу рабочего процесса - Parallel Bitmap Heap Scanв вывод команды- EXPLAIN ANALYZE(Давид Гайер, Хейкки Линнакангас, Дунхан Линь, Алёна Рыбакина, Дэвид Роули) §
- Добавление количества отключённых узлов в вывод команды - EXPLAIN ANALYZE(Роберт Хаас, Дэвид Роули, Лауренц Альбе) § § §
E.1.3.3. Типы данных #
- Улучшение полного преобразования регистра Unicode (Джефф Девис) § § - Таким образом добавляется возможность выполнять преобразование регистра по условию, первых букв слов из строчных в заглавные, а также одного символа в несколько символов. 
- Возможность приводить значения - nullтипа данных- jsonbк- NULLскалярных типов данных (Том Лейн) §- Ранее при попытке такого приведения типов выводилась ошибка. 
- Добавление необязательного аргумента функции - json{b}_strip_nulls, который позволяет удалять равные NULL элементы массива (Флоренц Целай) §
- Добавление функции - array_sort(), которая сортирует элементы первой размерности массива (Цзюньван Жао, Цзянь Хи) §
- Добавление функции - array_reverse(), которая переставляет элементы первой размерности массива в обратном порядке (Александр Алексеев) §
- Добавление функции - reverse(), которая переставляет байты в двоичной строке в обратном порядке (Александр Алексеев) §
- Возможность приводить целочисленные типы данных к - byteaи обратно (Александр Алексеев) §- Целые значения хранятся как тип - byteaс байтами, которые формируются в дополнительном коде.
- Добавление стеммера полнотекстового поиска для эстонского языка (Том Лейн) § 
- Улучшение кодов ошибок - XMLдля более точного соответствия стандарту SQL (Том Лейн) §- Ошибки выводятся с - SQLSTATE.
E.1.3.4. Функции #
- Добавление функции - casefold(), которая позволяет выполнять более сложное регистронезависимое сопоставление (Джефф Девис) §- Она позволяет выполнять более точное сопоставление, например, когда у символа может быть несколько эквивалентов в верхнем и нижнем регистре или когда при приведении регистра меняется количество символов. 
- Возможность использовать агрегатные функции - MIN()и- MAX()с массивами и составными типами (Александр Алексеев, Марат Бухаров) § §
- Улучшение вывода - EXTRACT(QUARTER ...)для отрицательных значений (Том Лейн) §
- Обеспечение поддержки римских цифр в функции - to_number()(Хунаид Сохаил) §- Для этого используется шаблон - RN.
- Добавление функции - uuidv7(), которая генерирует- UUIDверсии 7 (Андрей Бородин) §- Это значение - UUIDподлежит сортировке по времени. Для явного генерирования UUID версии 4 создана функция-псевдоним- uuidv4().
- Добавление функций - 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()(Цзянь Хи) §
- Добавление функции - PQfullProtocolVersion(), которая возвращает полную версию протокола взаимодействия между клиентом и сервером, включая номер корректирующей версии (Джейкоб Чемпион, Йелте Феннема-Нио) §
- Добавление параметров подключения и переменных окружения libpq для указания минимальной и максимальной допустимых версий протокола подключения (Йелте Феннема-Нио) § § 
- Вывод изменений search_path клиенту (Александр Кукушкин, Йелте Феннема-Нио, Томаш Вондра) § § 
- Добавление вывода функции - PQtrace()для всех типов сообщений, включая сообщения об аутентификации (Йелте Феннема-Нио) § § § § §
- Добавление параметра подключения libpq - sslkeylogfile, который позволяет журналировать SSL-ключи (Абхишек Чанда, Даниэль Густафссон) §- Этот параметр полезен для целей отладки. 
- Изменение сигнатур некоторых функций libpq для использования типа данных - int64_t(Томас Манро) §- Ранее использовался тип - pg_int64, теперь он считается устаревшим.
- Возможность psql разбирать, связывать и закрывать именованные подготовленные операторы (Антонин Боннефой, Микаэль Пакье) § § - Это возможно благодаря новым командам - \parse,- \bind_namedи- \close_prepared.
- Добавление в psql начинающихся с - \команд, которые позволяют отправлять запросы к конвейерам (Антонин Боннефой) § § §- Добавлены следующие команды: - \startpipeline,- \syncpipeline,- \sendpipeline,- \endpipeline,- \flushrequest,- \flushи- \getresults.
- Возможность добавлять статус конвейера в приглашение psql, а также добавление связанных переменных состояния (Антонин Боннефой) § - Новый символ приглашения — - %P, а новые переменные psql —- PIPELINE_SYNC_COUNT,- PIPELINE_COMMAND_COUNTи- PIPELINE_RESULT_COUNT.
- Возможность добавлять имя службы подключения в приглашение psql или обращаться к нему через переменную psql (Михаэль Банк) § 
- Добавление параметра psql для использования расширенного режима во всех командах выведения списка (Дин Рашид) § - Функциональность включается добавлением суффикса - xк команде.
- Изменение команды - \conninfopsql, которая теперь использует табличный формат и выводит больше информации (Альваро Эррера, Майквел Грасси, Хунаид Сохаил) §
- Добавление индикатора герметичности функции в вывод метакоманд psql - \df+,- \do+,- \dAo+и- \dC+(Юго Нагата) §
- Добавление подробной информации о методе доступа к секционированным отношениям в вывод команды - \dP+(Джастин Призби) §
- Добавление версии расширения по умолчанию в вывод команды psql - \dx(Магнус Хагандер) §
- Добавление переменной psql - WATCH_INTERVAL, которая задаёт время ожидания по умолчанию для команды- \watch(Даниэль Густафссон) §
E.1.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 (Амул Сул) § 
- Добавление имени базы данных в вывод - --write-recovery-conf, если это имя указано в параметре pg_rewind- --source-server(Масахико Савада) §
- Добавление параметра pg_resetwal - --char-signedness, который меняет знаковость типа- charпо умолчанию (Масахико Савада) §
E.1.3.7.1. pg_dump/pg_dumpall/pg_restore #
- Добавление параметра - --sequence-dataв утилиты pg_dump и pg_dumpall, добавляющего в выгрузку данные последовательностей, которые обычно в неё не включаются (Натан Боссарт) § §
- Добавление параметров - --statistics-only,- --no-statistics,- --no-dataи- --no-schemaв утилиты pg_dump, pg_dumpall и pg_restore (Кори Хинкер, Джефф Девис) §
- Добавление параметра - --no-policies, который отключает обработку политики защиты на уровне строк, в утилиты pg_dump, pg_dumpall и pg_restore (Николай Самохвалов) §- Это полезно при миграции на системы с другими политиками. 
E.1.3.7.2. pg_upgrade #
- Возможность pg_upgrade сохранять статистику оптимизатора (Кори Хинкер, Джефф Девис, Натан Боссарт) § § § § - Расширенная статистика не сохраняется. Также добавлен параметр pg_upgrade - --no-statistics, который отключает сохранение статистики.
- Возможность pg_upgrade обрабатывать проверки баз данных в параллельном режиме (Натан Боссарт) § § § § § § § § § § § - Управление этой функциональностью выполняется при помощи существующего параметра - --jobs.
- Добавление параметра pg_upgrade - --swap, который позволяет переносить каталоги между кластерами вместо копирования, клонирования или связывания файлов (Натан Боссарт) §- Этот режим является потенциально самым быстрым. 
- Добавление параметра pg_upgrade - --set-char-signedness, который задаёт знаковость типа- charпо умолчанию для нового кластера (Масахико Савада) § §- Он необходим в тех случаях, когда в кластере PostgreSQL версии ниже 18 знаковость по умолчанию не совпадает со знаковостью в новом кластере. 
E.1.3.7.3. Приложения логической репликации #
- Добавление параметра pg_createsubscriber - --all, который позволяет создавать логические реплики для всех баз данных (Шубхам Ханна) §
- Добавление параметра pg_createsubscriber - --clean, который позволяет удалять подписки (Шубхам Ханна) § §
- Добавление параметра pg_createsubscriber - --enable-two-phase, который позволяет включать подготовленные транзакции (Шубхам Ханна) §
- Добавление параметра pg_recvlogical - --enable-failover, который позволяет указывать слоты отработки отказа (Хайато Курода) §- Кроме того, добавлен параметр - --enable-two-phaseкак синоним параметра- --two-phase, а последний признан устаревшим.
- Возможность параметра pg_recvlogical - --drop-slotработать без параметра- --dbname(Хайато Курода) §
E.1.3.8. Исходный код #
- Разграничение загрузки и запуска точек внедрения (Микаэль Пакье, Хейкки Линнакангас) § § - Теперь точки внедрения можно создавать без запуска при помощи функции - INJECTION_POINT_LOAD(), а запускать, вызывая функцию- INJECTION_POINT_CACHED().
- Обеспечение поддержки аргументов, задаваемых во время выполнения, в точках внедрения (Микаэль Пакье) § 
- Возможность использовать встроенные тесты точек внедрения при помощи макроса - IS_INJECTION_POINT_ATTACHED()(Хейкки Линнакангас) §
- Улучшение эффективности обработки длинных строк - JSON, используя принцип SIMD (Single Instruction Multiple Data, Одиночный поток команд, множественный поток данных) (Дэвид Роули) §
- Ускорение вычислений CRC32C с использованием инструкций x86 AVX-512 (Рагхувир Девулапалли, Пол Амонсон) § 
- Добавление встроенных функций ARM Neon и SVE для вычисления количества бит в двоичной строке (Чиранмой Бхаттачарья, Деванга Сусмита, Рама Маллади) § § 
- Повышение скорости умножения и деления значений типа - numeric(Джоэл Джейкобсон, Дин Рашид) § § § §
- Добавление параметра скрипта configure - --with-libnuma, который активирует сборку под архитектуру NUMA (Якуб Вартак, Бертран Друво) § § §- Функция - pg_numa_available(), сообщает, что сервер был скомпилирован с поддержкой NUMA, а в системных представлениях- pg_shmem_allocations_numaи- pg_buffercache_numaпоказывается распределение общей памяти между узлами NUMA.
- Добавление TOAST-таблиц в - pg_indexдля поддержки очень больших выражений индексов (Натан Боссарт) §
- Удаление столбца - pg_attribute.- attcacheoff(Дэвид Роули) §
- Добавление столбца - pg_class.- relallfrozen(Мелани Плейгман) §
- Добавление процедуры - amgettreeheight, а также свойств- amconsistentequalityи- amconsistentorderingв API индексных методов доступа (Марк Дилгер) § §
- Добавление опорной функции GiST - stratnum()(Пол А. Юнгвирт) §
- Регистрация знаковости типа - charпо умолчанию в pg_controldata (Масахико Савада) §
- Обеспечение поддержки Python Limited API (ограниченный API) в 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().
- Добавление раздела документации о совместимости API и ABI (Дэвид Уилер, Питер Эйзентраут) § 
- Удаление упоминания об экспериментальности сборок с Meson на Windows (Александр Алексеев) § 
- Удаление параметров скрипта configure - --disable-spinlocksи- --disable-atomics(Томас Манро) § §- Использование 32-битных атомарных операций теперь обязательно. 
- Прекращение поддержки архитектуры HPPA/PA-RISC (Том Лейн) § 
E.1.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 - use_scram_passthroughи исключает необходимость хранить информацию об аутентификации postgres_fdw в базе данных. В libpq появились новые параметры соединения scram_client_key и scram_server_key.
- Возможность сквозной аутентификации SCRAM между клиентом и сервером dblink (Матеус Алькантара) § 
- Добавление параметров - on_errorи- log_verbosityв модуль file_fdw (Атсуши Торикоши) §- Они управляют тем, как file_fdw обрабатывает недействительные строки файла и сообщает о них. 
- Добавление параметра - reject_limit, управляющего количеством недействительных строк, которые может игнорировать модуль file_fdw (Атсуши Торикоши) §- Он работает при условии - ON_ERROR = 'ignore'.
- Добавление параметра конфигурации - min_password_lengthв модуль passwordcheck (Эмануэле Музелла, Маурицио Бориани) §- Он управляет минимальной длиной пароля. 
- Возможность pgbench выводить количество неуспешных, повторно выполненных или пропущенных транзакций в отчётах по скриптам (Юго Нагата) § 
- Добавление параметра конфигурации isn - weak, который позволяет принимать значения ISN даже с некорректной проверочной цифрой (Виктор Хольмберг) §- Ранее управлять этим поведением можно было только при помощи функции - isn_weak().
- Возможность сортировки значений для ускорения построения индексов btree_gist (Бернд Хелмле, Андрей Бородин) § 
- Добавление функции amcheck - gin_index_check(), которая позволяет проверять индексы- GIN(Григорий Крячко, Хейкки Линнакангас, Андрей Бородин) §
- Добавление функций - pg_buffercache_evict_relation()и- pg_buffercache_evict_all(), которые позволяют вытеснять незакреплённые общие буферы (Назир Билал Явуз) §- Существующая функция - pg_buffercache_evict()теперь возвращает статус вытеснения буферов.
- Возможность расширений устанавливать нестандартные параметры EXPLAIN (Роберт Хаас, Сами Имсейх) § § § 
- Возможность расширений использовать API накопительной статистики сервера (Микаэль Пакье) § § 
E.1.3.9.1. pg_stat_statements #
- Возможность отслеживать запросы CREATE TABLE AS и DECLARE модулем pg_stat_statements (Антонин Боннефой) § - Теперь им также назначаются идентификаторы запросов. 
- Возможность параметризации значений SET в модуле pg_stat_statements (Грег Сабино Маллейн, Микаэль Пакье) § - Это позволяет сократить раздувание, которое возникает из-за операторов - SETс разными константами.
- Добавление столбцов в представление - pg_stat_statements, в которых показывается параллельная активность (Гийом Леларж) §- Представление теперь содержит новые столбцы - parallel_workers_to_launchи- parallel_workers_launched.
- Добавление столбца - pg_stat_statements.- wal_buffers_full, в котором показываются переполненные буферы WAL (Бертран Друво) §
- Добавление алгоритмов pgcrypto - sha256cryptи- sha512crypt(Бернд Хелмле) §
- Добавление режима CFB в расширение pgcrypto для защитного преобразования и обратного защитного преобразования (Умар Хайат) § 
- Добавление функции - fips_mode(), которая сообщает о включённом режиме FIPS сервера (Даниэль Густафссон) §
- Добавление параметра конфигурации pgcrypto - builtin_crypto_enabled, который позволяет отключать встроенные функции защитного преобразования не в режиме FIPS (Даниэль Густафссон, Джо Конвей) §- Это полезно для обеспечения работы режима FIPS. 
E.1.4. Благодарственный список #
Перечисленные ниже (в алфавитном порядке) лица сделали вклад в этот выпуск, разрабатывая, совершенствуя и рецензируя код, принимая правки, проводя тестирование или сообщая о проблемах.
| Абхишек Чанда (Abhishek Chanda) | 
| Ави Вайнберг (Avi Weinberg) | 
| Адам Гуо (Adam Guo) | 
| Адам Раух (Adam Rauch) | 
| Аджин Чериан (Ajin Cherian) | 
| Айдар Имамов (Aidar Imamov) | 
| Айзек Морленд (Isaac Morland) | 
| Аластер Тёрнер (Alastair Turner) | 
| Алек Козенс (Alec Cozens) | 
| Алекс Ричман (Alex Richman) | 
| Алекс Фридман (Alex Friedman) | 
| Александр Алексеев (Aleksander Alekseev) | 
| Александр Алёхин (Alexander Alehin) | 
| Александр Борисов (Alexander Borisov) | 
| Александр Кожемякин (Alexander Kozhemyakin) | 
| Александр Коротков (Alexander Korotkov) | 
| Александр Кузнецов (Alexander Kuznetsov) | 
| Александр Кузьменков (Alexander Kuzmenkov) | 
| Александр Кукушкин (Alexander Kukushkin) | 
| Александр Лахин (Alexander Lakhin) | 
| Александр Пыхалов (Alexander Pyhalov) | 
| Александра Ван (Alexandra Wang) | 
| Алексей Двойченков (Alexey Dvoichenkov) | 
| Алексей Махмутов (Alexey Makhmutov) | 
| Алексей Шишкин (Alexey Shishkin) | 
| Али Акбар (Ali Akbar) | 
| Альваро Монхиль (Álvaro Mongil) | 
| Альваро Эррера (Álvaro Herrera) | 
| Алёна Рыбакина (Alena Rybakina) | 
| Амит Капила (Amit Kapila) | 
| Амит Ланготе (Amit Langote) | 
| Амул Сул (Amul Sul) | 
| Андреас Карлссон (Andreas Karlsson) | 
| Андреас Ульбрих (Andreas Ulbrich) | 
| Андреас Шербаум (Andreas Scherbaum) | 
| Андрей Билле (Andrew Bille) | 
| Андрей Бородин (Andrey Borodin) | 
| Андрей Лепихов (Andrey Lepikhov) | 
| Андрей Рачицкий (Andrey Rachitskiy) | 
| Андрей Рудометов (Andrey Rudometov) | 
| Андрей Чудновский (Andrey Chudnovsky) | 
| Андрес Фройнд (Andres Freund) | 
| Антон Волошин (Anton Voloshin) | 
| Антон Мельников (Anton Melnikov) | 
| Антонин Боннефой (Anthonin Bonnefoy) | 
| Антонин Хоуска (Antonin Houska) | 
| Антти Лампинен (Antti Lampinen) | 
| Арсений Мухин (Arseniy Mukhin) | 
| Артур Закиров (Artur Zakirov) | 
| Арун Тхирупати (Arun Thirupathi) | 
| Асфатор (Asphator) | 
| Атсуши Торикоши (Atsushi Torikoshi) | 
| Ашутош Бапат (Ashutosh Bapat) | 
| Аюш Ватса (Ayush Vatsa) | 
| Аюш Тивари (Ayush Tiwari) | 
| Ая Ивата (Aya Iwata) | 
| Бастьен Рукарье (Bastien Roucariès) | 
| Бен Пичи Хигдон (Ben Peachey Higdon) | 
| Бенуа Лобро (Benoit Lobréau) | 
| Бернд Райс (Bernd Reiß) | 
| Бернд Хелмле (Bernd Helmle) | 
| Бернхард Видеманн (Bernhard Wiedemann) | 
| Бертран Друво (Bertrand Drouvot) | 
| Бертран Мамасам (Bertrand Mamasam) | 
| Богдан Григоренко (Bogdan Grigorenko) | 
| Боюй Ян (Boyu Yang) | 
| Браулио Фернандо Гонсалес (Braulio Fdo Gonzalez) | 
| Брюс Момджян (Bruce Momjian) | 
| Бхарат Рупиредди (Bharath Rupireddy) | 
| Валид Ибрагим (Walid Ibrahim) | 
| Валлимахараджан Г (Vallimaharajan G) | 
| Вася Бойцов (Vasya Boytsov) | 
| Веббо Хан (Webbo Han) | 
| Вигнеш Си (Vignesh C) | 
| Виктор Егоров (Victor Yegorov) | 
| Виктор Хольмберг (Viktor Holmberg) | 
| Вилл Мортенсен (Will Mortensen) | 
| Винисиус Абраан (Vinícius Abrahão) | 
| Винод Шридхаран (Vinod Sridharan) | 
| Вирендер Сингла (Virender Singla) | 
| Виталий Давыдов (Vitaly Davydov) | 
| Владислав Небожин (Vladyslav Nebozhyn) | 
| Владлен Пополитов (Vladlen Popolitov) | 
| Вольфганг Вальтер (Wolfgang Walther) | 
| Вэньхуэй Цю (Wenhui Qiu) | 
| Габриэль Бартолини (Gabriele Bartolini) | 
| Гийом Леларж (Guillaume Lelarge) | 
| Грант Гричан (Grant Gryczan) | 
| Грег Бёрд (Greg Burd) | 
| Грег Сабино Маллейн (Greg Sabino Mullane) | 
| Грег Старк (Greg Stark) | 
| Григорий Крячко (Grigory Kryachko) | 
| Григорий Смолкин (Smolkin Grigory) | 
| Гуннар Вагнер (Gunnar Wagner) | 
| Гуннар Морлинг (Gunnar Morling) | 
| Гуржит Сингх (Gurjeet Singh) | 
| Гэвин Панелла (Gavin Panella) | 
| Гюго Дюбуа (Hugo Dubois) | 
| Давид Гайер (David Geier) | 
| Давиндер Сингх (Davinder Singh) | 
| Дагфинн Ильмари Маннсакер (Dagfinn Ilmari Mannsåker) | 
| Даниель Вестерман (Daniel Westermann) | 
| Даниил Давыдов (Daniil Davydov) | 
| Даниил Элишаков (Daniel Elishakov) | 
| Даниэле Вараццо (Daniele Varrazzo) | 
| Даниэль Верите (Daniel Vérité) | 
| Даниэль Густафссон (Daniel Gustafsson) | 
| Данкан Сэндс (Duncan Sands) | 
| Дарья Шанина (Daria Shanina) | 
| Деванга Сусмита (Devanga Susmitha) | 
| Деврим Гюндюз (Devrim Gündüz) | 
| Дейв Крамер (Dave Cramer) | 
| Дейв Пейдж (Dave Page) | 
| Джаеш Деханкар (Jayesh Dehankar) | 
| Джастин Призби (Justin Pryzby) | 
| Джейкоб Брейзил (Jacob Brazeal) | 
| Джейкоб Чемпион (Jacob Champion) | 
| Джеймс Коулман (James Coleman) | 
| Джеймс Хантер (James Hunter) | 
| Джейсон Смит (Jason Smith) | 
| Джефф Винклес (Geoff Winkless) | 
| Джефф Девис (Jeff Davis) | 
| Дживан Чок (Jeevan Chalke) | 
| Джим Джонс (Jim Jones) | 
| Джим Нэсби (Jim Nasby) | 
| Джо Конвей (Joe Conway) | 
| Джозеф Кошаков (Joseph Koshakow) | 
| Джон Нейлор (John Naylor) | 
| Джон Хатчинс (John Hutchins) | 
| Джонатан С Кац (Jonathan S. Katz) | 
| Джордж МакКэррон (George MacKerron) | 
| Джоэл Джейкобсон (Joel Jacobson) | 
| Диан Фей (Dian Fay) | 
| Дилип Кумар (Dilip Kumar) | 
| Димитриос Апостолу (Dimitrios Apostolou) | 
| Дин Рашид (Dean Rasheed) | 
| Дипеш Дхамелия (Dipesh Dhameliya) | 
| Дмитрий Бондарь (Dmitrii Bondar) | 
| Дмитрий Долгов (Dmitry Dolgov) | 
| Дмитрий Коваленко (Dmitry Kovalenko) | 
| Дмитрий Коваль (Dmitry Koval) | 
| Дмитрий Юричев (Dmitry Yurichev) | 
| Дмитрий Ячник (Dzmitry Jachnik) | 
| Доминик Девьен (Dominique Devienne) | 
| Доржпалам Батбаатар (Dorjpalam Batbaatar) | 
| Дрю Каллахан (Drew Callahan) | 
| Дунхан Линь (Donghang Lin) | 
| Дуэйн Тоуэлл (Dwayne Towell) | 
| Дэвид Бенджамин (David Benjamin) | 
| Дэвид Дж. Джонстон (David G. Johnston) | 
| Дэвид Кристенсен (David Christensen) | 
| Дэвид Роули (David Rowley) | 
| Дэвид Стил (David Steele) | 
| Дэвид Уилер (David Wheeler) | 
| Дэвид Фидлер (David Fiedler) | 
| Дэвид Чжан (David Zhang) | 
| Евгений Горбанёв (Evgeniy Gorbanev) | 
| Егор Рогов (Egor Rogov) | 
| Егор Чиндяскин (Egor Chindyaskin) | 
| Ерки Еэссаар (Erki Eessaar) | 
| Жеан-Гийом де Рорте (Jehan-Guillaume de Rorthais) | 
| Жиль Даролд (Gilles Darold) | 
| Жолт Парраги (Zsolt Parragi) | 
| Жуй Жао (Rui Zhao) | 
| Жюльен Руо (Julien Rouhaud) | 
| Зейн Даффилд (Zane Duffield) | 
| Ибрар Ахмед (Ibrar Ahmed) | 
| Иван Быков (Bykov Ivan) | 
| Иван Картышов (Kartyshov Ivan) | 
| Иван Куш (Ivan Kush) | 
| Игорь Гнатюк (Igor Gnatyuk) | 
| Игорь Корот (Igor Korot) | 
| Израэл Барт (Israel Barth Rubio) | 
| Илья Гладышев (Ilya Gladyshev) | 
| Илья Евдокимов (Ilia Evdokimov) | 
| Имран Захир (Imran Zaheer) | 
| Итан Мерц (Ethan Mertz) | 
| Иэн Барвик (Ian Barwick) | 
| Йелте Феннема (Jelte Fennema) | 
| Йогеш Шарма (Yogesh Sharma) | 
| Йозеф Шиманек (Josef Šimánek) | 
| Йоран Хелинг (Yoran Heling) | 
| Кайдо Вайкла (Kaido Vaikla) | 
| Кайме (Kaimeh) | 
| Карина Лицкевич (Karina Litskevich) | 
| Картик С. (Karthik S) | 
| Кашиф Зишан (Kashif Zeeshan) | 
| Квинь Тран (Quynh Tran) | 
| Кевин К. Биджу (Kevin K Biju) | 
| Кевин Хейл Бойс (Kevin Hale Boyes) | 
| Кирилл Здорный (Kirill Zdornyy) | 
| Кирилл Решке (Kirill Reshke) | 
| Кис ван Зеланд (Cees van Zeeland) | 
| Клеменс Рук (Clemens Ruck) | 
| Коичи Судзуки (Koichi Suzuki) | 
| Коки Накамура (Koki Nakamura) | 
| Константин Книжник (Konstantin Knizhnik) | 
| Кори Хинкер (Corey Huinker) | 
| Кохэй Суту (Kouhei Sutou) | 
| Коэн Де Груте (Koen De Groote) | 
| Крейг Милхайзер (Craig Milhiser) | 
| Крис Гуч (Chris Gooch) | 
| Крисп Ли (Crisp Lee) | 
| Кристиан Харукевич (Christian Charukiewicz) | 
| Кристоф Берг (Christoph Berg) | 
| Кристоф Куртуа (Christophe Courtois) | 
| Кристофер Инокути (Christopher Inokuchi) | 
| Кунтал Гхош (Kuntal Ghosh) | 
| Кэйсукэ Курода (Keisuke Kuroda) | 
| Кэмерон Фогт (Cameron Vogt) | 
| Кэри Хуан (Cary Huang) | 
| Кётаро Хоригути (Kyotaro Horiguchi) | 
| Лакшми Нараяна Велаюдам (Lakshmi Narayana Velayudam) | 
| Ларс Канис (Lars Kanis) | 
| Лауренц Альбе (Laurenz Albe) | 
| Леле Гайфакс (Lele Gaifax) | 
| Ли Юн (Li Yong) | 
| Лилиан Онтоуи (Lilian Ontowhee) | 
| Линбинь Мэн (Lingbin Meng) | 
| Лоуренс Пэрри (Laurence Parry) | 
| Лука Валлиза (Luca Vallisa) | 
| Лукас Фиттл (Lukas Fittl) | 
| Любослав Шпилак (Luboslav Špilák) | 
| Магнус Хагандер (Magnus Hagander) | 
| Майквел Грасси (Maiquel Grassi) | 
| Майкл Бондаренко (Michael Bondarenko) | 
| Майкл Гиссин (Michael Guissine) | 
| Майкл Харрис (Michael Harris) | 
| Майкл Христофидес (Michael Christofides) | 
| Макс Джонсон (Max Johnson) | 
| Макс Мэдден (Max Madden) | 
| Максим Богук (Maxim Boguk) | 
| Максим Коротков (Maksim Korotkov) | 
| Максим Мельников (Maksim Melnikov) | 
| Максим Орлов (Maxim Orlov) | 
| Максимилиан Хшан (Maximilian Chrzan) | 
| Ман Цзэн (Man Zeng) | 
| Марат Бухаров (Marat Buharov) | 
| Марина Полякова (Marina Polyakova) | 
| Марк Балмер (Marc Balmer) | 
| Марк Дилгер (Mark Dilger) | 
| Марк Каллахан (Mark Callaghan) | 
| Марко Ненчарини (Marco Nenciarini) | 
| Маркос Пегораро (Marcos Pegoraro) | 
| Марлин Брандштеттер (Marlene Brandstaetter) | 
| Марлин Рейтерер (Marlene Reiterer) | 
| Мартин Рахманов (Martin Rakhmanov) | 
| Масао Фудзии (Masao Fujii) | 
| Масахико Савада (Masahiko Sawada) | 
| Масахиро Икеда (Masahiro Ikeda) | 
| Матеус Алькантара (Matheus Alcantara) | 
| Матс Киндаль (Mats Kindahl) | 
| Маттиас ван де Меент (Matthias van de Meent) | 
| Матье Денэ (Matthieu Denais) | 
| Маурицио Бориани (Maurizio Boriani) | 
| Махендра Сингх Талор (Mahendra Singh Thalor) | 
| Махендракар Шринивасарао (Mahendrakar Srinivasarao) | 
| Мачик Сакрейда (Maciek Sakrejda) | 
| Мейсон Маккаман (Mason Mackaman) | 
| Мелани Плейгман (Melanie Plageman) | 
| Мелих Мутлу (Melih Mutlu) | 
| Мерт Алев (Mert Alev) | 
| Микаэль Гурлауэн (Mikaël Gourlaouen) | 
| Микаэль Пакье (Michaël Paquier) | 
| Милош Хмура (Milosz Chmura) | 
| Михаил Грибков (Mikhail Gribkov) | 
| Михаил Кот (Mikhail Kot) | 
| Михаил Николаев (Michail Nikolaev) | 
| Михал Клечек (Michal Kleczek) | 
| Михаэль Банк (Michael Banck) | 
| Мишель Пельтье (Michel Pelletier) | 
| Муранликришна Бандару (Muralikrishna Bandaru) | 
| Мурат Эфендиоглу (Murat Efendioglu) | 
| Мутаамба Мааша (Mutaamba Maash) | 
| Мэт Арье (Mat Arye) | 
| Мэтью Вудкрафт (Matthew Woodcraft) | 
| Мэтью Гейблер-Ли (Matthew Gabeler-Lee) | 
| Мэтью Ким (Matthew Kim) | 
| Мэтью Стерретт (Matthew Sterrett) | 
| Навнит Кумар (Navneet Kumar) | 
| Назир Билал Явуз (Nazir Bilal Yavuz) | 
| Наим Ахтер (Naeem Akhter) | 
| Нат Макаревич (Nat Makarevitch) | 
| Натан Боссарт (Nathan Bossart) | 
| Нейл Конвей (Neil Conway) | 
| Ник Браса (Niek Brasa) | 
| Ник Дэвис (Nick Davies) | 
| Никита (Nikita) | 
| Никита Калинин (Nikita Kalinin) | 
| Никита Малахов (Nikita Malakhov) | 
| Никколо Фей (Niccolò Fei) | 
| Николай Самохвалов (Nikolay Samokhvalov) | 
| Николай Шаплов (Nikolay Shaplov) | 
| Николас Маус (Nicolas Maus) | 
| Нитин Мотиани (Nitin Motiani) | 
| Нитин Ядав (Nitin Jadhav) | 
| Нихил Радж (Nikhil Raj) | 
| Ниша Мунд (Nisha Moond) | 
| Нобору Сайто (Noboru Saito) | 
| Ной Миш (Noah Misch) | 
| Нориёси Синода (Noriyoshi Shinoda) | 
| Оле Петер Брандтсэг (Ole Peder Brandtzæg) | 
| Олег Самойлов (Olleg Samoylov) | 
| Олег Сибиряков (Oleg Sibiryakov) | 
| Олег Целебровский (Oleg Tselebrovskiy) | 
| Ондер Каладжи (Onder Kalaci) | 
| Ондрей Навратил (Ondrej Navratil) | 
| Павел Борисов (Pavel Borisov) | 
| Павел Лузанов (Pavel Luzanov) | 
| Павел Некрасов (Pavel Nekrasov) | 
| Павел Стехуле (Pavel Stehule) | 
| Патрик Штэлин (Patrick Stählin) | 
| Пиксянь Ши (Pixian Shi) | 
| Питер Гейган (Peter Geoghegan) | 
| Питер Миттере (Peter Mittere) | 
| Питер Смит (Peter Smith) | 
| Питер Эйзентраут (Peter Eisentraut) | 
| Пол Амонсон (Paul Amonson) | 
| Пол Рамсей (Paul Ramsey) | 
| Пол Юнгвирт (Paul Jungwirth) | 
| Полина Бунгина (Polina Bungina) | 
| Пшемыслав Штох (Przemyslaw Sztoch) | 
| Пьер Жиро (Pierre Giraud) | 
| Рагхувир Девулапалли (Raghuveer Devulapalli) | 
| Рама Маллади (Rama Malladi) | 
| Ран Бенита (Ran Benita) | 
| Ранье Вилела (Ranier Vilela) | 
| Рафия Сабих (Rafia Sabih) | 
| Рахила Сьед (Rahila Syed) | 
| Ренан Алвес Фонсека (Renan Alves Fonseca) | 
| Ринтаро Икеда (Rintaro Ikeda) | 
| Ричард Гуо (Richard Guo) | 
| Ричард Нилл (Richard Neill) | 
| Роберт Трит (Robert Treat) | 
| Роберт Хаас (Robert Haas) | 
| Робинс Таракан (Robins Tharakan) | 
| Роман Жарков (Roman Zharkov) | 
| Рональд Круз (Ronald Cruz) | 
| Ронан Данклау (Ronan Dunklau) | 
| Рустам Аллаков (Rustam Allakov) | 
| Рушаб Латиа (Rushabh Lathia) | 
| Рё Канбаяши (Ryo Kanbayashi) | 
| РётаК (RyotaK) | 
| Рёхэй Такахаси (Ryohei Takahashi) | 
| Сагар Дилип Шедж (Sagar Dilip Shedge) | 
| Саймон Риггс (Simon Riggs) | 
| Сальваторе Дипьетро (Salvatore Dipietro) | 
| Сами Имсейх (Sami Imseih) | 
| Самир Кумар (Sameer Kumar) | 
| Самуэль Тибо (Samuel Thibault) | 
| Сатьянараяна Нарлапурам (Satyanarayana Narlapuram) | 
| Свен Клемм (Sven Klemm) | 
| Себастьян Скалаки (Sebastian Skalacki) | 
| Седрик Вильмен (Cédric Villemain) | 
| Сенли Чхве (Senglee Choi) | 
| Сергей Беляшов (Sergey Belyashov) | 
| Сергей Дудоладов (Sergey Dudoladov) | 
| Сергей Корнилов (Sergei Kornilov) | 
| Сергей Прохоренко (Sergey Prokhorenko) | 
| Сергей Саргсян (Sergey Sargsyan) | 
| Сергей Соловьёв (Sergey Soloviev) | 
| Сергей Татаринцев (Sergey Tatarintsev) | 
| Син Го (Xing Guo) | 
| Синъя Като (Shinya Kato) | 
| Синь Чжан (Xin Zhang) | 
| Соумйадип Чакраборти (Soumyadeep Chakraborty) | 
| Софья Копикова (Sofia Kopikova) | 
| Степан Неретин (Stepan Neretin) | 
| Стив Чавес (Steve Chavez) | 
| Стивен Ню (Steven Niu) | 
| Стивен Фрост (Stephen Frost) | 
| Стивен Фьюэр (Stephen Fewer) | 
| Стэн Ху (Stan Hu) | 
| Сун Цзиньчжоу (Song Jinzhou) | 
| Сурадж Хараге (Suraj Kharage) | 
| Сэм Габриэльссон (Sam Gabrielsson) | 
| Сэм Джеймс (Sam James) | 
| Сюнэн Чжоу (Xuneng Zhou) | 
| Такамити Осуми (Takamichi Osumi) | 
| Такэси Идэриха (Takeshi Ideriha) | 
| Тацуо Исии (Tatsuo Ishii) | 
| Тед Юй (Ted Yu) | 
| Телс (Tels) | 
| Тендер Ван (Tender Wang) | 
| Тим Вуд (Tim Wood) | 
| Тимур Магомедов (Timur Magomedov) | 
| Тобиас Вендорфф (Tobias Wendorff) | 
| Тодд Кук (Todd Cook) | 
| Том Браун (Thom Brown) | 
| Том Лейн (Tom Lane) | 
| Томас Бэлер (Thomas Baehler) | 
| Томас Креннвалльнер (Thomas Krennwallner) | 
| Томас Манро (Thomas Munro) | 
| Томаш Вондра (Tomas Vondra) | 
| Томаш Рыбак (Tomasz Rybak) | 
| Томаш Шиповский (Tomasz Szypowski) | 
| Торстен Фёрч (Torsten Foertsch) | 
| Тофиг Алиев (Tofig Aliev) | 
| Тоши Харада (Toshi Harada) | 
| Тривени Н. (Triveni N) | 
| Тристан Партин (Tristan Partin) | 
| Уилл Стори (Will Storey) | 
| Умар Хайат (Umar Hayat) | 
| Фабио Р. Слузала (Fabio R. Sluzala) | 
| Фабрицио де Ройес Мелло (Fabrízio de Royes Mello) | 
| Фаер Эмералд (Fire Emerald) | 
| Фейке Стинберген (Feike Steenbergen) | 
| Феликс (Felix) | 
| Фелипе Поззер (Feliphe Pozzer) | 
| Фил Итон (Phil Eaton) | 
| Филипп Бодуэн (Philippe Beaudoin) | 
| Филипп Сальвисберг (Philipp Salvisberg) | 
| Флоренц Целай (Florents Tselai) | 
| Франк Штрайциг (Frank Streitzig) | 
| Франческо Деграсси (Francesco Degrassi) | 
| Фредерик Юэль (Frédéric Yhuel) | 
| Фредрик Видлерт (Fredrik Widlert) | 
| Фёдор Сигаев (Teodor Sigaev) | 
| Хаджиме Мацунага (Hajime Matsunaga) | 
| Хайато Курода (Hayato Kuroda) | 
| Хайвел Карвер (Hywel Carver) | 
| Хайме Казанова (Jaime Casanova) | 
| Хайфан Ван (Haifang Wang) | 
| Хамид Ахтар (Hamid Akhtar) | 
| Ханну Кросинг (Hannu Krosing) | 
| Хари Кришна Сундер (Hari Krishna Sunder) | 
| Харука Такацука (Haruka Takatsuka) | 
| Хейкки Линнакангас (Heikki Linnakangas) | 
| Хиронобу Судзуки (Hironobu Suzuki) | 
| Хорхе Солорсано (Jorge Solórzano) | 
| Хосе Вилланова (José Villanova) | 
| Хоу Чжицзе (Hou Zhijie) | 
| Хуберт Любачевски (Hubert Lubaczewski) | 
| Хунаид Сохаил (Hunaid Sohail) | 
| Хунъюй Сонг (Hongyu Song) | 
| Хьюго Чжан (Hugo Zhang) | 
| Цзинтан Чжан (Jingtang Zhang) | 
| Цзинчжоу Фу (Jingzhou Fu) | 
| Цзэюань Ху (Zeyuan Hu) | 
| Цзюньван Жао (Junwang Zhao) | 
| Цзянхуа Ян (Jianghua Yang) | 
| Цзянь Хи (Jian He) | 
| Цзяо Шуньтянь (Jiao Shuntian) | 
| ЧанАо Чэнь (ChangAo Chen) | 
| Чао Ли (Chao Li) | 
| Чарльз Самборски (Charles Samborski) | 
| Чепмен Флэк (Chapman Flack) | 
| Чжан Минли (Zhang Mingli) | 
| Чжихун Юй (Zhihong Yu) | 
| Чиранмой Бхаттачарья (Chiranmoy Bhattacharya) | 
| Чэнвэнь Ву (Chengwen Wu) | 
| Чэнси Сунь (Chengxi Sun) | 
| Швета Малик (Shveta Malik) | 
| Шейк Мохаммад Муджиб (Shaik Mohammad Mujeeb) | 
| Шеньхао Ван (Shenhao Wang) | 
| Шихао Чжун (Shihao Zhong) | 
| Шлок Кьял (Shlok Kyal) | 
| Шон Маккой (Shawn McCoy) | 
| Шраван Кумар (Sravan Kumar) | 
| Шринатх Редди (Srinath Reddy) | 
| Шубхам Ханна (Shubham Khanna) | 
| Эван Си (Evan Si) | 
| Эйлер Тавейра (Euler Taveira) | 
| Эмануэле Музелла (Emanuele Musella) | 
| Эмануэль Ионеску (Emanuel Ionescu) | 
| Эмре Хасегели (Emre Hasegeli) | 
| Энди Алсуп (Andy Alsup) | 
| Энди Фан (Andy Fan) | 
| Эндрю (Andrew) | 
| Эндрю Джексон (Andrew Jackson) | 
| Эндрю Дунстан (Andrew Dunstan) | 
| Эндрю Кейн (Andrew Kane) | 
| Эндрю Уоткинс (Andrew Watkins) | 
| Энтони Люн (Anthony Leung) | 
| Энтони Сюй (Anthony Hsu) | 
| Эрик Винхольд (Erik Wienhold) | 
| Эрик Кир (Eric Cyr) | 
| Эрик Нордстрём (Erik Nordström) | 
| Эрик Рижкерс (Erik Rijkers) | 
| Эрика Чжан (Erica Zhang) | 
| Этьен Лафарж (Etienne LAFARGE) | 
| Эцуро Фудзита (Etsuro Fujita) | 
| Юго Нагата (Yugo Nagata) | 
| Юй Лян (Yu Liang) | 
| Юйхан Цю (Yuhang Qiu) | 
| Юки Сэйно (Yuki Seino) | 
| Юки Фудзи (Yuuki Fujii) | 
| Юнхао Ли (Yonghao Lee) | 
| Юрий Рашковский (Yurii Rashkovskii) | 
| Юрий Соколов (Yura Sokolov) | 
| Юси Огивара (Yushi Ogiwara) | 
| Юсукэ Сугиэ (Yusuke Sugie) | 
| Юта Кацураги (Yuta Katsuragi) | 
| Юто Сасаки (Yuto Sasaki) | 
| Юя Ватари (Yuya Watari) | 
| Якоб Еггер (Jakob Egger) | 
| Якобс Хольгер (Holger Jakobs) | 
| Якуб Вартак (Jakub Wartak) | 
| Ян Беренс (Jan Behrens) | 
| Ян Ильясов (Ilyasov Ian) | 
| Ян Лэй (Yang Lei) | 
| Янь Чэнпэнь (Yan Chengpen) | 
| Япинь Ли (Japin Li) | 
| Ярослав Сабуров (Yaroslav Saburov) | 
| Ярослав Сырыця (Yaroslav Syrytsia) | 
| Ясир Хуссейн (Yasir Hussain) | 
| Ясуо Хонда (Yasuo Honda) |