E.42. Выпуск 14
Дата выпуска: 2021-09-30
E.42.1. Обзор
PostgreSQL 14 содержит много новых возможностей и улучшений, в том числе:
- Хранимые процедуры теперь могут возвращать данные через параметры - OUT.
- Реализованы описанные в стандарте SQL параметры - SEARCHи- CYCLEдля общих табличных выражений.
- Операцию обращения по индексу теперь можно применять не только к массивам, но и к любому типу данных, для которого она имеет смысл. В этом выпуске такие операторы добавлены для типов - jsonbи- hstore.
- Диапазонные типы были дополнены мультидиапазонными, позволяющими представлять несплошные диапазоны данных. 
- Проведена большая работа по улучшению производительности параллельных запросов, обработки многопоточной нагрузки, секционированных таблиц, логической репликации и процедуры очистки. 
- Изменения в индексах-B-деревьях теперь обрабатываются более эффективным методом, уменьшающим раздувание индексов. 
- Процедура - VACUUMавтоматически становится агрессивнее и пропускает несущественные операции очистки в случае приближения базы данных к моменту зацикливания идентификаторов транзакций.
- Расширенную статистику теперь можно собирать по выражениям, что позволяет получить лучшие планы для сложных запросов. 
- Библиотека libpq теперь поддерживает конвейерную передачу нескольких запросов, что позволяет ускорить получение результатов через сетевые соединения, которым свойственны большие задержки. 
Предыдущие пункты и другие новые возможности PostgreSQL 14 более подробно описаны в следующих разделах.
E.42.2. Миграция на версию 14
Тем, кто хочет перенести данные из любой предыдущей версии, необходимо выполнить выгрузку/загрузку данных с помощью pg_dumpall либо использовать pg_upgrade или логическую репликацию. Общую информацию о переходе на более новую основную версию можно найти в Разделе 18.6.
В версии 14 реализован ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Рассмотрите следующие несовместимые аспекты:
- Необходимо пересоздать пользовательские объекты, использующие некоторые встроенные функции для работы с массивами, в связи с изменением типов аргументов (Том Лейн) § - А именно, функции - array_append(),- array_prepend(),- array_cat(),- array_position(),- array_positions(),- array_remove(),- array_replace()и- width_bucket()раньше принимали аргументы типа- anyarray, а теперь принимают- anycompatiblearray. Вследствие этого, пользовательские объекты, такие как операторы и агрегатные функции, использующие старые сигнатуры перечисленных функций, необходимо удалить перед обновлением, а затем создать вновь после завершения обновления.
- Ликвидированы устаревшие операторы проверки включения - @и- ~для встроенных геометрических типов данных и дополнительных модулей cube, hstore, intarray и seg (Джастин Призби) § §- Многие годы рекомендовалось применять вместо них более единообразно названные операторы - <@и- @>.
- Исправление в - to_tsquery()и- websearch_to_tsquery()разбора текста запроса, содержащего отброшенные фрагменты (Александр Коротков)- При отбрасывании некоторых фрагментов, например подчёркивания, эти функции выдавали некорректный запрос tsquery; так, результатом вызовов - websearch_to_tsquery('"pg_class pg"')и- to_tsquery('pg_class <-> pg')был запрос- ( 'pg' & 'class' ) <-> 'pg', но теперь эти функции выдают- 'pg' <-> 'class' <-> 'pg'.
- Исправление в - websearch_to_tsquery()разбора нескольких идущих подряд отбрасываемых фрагментов в кавычках (Александр Коротков) §- Ранее текст в кавычках, содержащий несколько идущих подряд отбрасываемых фрагментов, воспринимался как отдельные фрагменты, и в результате выдавался некорректный запрос tsquery, например в результате вызова - websearch_to_tsquery('"aaa: bbb"')выдавался запрос- 'aaa' <2> 'bbb', а теперь выдаётся- 'aaa' <-> 'bbb'.
- Смена типа результата - EXTRACT()с- float8на- numeric(Питер Эйзентраут) §- Благодаря этому исключается потеря точности, имевшая место в некоторых случаях. Прежнее поведение можно получить, используя старую нижележащую функцию - date_part().- Кроме того, - EXTRACT(date)теперь выдаёт ошибку для единиц времени, не входящих в состав типа данных- date.
- Смена значения, возвращаемого функциями - var_samp()и- stddev_samp(), при передаче им в аргументе единственного значения NaN, на NULL (Том Лейн)- Ранее возвращалось значение - NaN.
- При вызове - has_column_privilege()в случае указания по номеру атрибута на несуществующий или удалённый столбец теперь возвращается false (Джо Конвей)- Ранее при передаче таких номеров атрибутов возвращалась ошибка с сообщением о неверном столбце. 
- Исправление обработки бесконечных интервалов в оконных функциях (Том Лейн) § - Прежде с определениями рамок вида - 'inf' PRECEDING AND 'inf' FOLLOWINGвыдавались неправильные результаты.
- Ликвидация операторов вычисления факториала - !и- !!, а также функции- numeric_fac()(Марк Дилгер)- Функция - factorial()по-прежнему поддерживается.
- Недопущение выполнения функции - factorial()с отрицательными аргументами (Питер Эйзентраут) §- Ранее для таких аргументов возвращалось число 1. 
- Удаление поддержки постфиксных (правых унарных) операторов (Марк Дилгер) § - Утилиты pg_dump и pg_upgrade выдадут предупреждения, встретив такие операторы в обрабатываемой базе. 
- Сопоставление сокращённым кодам - \Dи- \Wсимволов конца строки при обработке регулярных выражений с учётом переводов строк (Том Лейн) §- Ранее в этом режиме данным кодам не сопоставлялись символы конца строки, но это не согласуется с поведением других распространённых процессоров регулярных выражений. Для получения старого поведения можно написать - [^[:digit:]]или- [^[:word:]].
- Игнорирование ограничений при сопоставлении ссылок назад в регулярных выражениях (Том Лейн) - Например, в выражении - (^\d+).*\1ограничение- ^должно действовать в начале строки, но не при сопоставлении ссылки- \1.
- Запрет использования - \wв качестве начала или конца диапазона в классах символов регулярного выражения (Том Лейн) §- Ранее такое использование допускалось, но результаты были неожиданными. 
- Ограничение символов в именах дополнительных серверных параметров только теми символами, которые допускаются в идентификаторах SQL без кавычек (Том Лейн) § § 
- Изменение значения по умолчанию серверного параметра password_encryption на - scram-sha-256(Питер Эйзентраут)- Ранее вариантом по умолчанию был - md5. Все новые пароли будут сохранены в виде SHA256, если только этот параметр сервера не изменён или пароль не задан непосредственно в виде MD5. Помимо этого, теперь не принимаются устаревшие (не документированные) подобные булевским значения, которые ранее были синонимичны- md5.
- Ликвидация серверного параметра - vacuum_cleanup_index_scale_factor(Питер Гейган) § §- Этот параметр игнорировался в PostgreSQL, начиная с версии 13.3. 
- Удаление серверного параметра - operator_precedence_warning(Том Лейн) §- Этот параметр использовался для уведомления приложений об изменениях, произошедших в PostgreSQL 9.5. 
- Изменение разбора указания - clientcertв- pg_hba.conf(Кётаро Хоригути) §- Значения - 1/- 0/- no-verifyдля этого параметра более не поддерживаются; принимаются только строки- verify-caи- verify-full. Также не допускается значение- verify-ca, если включена аутентификация по сертификату, так как она требует проверки- verify-full.
- Ликвидация поддержки сжатия SSL (Даниэль Густафссон, Микаэль Пакье) § § - Эта поддержка уже была отключена по умолчанию в предыдущих выпусках PostgreSQL, к тому же сжатие не поддерживается большинством современных версий OpenSSL и TLS. 
- Удаление поддержки второй версии клиент-серверного протокола на стороне сервера и в libpq (Хейкки Линнакангас) § - Последний раз эта версия использовалась по умолчанию в PostgreSQL 7.3 (выпущенном в 2002 г.). 
- Введение запрета на заключение имени языка в апострофы в команде - CREATE/DROP LANGUAGE(Питер Эйзентраут) §
- Ликвидация составных типов, которые ранее создавались для последовательностей и TOAST-таблиц (Том Лейн) § 
- Исправление обработки в ecpg удвоенных апострофов и кавычек в строках SQL-команд (Том Лейн) § § - Ранее строка - 'abc''def'передавалась серверу в виде- 'abc'def', а- "abc""def"— в виде- "abc"def", что вызывало ошибки синтаксиса.
- Недопущение использования индексов GiST операторами включения ( - <@и- @>) из модуля intarray (Том Лейн) §- Ранее для таких операторов требовалось полное сканирование индекса GiST, тогда как быстрее просто сканировать кучу. Индексы, созданные именно для этой цели, следует удалить. 
- Удаление дополнительной программы pg_standby (Джастин Призби) § 
- Недопущение обработки отрицательных аргументов функцией - normal_rand()модуля tablefunc (Ашутош Бапат) §- Выдаваемые с отрицательными значениями результаты не отвечали ожиданиям. 
E.42.3. Изменения
Ниже вы найдёте подробный список изменений, произошедших между предыдущим основным выпуском и выпуском PostgreSQL 14.
E.42.3.1. Сервер
- Добавление предопределённых ролей - pg_read_all_dataи- pg_write_all_data(Стивен Фрост) §- Эти групповые роли могут применяться для назначения пользователям прав чтения и записи всех таблиц, представлений и последовательностей. 
- Добавление предопределённой роли - pg_database_owner, в которую включается только текущий владелец базы данных (Ной Миш) §- Она особенно полезна в базах-шаблонах. 
- Удаление временных файлов после аварии обслуживающего процесса (Эйлер Тавейра) § - Ранее такие файлы сохранялись для целей отладки. Если необходимо, это удаление можно отключить, воспользовавшись новым серверным параметром remove_temp_files_after_crash. 
- Добавление возможности прерывания длительных запросов в случае отключения клиента (Сергей Черкашин, Томас Манро) § - Проверкой соединения в ходе выполнения запросов управляет серверный параметр client_connection_check_interval. (Эта функциональность поддерживается в Linux и некоторых других операционных системах.) 
- Добавление дополнительного параметра, задающего тайм-аут, функции - pg_terminate_backend()(Магнус Хагандер) §
- Реализация размещения широких кортежей в почти пустых страницах кучи (Джон Нейлор, Флорис ван Ни) § - Ранее кортежи, при добавлении которых мог превыситься фактор заполнения страницы, размещались на новых страницах. 
- Добавление поля SNI (Server Name Indication, Указания имени сервера) в пакеты SSL-соединений (Питер Эйзентраут) § - Убрать это поле можно, отключив клиентский параметр подключения - sslsni.
E.42.3.1.1. Очистка
- Возможность пропускать очистку индекса, когда число удаляемых из индекса записей незначительно (Масахико Савада, Питер Гейган) § § - Параметр очистки - INDEX_CLEANUPтеперь имеет новое значение по умолчанию,- auto, включающее эту оптимизацию.
- Наделение процедуры очистки способностью более прилежно добавлять удалённые страницы btree в карту свободного места (Питер Гейган) § - Ранее процедура очистки могла добавлять в карту свободного места только те страницы, которые были помечены как удалённые при предыдущей очистке. 
- Реализация возможности в ходе автоочистки высвобождать пространство, которое занимают неиспользуемые последние указатели линейных блоков (Маттиас ван де Меент, Питер Гейган) § 
- Увеличение активности процедуры очистки в части ликвидации «мертвых» строк во время обработки индексов с минимальными блокировками (Альваро Эррера) § § § - А именно, команды - CREATE INDEX CONCURRENTLYи- REINDEX CONCURRENTLYтеперь не препятствуют ликвидации «мёртвых» строк в других отношениях.
- Ускорение очистки баз, содержащих множество отношений (Тацухито Касахара) 
- Уменьшение значения по умолчанию параметра vacuum_cost_page_miss в соответствии с текущими аппаратными требованиями (Питер Гейган) § 
- Добавление возможности пропускать очистку TOAST-таблиц (Натан Боссарт) § - У команды - VACUUMпоявился параметр- PROCESS_TOAST, которому можно присвоить false и отключить обработку TOAST, а у программы vacuumdb появился аналогичный параметр- --no-process-toast.
- Обеспечение должного изменения битов видимости страниц при выполнении - COPY FREEZE(Анастасия Лубенникова, Паван Деоласи, Джефф Джейнс) §
- Реализация более агрессивного режима операций очистки при приближении таблицы к моменту зацикливания идентификаторов транзакций или мультитранзакций (Масахико Савада, Питер Гейган) § - Этим поведением управляют параметры vacuum_failsafe_age и vacuum_multixact_failsafe_age. 
- Увеличение интервала предупреждения и жёсткого ограничения, препятствующего зацикливанию идентификаторов транзакций и мультитранзакций (Ной Миш) § - Это должно уменьшить вероятность сбоев до получения предупреждений об угрозе зацикливания. 
- Добавление информации об отдельных индексах в вывод процедуры автоочистки (Масахико Савада) § 
E.42.3.1.2. Секционирование
- Увеличение производительности операций изменения и удаления данных в секционированных таблицах со множеством секций (Амит Ланготе, Том Лейн) § § § - В результате этого изменения значительно уменьшены издержки планировщика в таких случаях, а также появилась возможность отсечения секций во время выполнения операций изменения/удаления данных в секционированных таблицах. 
- Добавление возможности отсоединять секции неблокирующим образом (Альваро Эррера) § - Для этого предусмотрен синтаксис - ALTER TABLE ... DETACH PARTITION ... CONCURRENTLYи- FINALIZE.
- Игнорирование предложений - COLLATEв определениях значений, задающих границы секций (Том Лейн) §- Ранее такие предложения должны были совпадать с указанием правила сортировки для ключа секционирования, но будет правильнее, если данные значения будут просто приводиться к правилу сортировки, связанному с ключом. 
E.42.3.1.3. Индексы
- Возможность при добавлении данных в индекс btree удалять ненужные элементы индекса для предотвращения разделения страниц (Питер Гейган) § - Новый подход позволяет уменьшить раздувание индексов для таблиц, в которых часто изменяются индексированные столбцы. 
- Добавление в индексы BRIN возможности записывать несколько минимальных/максимальных значений для каждой зоны (Томаш Вондра) § - Это полезно, когда в каждой зоне страниц содержатся группы значений. 
- Использование фильтров Блума в индексах BRIN (Томаш Вондра) - В результате индексы BRIN могут эффективнее работать с данными, которым свойственна плохая локальность в куче. 
- Поддержка построения индексов GiST с предварительной сортировкой данных (Андрей Бородин) § - Предварительная сортировка производится автоматически и помогает создавать индексы быстрее и при этом меньшего размера. 
- Возможность добавления в индексы SP-GiST неключевых столбцов ( - INCLUDE) (Павел Борисов) §
E.42.3.1.4. Оптимизатор
- Возможность использования поиска по хешу при обработке предложений - INсо множеством констант (Джеймс Коулман, Дэвид Роули) §- Ранее список значений всегда сканировался последовательно. 
- Увеличение возможностей применения расширенной статистики при анализе предложений - OR(Томаш Вондра, Дин Рашид) § § §
- Поддержка расширенной статистики для выражений (Томаш Вондра) § - Теперь можно получать статистику по группам выражений и столбцов, а не только по столбцам, как было раньше. Эта статистика отображается в системном представлении - pg_stats_ext_exprs.
- Механизм эффективного сканирования диапазона - TIDв куче (Эдмунд Хорнер, Дэвид Роули) §- Ранее для условий на неравенство - TIDтребовалось последовательное сканирование.
- Исправление в - EXPLAIN CREATE TABLE ASи- EXPLAIN CREATE MATERIALIZED VIEWповедения- IF NOT EXISTS(Бхарат Рупиредди) §- Ранее в случае существования целевого объекта команда - EXPLAINвыдавала ошибку.
E.42.3.1.5. Общая производительность
- Ускорение вычисления снимков видимости MVCC в многопроцессорных системах при большом количестве сеансов (Андрес Фройнд) § § § § § § - Тем самым также увеличена производительность в случаях, когда множество сеансов простаивают. 
- Добавление в исполнитель механизма запоминания результатов из внутренней стороны соединения с вложенным циклом (Дэвид Роули) § - Это полезно, если на внутренней стороне просматривается лишь небольшой процент строк. Отключить механизм мемоизации позволяет серверный параметр enable_memoize. 
- Возможность выполнения инкрементальной сортировки в оконных функциях (Дэвид Роули) § 
- Увеличение производительности ввода-вывода при последовательном сканировании с использованием параллельных исполнителей (Томас Манро, Дэвид Роули) § - Это было реализовано за счёт выделения параллельным исполнителям блоков по группам. 
- Возможность параллельного сканирования сторонних таблиц при выполнении запроса, обращающегося к нескольким сторонним таблицам (Роберт Хаас, Кётаро Хоригути, Томас Манро, Эцуро Фудзита) - Обёртка postgres_fdw поддерживает такое сканирование, если установлен параметр - async_capable.
- Возможность выполнения предвыборки страниц во время analyze (Стивен Фрост) § - Этой возможностью управляет параметр maintenance_io_concurrency. 
- Увеличение производительности поиска регулярных выражений (Том Лейн) § § § § § § § § § § § 
- Кардинальное улучшение производительности при нормализации символов Unicode (Джон Нейлор) § - Тем самым ускорена работа - normalize()и- IS NORMALIZED.
- Добавление возможности использовать для данных в TOAST метод сжатия LZ4 (Дилип Кумар) § - Этот метод можно выбрать на уровне столбца или установить его как метод по умолчанию в серверном параметре default_toast_compression. Данная функциональность поддерживается, только если сервер скомпилирован с ключом - --with-lz4. По умолчанию по-прежнему выбирается метод- pglz.
E.42.3.1.6. Мониторинг
- При включении серверного параметра compute_query_id для каждого запроса вычисляется идентификатор, который отображается в - pg_stat_activity,- EXPLAIN VERBOSEи csvlog, а может также вставляться в log_line_prefix (Жюльен Руо) § § § § §- Также может отображаться идентификатор запроса, вычисляемый некоторым расширением. 
- Улучшение информационных сообщений процессов автоматической очистки и автоматического анализа (Стивен Фрост, Якуб Вартак) § - Теперь при включении track_io_timing выводится длительность операций ввода-вывода в ходе автоочистки и автоанализа. Также для автоанализа выдаётся объём чтений буфера и загрязнений страниц в секунду. 
- Добавление в вывод команды log_connections сведений об имени исходного пользователя, переданном клиентом (Джейкоб Чемпион) § 
E.42.3.1.7. Системные представления
- Добавление системного представления - pg_stat_progress_copy, отражающего прогресс выполнения- COPY(Йозеф Шиманек, Маттиас ван де Меент) § §
- Добавление системного представления - pg_stat_wal, отражающего активность WAL (Масахиро Икеда) § § §
- Добавление системного представления - pg_stat_replication_slots, отражающего активность слотов репликации (Масахико Савада, Амит Капила, Вигнеш Си) § § § §- Статистику слота сбрасывает функция - pg_stat_reset_replication_slot().
- Добавление системного представления - pg_backend_memory_contexts, отражающего использование памяти сеансами (Атсуши Торикоши, Масао Фудзии) § §
- Добавление функции - pg_log_backend_memory_contexts(), выводящей информацию о контекстах памяти определённого обслуживающего процесса (Атсуши Торикоши)
- Добавление статистики по сеансам в системное представление - pg_stat_database(Лауренц Альбе) §
- Добавление в - pg_prepared_statementsстолбцов со счётчиками общих и специализированных планов (Атсуши Торикоши, Кётаро Хоригути) §
- Добавление времени начала ожидания блокировки в представление - pg_locks(Атсуши Торикоши)
- Отображение процесса архивации в - pg_stat_activity(Кётаро Хоригути) §
- Добавление события ожидания - WalReceiverExit, отражающего состояние ожидания завершения приёмника WAL (Масао Фудзии) §
- Дополнение информационной схемы представлением - routine_column_usage, в котором отображаются столбцы, задействуемые в выражениях параметров по умолчанию функций и процедур (Питер Эйзентраут) §
E.42.3.1.8. Аутентификация
- Возможность использования заданного в SSL-сертификате уникального имени (DN) в качестве имени пользователя при аутентификации по клиентскому сертификату (Эндрю Дунстан) § - Новый вариант - clientname=DNв- pg_hba.confпозволяет считать исходным именем пользователя не только атрибут- CNи может быть полезен в сочетании с сопоставлениями аутентификации.
- Возможность включения в - pg_hba.confи- pg_ident.confмногострочных записей (Фабьен Коэльо) §- Перенести содержимое записи на следующую строку можно, закончив строку символом обратной косой черты. 
- Возможность указания каталога со списками отозванных сертификатов (Кётаро Хоригути) § - Указать этот каталог позволяет серверный параметр ssl_crl_dir и параметр подключения libpq sslcrldir. Ранее можно было указать только один файл со списком отозванных сертификатов (CRL). 
- Возможность использования паролей произвольной длины (Том Лейн, Натан Боссарт) § 
E.42.3.1.9. Конфигурация сервера
- Добавление серверного параметра idle_session_timeout, позволяющего закрывать простаивающие сеансы (Япинь Ли) § - Он работает подобно idle_in_transaction_session_timeout. 
- Изменение значения checkpoint_completion_target по умолчанию — теперь оно равно 0.9 (Стивен Фрост) § - Ранее оно равнялось 0.5. 
- Возможность указания кода - %Pв log_line_prefix, обозначающего PID ведущего процесса группы параллельных исполнителей в строках журнала, относящихся к параллельным исполнителям (Джастин Призби) §
- Возможность определения в параметре unix_socket_directories путей в виде отдельных, разделённых запятыми строк в апострофах (Иэн Барвик) § - Ранее все такие пути должны были задаваться в одной строке в апострофах. 
- Возможность выделения динамической общей памяти при запуске (Томас Манро) § - Этим управляет параметр min_dynamic_shared_memory. Данная возможность позволяет лучше использовать огромные страницы. 
- Добавление серверного параметра huge_page_size, управляющего размером используемых огромных страниц в Linux (Один Угедал) § 
E.42.3.2. Потоковая репликация и восстановление
- Возможность использования pg_rewind для перематывания состояния резервных серверов (Хейкки Линнакангас) § 
- Возможность изменения команды, задаваемой параметром restore_command, при перезагрузке конфигурации сервера (Сергей Корнилов) § - Также можно задать в - restore_commandпустую строку и перезагрузить конфигурацию, чтобы при восстановлении считывались файлы только из каталога- pg_wal.
- Добавление серверного параметра log_recovery_conflict_waits, позволяющего узнавать о длительном ожидании разрешения конфликтов при восстановлении (Бертран Друво, Масахико Савада) § § 
- Приостановка восстановления на сервере горячего резерва в случае такого изменения параметров на главном сервере, которое может сделать невозможным воспроизведение журнала на резервном (Питер Эйзентраут) - Ранее при таких изменениях резервный сервер немедленно отключался. 
- Добавление функции - pg_get_wal_replay_pause_state(), отображающей состояние восстановления (Дилип Кумар) §- Она выдаёт более подробную информацию, чем функция - pg_is_wal_replay_paused(), которая тоже сохранена.
- Добавление нового серверного параметра in_hot_standby, доступного только для чтения (Харибабу Комми, Грег Нанкарроу, Том Лейн) § - Он позволяет клиентам легко определить, подключены ли они к серверу горячего резерва. 
- Ускорение усечения маленьких таблиц при восстановлении кластеров с большим количеством общих буферов (Кирк Джемисон) § 
- Обеспечение в Linux возможности синхронизации файловой системы в начале процесса восстановления после сбоя (Томас Манро) § - По умолчанию PostgreSQL открывает и синхронизирует с ФС каждый файл данных в кластере перед началом восстановления после сбоя. Новый вариант recovery_init_sync_method - =syncfsпозволяет вместо этого синхронизировать саму файловую систему, используемую кластером, что ускоряет восстановление кластеров с большим количеством файлов.
- Реализация функции - pg_xact_commit_timestamp_origin(), выдающей время фиксации и источник репликации для заданной транзакции (Мувад Ли) §
- Добавление источника репликации в записи, возвращаемые функцией - pg_last_committed_xact()(Мувад Ли) §
- Предоставление возможности использования стандартного механизма разрешений для управления доступом к функциям, манипулирующим источниками репликации (Мартин Маркес) § - Ранее выполнять эти функции разрешалось только суперпользователям, и это же ограничение сохранено по умолчанию. 
E.42.3.2.1. Логическая репликация
- Возможность в процессе логической репликации передавать подписчикам большие транзакции в потоковом режиме (Дилип Кумар, Амит Капила, Аджин Чериан, Томаш Вондра, Никхил Сонтакке, Стас Кельвич) § § § § - Ранее содержимое транзакции объёмом, превышающим logical_decoding_work_mem, записывалось на диск до завершения транзакции. 
- Улучшение API логической репликации для поддержки потоковой передачи больших транзакций в процессе выполнения (Томаш Вондра, Дилип Кумар, Амит Капила) - Имена соответствующих функций-обработчиков начинаются со слова - stream. Такой режим также поддерживает расширение test_decoding.
- Возможность выполнения синхронизации отдельных таблиц, осуществляемой при логической репликации, в нескольких транзакциях (Питер Смит, Амит Капила, Такамити Осуми) § 
- Немедленное внесение в WAL сопоставления подтранзакции с - XIDтранзакции верхнего уровня (Томаш Вондра, Дилип Кумар, Амит Капила)- Это полезно для логического декодирования. 
- Улучшение API логического декодирования для поддержки двухфазной фиксации (Аджин Чериан, Амит Капила, Никхил Сонтакке, Стас Кельвич) § § § - Соответствующий параметр появился у функции - pg_create_logical_replication_slot().
- Добавление в WAL сообщений аннулирования по завершении команды, когда используется логическая репликация (Дилип Кумар, Томаш Вондра, Амит Капила) § - Это позволяет организовать логическую репликацию выполняющихся транзакций. При отключении логической репликации сообщения аннулирования выдаются только по завершении транзакции. 
- Реализация для процедуры логического декодирования более эффективной обработки сообщений аннулирования кеша (Дилип Кумар) § - Благодаря этой оптимизации процедура логического декодирования будет лучше справляться с большим объёмом команд DDL. 
- Возможность управления передачей сообщений логического декодирования в поток репликации (Дэвид Пиротт, Эйлер Тавейра) § 
- Возможность транслирования подписок логической репликации в режиме двоичной передачи данных (Дэйв Крамер) § - Этот режим работает быстрее текстового, но чуть менее устойчив. 
- Возможность фильтрации логического декодирования по xid (Маркус Ваннер) § 
- Сокращение числа ключевых слов, которые нельзя использовать в качестве меток столбцов без - AS(Марк Дилгер) §- Число недопустимых в этом контексте ключевых слов сокращено на 90%. 
- Возможность определить псевдоним для предложения - USINGв- JOIN(Питер Эйзентраут) §- Задать псевдоним можно, написав - ASпосле предложения- USING. Затем этот псевдоним можно использовать как указание таблицы для объединённых столбцов из- USING.
- Возможность добавления - DISTINCTв- GROUP BYдля устранения повторяющихся сочетаний- GROUPING SET(Вик Фиринг) §- Например, конструкция - GROUP BY CUBE (a,b), CUBE (b,c)будет выдавать повторяющиеся сочетания группировки без- DISTINCT.
- Исправление обработки указаний - DEFAULTпри использовании в- INSERTсписков- VALUES, определяющих несколько кортежей (Дин Рашид) §- Ранее в таких случаях выдавалась ошибка. 
- Реализация описанных в стандарте SQL предложений - SEARCHи- CYCLEдля общих табличных выражений (Питер Эйзентраут) § §- Тот же результат можно было получить, используя синтаксис, существовавший ранее, но это было менее удобно. 
- Добавление возможности указания имени таблицы перед именем столбцов в предложении - WHEREконструкции- ON CONFLICT(Том Лейн) §- Однако сослаться в таком указании можно только на целевую таблицу. 
E.42.3.4. Служебные команды
- Возможность использования распараллеливания при выполнении - REFRESH MATERIALIZED VIEW(Бхарат Рупиредди)
- Возможность смены табличного пространства для нового индекса, создаваемого командой - REINDEX(Алексей Кондратов, Микаэль Пакье, Джастин Призби) § §- Целевое табличное пространство указывается в предложении - TABLESPACE. В reindexdb для использования этой возможности добавлен параметр- --tablespace.
- Возможность обработки командой - REINDEXвсех дочерних таблиц или индексов секционированного отношения (Джастин Призби, Микаэль Пакье) §
- Избавление команд построения индексов с указанием - CONCURRENTLYот необходимости ожидать завершения других операций в режиме- CONCURRENTLY(Альваро Эррера) § § §
- Увеличение производительности - COPY FROMв двоичном режиме (Бхарат Рупиредди, Амит Ланготе) §
- Сохранение совместимого со стандартом SQL синтаксиса для определённых в SQL функций, используемых в определениях представлений (Том Лейн) - Ранее вызовы определённых в стандарте SQL функций, например - EXTRACT(), выводились в упрощённом виде. Теперь же в отображаемом определении правила или представления они выводятся в исходном синтаксисе.
- Добавление соответствующего стандарту SQL предложения - GRANTED BYв команды- GRANTи- REVOKE(Питер Эйзентраут) §
- Добавление указания - OR REPLACEв- CREATE TRIGGER(Такамити Осуми)- Оно позволяет заменять уже существующие триггеры. 
- Возможность выполнения - TRUNCATEсо сторонними таблицами (Кадзутака Ониси, Кохэй КайГай) §- Также теперь эту операцию поддерживает модуль postgres_fdw. 
- Предоставление более удобной возможности добавления и удаления публикаций из подписки (Япинь Ли) § - Для этого предусмотрены новые предложения - ALTER SUBSCRIPTION ... ADD/DROP PUBLICATION, не требующие указания всех публикаций при добавлении/удалении элементов.
- Добавление первичных ключей, ограничений уникальности и внешних ключей в системные каталоги (Питер Эйзентраут) § § - Эти изменения призваны облегчить анализ системных каталогов в графических инструментах. С существующими уникальными индексами каталогов теперь связаны ограничения - UNIQUEили- PRIMARY KEY. Связи по внешнему ключу фактически не хранятся и не реализованы в виде ограничений, но их можно получить для визуального представления, воспользовавшись функцией pg_get_catalog_foreign_keys().
- Возможность использования псевдороли - CURRENT_ROLEвезде, где принимается- CURRENT_USER(Питер Эйзентраут) §
E.42.3.5. Типы данных
- Возможность реализации обращения по индексу для встроенных типов и расширений (Дмитрий Долгов) § - Ранее обработка обращений по индексу была вшита в ядро сервера, поэтому обращение по индексу применялось только к типам-массивам. В результате этого изменения обращение по индексу можно использовать для извлечения или изменения значения элемента любого типа данных, для которого такое обращение имеет смысл. 
- Реализация обращения по индексу к значениям - JSONB(Дмитрий Долгов) § § §- Используя операцию обращения по индексу к - JSONB, можно извлекать и менять внутреннее содержимое- JSONB.
- Добавление поддержки мультидиапазонных типов данных (Пол Юнгвирт, Александр Коротков) § § § § - Такие типы похожи на диапазонные, но значения этих типов могут содержать несколько упорядоченных раздельных диапазонов. Для каждого диапазонного типа автоматически создаётся связанный мультидиапазонный тип. 
- Добавление поддержки стемминга для следующих языков: армянский, баскский, каталанский, хинди, идиш и сербский (Питер Эйзентраут) § § § 
- Обеспечение поддержки строк неограниченной длины в файлах данных tsearch (Том Лейн) § - Ранее длина строки ограничивалась 4 килобайтами. Попутно удалена функция - t_readline().
- Добавление поддержки значений - Infinityи- -Infinityв тип данных numeric (Том Лейн) §- Ранее такие значения поддерживались числовыми типами с плавающей точкой. 
- Добавление операторов - <<|и- |>>для типа point, представляющих проверки «строго выше» и «строго ниже» (Эмре Хасегели) §- Ранее существовали аналогичные операторы с названиями - >^и- <^, но это наименование не соответствует принятому для других геометрических типов. Старые названия сохранены, но когда-нибудь могут быть удалены.
- Добавление операторов для прибавления и вычитания из - LSNчисловых значений в байтах (Масао Фудзии)
- Ослабление требования совпадения - OIDмассивов и записей при двоичной передаче данных (Том Лейн) §
- Создание типов-массивов составных элементов для системных каталогов (Вэньцзин Цзэн) § - Для создаваемых пользователями отношений уже давно создаются связанные с ними составные типы, а также типы-массивы с такими составными элементами. Теперь такие типы создаются и для системных каталогов. В результате этого изменения также исправлена несогласованность — ранее в однопользовательском режиме даже при создании пользовательской таблицы не создавался тип-массив составных элементов. 
E.42.3.6. Функции
- Возможность определения функций и процедур на языке SQL с телом в виде, соответствующем стандарту SQL (Питер Эйзентраут) § - Ранее поддерживалось указание тела функций только в виде строковой константы. При определении функции или процедуры в стиле стандарта SQL её тело разбирается сразу и сохраняется в виде дерева разбора. Это позволяет лучше отслеживать зависимости функций, а также имеет преимущества в плане безопасности. 
- Возможность определения выходных параметров ( - OUT) для процедур (Питер Эйзентраут) § §
- Обеспечение для некоторых функций, работающих с массивами, возможности принимать аргументы смешанных, но при этом совместимых типов данных (Том Лейн) § - Функции - array_append(),- array_prepend(),- array_cat(),- array_position(),- array_positions(),- array_remove(),- array_replace()и- width_bucket()теперь принимают аргументы- anycompatiblearrayвместо- anyarray. Вследствие этого они стали менее щепетильными в случае несовпадения типов аргументов.
- Реализация описанной в стандарте SQL функции - trim_array()(Вик Фиринг)- Ранее вместо неё можно было использовать срезы массивов, но это не так удобно. 
- Добавление функций, аналогичных - ltrim()и- rtrim(), для типа- bytea(Джоэл Джейкобсон) §
- Поддержка отрицательных индексов в функции - split_part()(Никхил Бенеш) §- Отрицательные значения указывают на поля по порядку от последнего к первому. 
- Добавление функции - string_to_table(), разбивающей строковое значение по разделителям (Павел Стехуле)- Она подобна существовавшей ранее функции - regexp_split_to_table().
- Добавление функции - unistr(), обрабатывающей символы Unicode, заданные в строке шестнадцатеричными кодами с обратной косой чертой (Павел Стехуле) §- Подобным образом символы Unicode могут задаваться в строковых константах. 
- Добавление агрегатной функции - bit_xor(), вычисляющей ИСКЛЮЧАЮЩЕЕ ИЛИ (Алекей Баштанов) §
- Реализация функции - bit_count(), возвращающей количество установленных бит в строке битов или байтов (Давид Феттер) §
- Добавление функции - date_bin()(Джон Нейлор) § §- Эта функция «подгоняет» дату/время под интервал определённой длительности, отсчитывая от заданного начального момента. 
- Поддержка отрицательного значения года в аргументах функций - make_timestamp()/- make_timestamptz()(Питер Эйзентраут) §- Отрицательные значения воспринимаются как годы до нашей эры. 
- Поддержка нового синтаксиса регулярных выражений в - substring()(Питер Эйзентраут)- В стандарте SQL описан новый синтаксис - SUBSTRING(text SIMILAR pattern ESCAPE escapechar)вместо предыдущего- SUBSTRING(text FROM pattern FOR escapechar), который остаётся допустимым в PostgreSQL.
- Поддержка дополнительных спецкодов \D, - \Sи- \W, задающих классы символов, в квадратных скобках внутри регулярных выражений (Том Лейн) §
- Добавление варианта - [[:word:]], равнозначного- \w, в качестве класса символов в регулярных выражениях (Том Лейн) §
- Увеличение гибкости в выборе типа параметра, задающего значение по умолчанию, для оконных функций - lead()и- lag()(Вик Фиринг) §
- Принятие нулевого значения результатом деления чисел с плавающей точкой на бесконечность (Кётаро Хоригути) § - Ранее при выполнении таких операций выдавались ошибки потери значимости. 
- Принятие значения NaN результатом деления числа с плавающей точкой на NaN (Том Лейн) § - Ранее при таком делении выдавалась ошибка. 
- Принятие нулевого значения результатом функций - exp()и- power()со степенью, равной минус бесконечности (Том Лейн) § § §- Ранее с такой степенью часто выдавались ошибки потери значимости. 
- Улучшение точности геометрических вычислений, в которых фигурирует бесконечность (Том Лейн) § 
- Наделение свойством герметичности всех подходящих встроенных функций приведения типов (Том Лейн) § - Это позволяет расширить применение функций, требующих преобразования типов, там, где важна безопасность. 
- Изменение поведения функций - pg_describe_object(),- pg_identify_object()и- pg_identify_object_as_address(), чтобы они всегда выдавали полезные сообщения об ошибках в случае отсутствия объектов (Микаэль Пакье) §
E.42.3.7. PL/pgSQL
- Улучшение разбора выражений и присваиваний в PL/pgSQL (Том Лейн) § - Благодаря этому изменению стало возможным присваивание значений срезам массивов и полям вложенных записей. 
- Возможность параллельного выполнения запроса, заданного в команде - RETURN QUERYязыка plgpsql (Том Лейн) §
- Увеличение производительности повторяющихся команд CALL в процедурах на языке plpgsql (Павел Стехуле, Том Лейн) § 
E.42.3.8. Клиентские интерфейсы
- Реализация конвейерного режима в libpq (Крейг Рингер, Матье Гарриг, Альваро Эррера) § - В этом режиме клиент может передать несколько запросов и ожидать их завершения только после передачи специального сообщения синхронизации. 
- Расширение функциональности параметра libpq - target_session_attrs(Харибабу Комми, Грег Нанкарроу, Вигнеш Си, Том Лейн) § §- У него появились новые значения - read-only,- primary,- standbyи- prefer-standby.
- Улучшение формата вывода функции libpq - PQtrace()(Ая Ивата, Альваро Эррера) §
- Возможность привязывания идентификатора ECPG SQL к определённому подключению (Хайато Курода) § - Это привязывание осуществляется командой - DECLARE ... STATEMENT.
E.42.3.9. Клиентские приложения
- Добавление в vacuumdb возможности пропускать очистку индекса и отсечение пустых страниц (Натан Боссарт) § - Для отключения этих операций добавлены параметры - --no-index-cleanupи- --no-truncate.
- Обеспечение в pg_dump возможности выгрузки только определённых расширений (Гийом Леларж) § - Выбрать расширение позволяет параметр - --extension.
- Добавление в pgbench функции - permute(), перемешивающей значения случайным образом (Фабьен Коэльо, Хиронобу Судзуки, Дин Рашид) §
- Принятие в расчёт времени отключения при вычислении длительности переподключений, измеряемой при запуске pgbench с ключом - -C(Юго Нагата)
- Возможность увеличения уровня детализации сообщений при добавлении дополнительных ключей - -v(Том Лейн) §- Это поведение поддерживается программами pg_dump, pg_dumpall и pg_restore. 
E.42.3.9.1. psql
- Возможность указания в командах psql - \dfи- \doтипов аргументов для функций и операторов (Грег Сабино Маллейн, Том Лейн) §- Это помогает сократить число совпадений в случае использования перегруженных имён таких объектов. 
- Добавление в вывод команды psql - \d[i|m|t]+столбца, показывающего метод доступа (Георгиос Коколатос) §
- Дополнение вывода команд psql - \dtи- \diинформацией о TOAST-таблицах и их индексах (Джастин Призби) §
- Добавление в psql команды - \dX, показывающей объекты расширенной статистики (Тацуро Ямада) §
- Наделение команды psql - \dTспособностью понимать синтаксис массивов и принятые на стороне сервера грамматические синонимы, например воспринимать- intкак- integer(Грег Сабино Маллейн, Том Лейн)
- Отбрасывание содержимого предыдущего запроса или файла, который открывался в редакторе, вызванном командами psql - \e,- \efи- \ev, в случае выхода из редактора без сохранения (Лауренц Альбе) §- Ранее в таких случаях в буфер запроса загружался предыдущий запрос, который обычно сразу же и выполнялся, но этого вряд ли хочет пользователь. 
- Улучшение механизма дополнения табуляцией (Вигнеш Си, Микаэль Пакье, Джастин Призби, Георгиос Коколатос, Жюльен Руо) § § § § § § § § § § § § § § § § § § 
E.42.3.10. Серверные приложения
- Добавление утилиты командной строки pg_amcheck, упрощающей проведение проверок - contrib/amcheckпри большом количестве отношений (Марк Дилгер) §
- Добавление ключа - --no-instructionsдля программы initdb (Магнус Хагандер) §- Этот ключ подавляет обычно выводимые сообщения, подсказывающие, как запустить сервер. 
- Отказ от создания скрипта - analyze_new_clusterпрограммой pg_upgrade (Магнус Хагандер) §- Вместо этого теперь будут выводиться заменяющие его инструкции по запуску vacuumdb. 
- Ликвидация ключа postmaster - -o(Магнус Хагандер) §- Этот ключ стал ненужным, так как все передаваемые посредством его параметры уже можно передавать напрямую. 
E.42.3.11. Документация
- Переименование сущности «Default Roles» (Роли по умолчанию) в «Predefined Roles» (Предопределённые роли) в английском оригинале (Брюс Момджян, Стивен Фрост) § 
- Добавление описания функции - factorial()(Питер Эйзентраут) §- После удаления оператора - !, которое состоялось в этом выпуске, функция- factorial()является единственным встроенным средством вычисления факториала.
E.42.3.12. Исходный код
- Добавление параметра configure - --with-ssl={openssl}для предоставления в будущем возможности выбрать используемую библиотеку SSL (Даниэль Густафссон, Микаэль Пакье) §- Старый вариант - --with-opensslоставлен для совместимости.
- Добавление поддержки абстрактных Unix-сокетов (Питер Эйзентраут) § - В настоящее время эта поддержка обеспечивается в Linux и Windows. 
- Обеспечение корректной работы с файлами больше 4 гигабайт в Windows (Хуан Хосе Сантамария Флеча) § - Например, теперь с файлами больше 4 ГБ может работать - COPY, также поддерживаются файлы сегментов отношений и файлы WAL такого размера.
- Добавление серверного параметра debug_discard_caches, включающего режим сброса кеша, что бывает полезно при тестировании (Крейг Рингер) § § § - Ранее этим поведением можно было управлять только на этапе компиляции. Для включения этого режима во время работы initdb, у этой программы появился ключ - --discard-caches.
- Ряд улучшений, расширяющих возможности выявления ошибок с использованием valgrind (Альваро Эррера, Питер Гейган) § § § 
- Добавление модуля тестирования регулярных выражений (Том Лейн) § 
- Обеспечение поддержки LLVM версии 12 (Andres Freund) 
- Переход от низкоуровневых функций для вычисления хешей SHA1, SHA2 и MD5 к EVP API библиотеки OpenSSL (Микаэль Пакье) § § § § - Этот интерфейс более современный и поддерживает режим FIPS. 
- Отказ от отдельного выбора генератора случайных чисел на этапе сборки (Даниэль Густафссон) § - Теперь этот выбор связан с выбором библиотеки SSL. 
- Добавление процедур прямого преобразования символов из кодировки EUC_TW в Big5 и обратно (Хейкки Линнакангас) § 
- Добавление поддержки реализованного во FreeBSD версионирования правил сортировки (Томас Манро) § 
- Добавление функции - amadjustmembersв API индексных методов доступа (Том Лейн) §- Реализуя эту функцию, индексный метод доступа может проверить состав создаваемого класса или семейства операторов. 
- Добавление в - libpq-fe.hмакросов для проверки наличия в libpq недавно появившейся функциональности (Том Лейн, Альваро Эррера) §- Ранее наличие нужной приложениям функциональности было принято определять во время компиляции, анализируя - PG_VERSION_NUM. Но это прежде всего версия сервера, она может быть не очень хорошим признаком версии libpq. Теперь в- libpq-fe.hдобавлены символы- #define, обозначающие видимую приложениям функциональность, появившуюся в 14 версии; подобные символы планируется добавлять и в дальнейшем.
E.42.3.13. Дополнительные модули
- Возможность обращения по индексу к значениям hstore (Том Лейн, Дмитрий Долгов) § 
- Возможность использования в pg_trgm индексов GiST/GIN при поиске по условию равенства (Жюльен Руо) § - Такое условие обрабатывается подобно - LIKE, но без учёта знаков подстановки.
- Возможность передачи значений типа cube в двоичном режиме (КайГай Кохэй) § 
- Реализация в - pgstattuple_approx()возможности обработки TOAST-таблиц (Питер Эйзентраут) §
- Добавление дополнительного модуля pg_surgery, позволяющего изменять видимость строк путём хирургического вмешательства (Ашутош Шарма) § - Это полезный инструмент для извлечения данных из повреждённых баз. 
- Добавление дополнительного модуля old_snapshot, выдающего сопоставление - XID/время, которое используется функциональностью old_snapshot_threshold (Роберт Хаас) §
- Добавление в amcheck проверки страниц кучи (Марк Дилгер) § - Ранее этот модуль мог проверять только страницы индексов-B-деревьев. 
- Реализация в pageinspect возможности рассмотрения GiST-индексов (Андрей Бородин, Хейкки Линнакангас) § § 
- Смена в pageinspect типа значений, задающих номера блоков, на - bigint(Питер Эйзентраут)
- Признание функций btree_gist допускающими распараллеливание и присвоение им метки - parallel safe(Стивен Винфилд) §
E.42.3.13.1. pg_stat_statements
- Перенос вычисления хеша запроса из pg_stat_statements в ядро сервера (Жюльен Руо) § - Добавлен серверный параметр compute_query_id, имеющий по умолчанию значение - auto, с которым при загрузке расширения автоматически включается вычисление идентификаторов запроса.
- Разделение отслеживаемых pg_stat_statements операторов на операторы верхнего уровня и вложенные (Жюльен Руо) § - Ранее, когда отслеживались все операторы, в случае совпадения операторов верхнего уровня с вложенными они отслеживались как одинаковые, но раздельное их отслеживание видится более полезным. 
- Добавление в pg_stat_statements счётчика обработанных строк для служебных команд (Масао Фудзии, Юта Кацураги, Юки Сэйно) § § 
- Добавление системного представления - pg_stat_statements_infoдля отслеживания активности pg_stat_statements (Юта Кацураги, Юки Сэйно, Naoki Nakamichi) § §
E.42.3.13.2. postgres_fdw
- Добавление в postgres_fdw возможности вставлять сразу несколько строк (Такаюки Цунакава, Томаш Вондра, Амит Ланготе) § § 
- Реализация в postgres_fdw возможности импорта отдельных секций таблицы, определяемых командой - IMPORT FOREIGN SCHEMA ... LIMIT TO(Маттиас ван де Меент)- По умолчанию импортируется только корневая секционированная таблица. 
- Добавление в postgres_fdw функции - postgres_fdw_get_connections(), выдающей список открытых соединений со сторонними серверами (Бхарат Рупиредди) §
- Предоставление возможности выбрать, должны ли соединения со сторонними серверами оставаться открытыми после завершения транзакции (Бхарат Рупиредди) § - Этот выбор реализуется параметром - keep_connectionsи по умолчанию он включён, то есть соединения не закрываются.
- Реализация восстановления подключения postgres_fdw к стороннему серверу при необходимости (Бхарат Рупиредди) § § - Ранее в случае перезапуска стороннего сервера при последующем обращении к его таблицам могли возникать ошибки. 
- Добавление в postgres_fdw функций для отключения существующих соединений (Bharath Rupireddy) § 
E.42.4. Благодарственный список
Перечисленные ниже (в алфавитном порядке) лица сделали вклад в этот выпуск, разрабатывая, совершенствуя и рецензируя код, принимая правки, проводя тестирование или сообщая о проблемах.
| Абхиджит Менон-Сен (Abhijit Menon-Sen) | 
| Адам Балог (Ádám Balogh) | 
| Аджин Чериан (Ajin Cherian) | 
| Адриан Хо (Adrian Ho) | 
| Айзек Морленд (Isaac Morland) | 
| Александр Алексеев (Aleksander Alekseev) | 
| Александр Кожемякин (Alex Kozhemyakin) | 
| Александр Коротков (Alexander Korotkov) | 
| Александр Лахин (Alexander Lakhin) | 
| Александр Навратил (Alexander Nawratil) | 
| Александр Пыхалов (Alexander Pyhalov) | 
| Александра Ван (Alexandra Wang) | 
| Алексей Баштанов (Alexey Bashtanov) | 
| Алексей Булгаков (Alexey Bulgakov) | 
| Алексей Кондратов (Alexey Kondratov) | 
| Алессандро Герарди (Alessandro Gherardi) | 
| Альваро Эррера (Álvaro Herrera) | 
| Амит Капила (Amit Kapila) | 
| Амит Ланготе (Amit Langote) | 
| Амит Хандекар (Amit Khandekar) | 
| Амул Сул (Amul Sul) | 
| Анастасия Лубенникова (Anastasia Lubennikova) | 
| Андреас Викт (Andreas Wicht) | 
| Андреас Гроб (Andreas Grob) | 
| Андреас Зельтенрейх (Andreas Seltenreich) | 
| Андреас Кречмер (Andreas Kretschmer) | 
| Андрей Билле (Andrew Bille) | 
| Андрей Бородин (Andrey Borodin) | 
| Андрей Лепихов (Andrey Lepikhov) | 
| Андрес Фройнд (Andres Freund) | 
| Антон Волошин (Anton Voloshin) | 
| Антонин Хоуска (Antonin Houska) | 
| Арне Роланд (Arne Roland) | 
| Арсений Шер (Arseny Sher) | 
| Артур Закиров (Artur Zakirov) | 
| Артур Насименту (Arthur Nascimento) | 
| Асим Правин (Asim Praveen) | 
| Асиф Рехман (Asif Rehman) | 
| Атсуши Торикоши (Atsushi Torikoshi) | 
| Ахсан Хади (Ahsan Hadi) | 
| Ашвин Агравал (Ashwin Agrawal) | 
| Ашутош Бапат (Ashutosh Bapat) | 
| Ашутош Шарма (Ashutosh Sharma) | 
| Ая Ивата (Aya Iwata) | 
| Барри Педерсон (Barry Pederson) | 
| Бас Пот (Bas Poot) | 
| Бауржан Сахариев (Bauyrzhan Sakhariyev) | 
| Бенуа Лобро (Benoît Lobréau) | 
| Бернд Хелмле (Bernd Helmle) | 
| Бернхард М. Видеманн (Bernhard M. Wiedemann) | 
| Бертран Друво (Bertrand Drouvot) | 
| Бина Эмерсон (Beena Emerson) | 
| Борис Колпаков (Boris Kolpackov) | 
| Брайан Йе (Brian Ye) | 
| Брар Пининг (Brar Piening) | 
| Брин Ллевеллин (Bryn Llewellyn) | 
| Брюс Момджян (Bruce Momjian) | 
| Бхарат Рупиредди (Bharath Rupireddy) | 
| Вайшнави Прабакаран (Vaishnavi Prabakaran) | 
| Валантен Гасьен-Барон (Valentin Gatien-Baron) | 
| Ван Шеньхао (Wang Shenhao) | 
| Вигнеш Си (Vignesh C) | 
| Вик Фиринг (Vik Fearing) | 
| Виктор Вагнер (Victor Wagner) | 
| Виктор Егоров (Victor Yegorov) | 
| Виталий Устинов (Vitaly Ustinov) | 
| Владимир Ситников (Vladimir Sitnikov) | 
| Вольфганг Вальтер (Wolfgang Walther) | 
| Вэй Ван (Wei Wang) | 
| Вэньцзин Цзэн (Wenjing Zeng) | 
| Вячеслав Шаблистый (Vyacheslav Shablistyy) | 
| Гай Бёрджесс (Guy Burgess) | 
| Гайрен Хау (Guyren Howe) | 
| Георгиос Коколатос (Georgios Kokolatos) | 
| Гийом Леларж (Guillaume Lelarge) | 
| Грег Нанкарроу (Greg Nancarrow) | 
| Грег Рыхлевски (Greg Rychlewski) | 
| Грег Сабино Маллейн (Greg Sabino Mullane) | 
| Грегори Смит (Gregory Smith) | 
| Григорий Смолкин (Grigory Smolkin) | 
| Давид Гайер (David Geier) | 
| Давид Туронь (David Turon) | 
| Давид Феттер (David Fetter) | 
| Дагфинн Ильмари Маннсакер (Dagfinn Ilmari Mannsåker) | 
| Дайан Фей (Dian Fay) | 
| Дана Бёрд (Dana Burd) | 
| Даниель Вестерман (Daniel Westermann) | 
| Даниил Черний (Daniel Cherniy) | 
| Даниэле Вараццо (Daniele Varrazzo) | 
| Даниэль Верите (Daniel Vérité) | 
| Даниэль Густафссон (Daniel Gustafsson) | 
| Данкан Сэндс (Duncan Sands) | 
| Дар Альатар-Йемен (Dar Alathar-Yemen) | 
| Дейв Крамер (Dave Cramer) | 
| Денис Патрон (Denis Patron) | 
| Джастин Призби (Justin Pryzby) | 
| Джейкоб Чемпион (Jacob Champion) | 
| Джеймс Информ (James Inform) | 
| Джеймс Коулман (James Coleman) | 
| Джеймс Хантер (James Hunter) | 
| Джеймс Хиллиард (James Hilliard) | 
| Джейсен Беттс (Jasen Betts) | 
| Джейсон Ким (Jason Kim) | 
| Джейсон Харви (Jason Harvey) | 
| Джереми Смит (Jeremy Smith) | 
| Джереми Финцель (Jeremy Finzel) | 
| Джереми Эванс (Jeremy Evans) | 
| Джесси Кинкед (Jesse Kinkead) | 
| Джесси Чжан (Jesse Zhang) | 
| Джефф Девис (Jeff Davis) | 
| Джефф Джейнс (Jeff Janes) | 
| Джи Чжан (Jie Zhang) | 
| Дживан Ладхе (Jeevan Ladhe) | 
| Джим Доти (Jim Doty) | 
| Джим Нэсби (Jim Nasby) | 
| Джимми Анджелакос (Jimmy Angelakos) | 
| Джимми Йи (Jimmy Yih) | 
| Джо Конвей (Joe Conway) | 
| Джон Нейлор (John Naylor) | 
| Джон Томпсон (John Thompson) | 
| Джонатан С Кац (Jonathan S. Katz) | 
| Джош Беркус (Josh Berkus) | 
| Джоэл Джейкобсон (Joel Jacobson) | 
| Дилип Кумар (Dilip Kumar) | 
| Димитри Нюшелер (Dimitri Nüscheler) | 
| Дин Рашид (Dean Rasheed) | 
| Дмитрий Долгов (Dmitry Dolgov) | 
| Дмитрий Кузьмин (Dmitriy Kuzmin) | 
| Дмитрий Маракасов (Dmitry Marakasov) | 
| Домагой Смолянович (Domagoj Smoljanovic) | 
| Дон Ук (Dong Wook) | 
| Дорофей Пролесковский (Darafei Praliaskouski) | 
| Дуглас Дул (Douglas Doole) | 
| Дэвид Гилман (David Gilman) | 
| Дэвид Дж. Джонстон (David G. Johnston) | 
| Дэвид Кристенсен (David Christensen) | 
| Дэвид Пиротт (David Pirotte) | 
| Дэвид Роули (David Rowley) | 
| Дэвид Стил (David Steele) | 
| Дэвид Чжан (David Zhang) | 
| Евгений Коньков (Eugen Konkov) | 
| Егор Рогов (Egor Rogov) | 
| Екатерина Кирьянова (Ekaterina Kiryanova) | 
| Елена Индрупская (Elena Indrupskaya) | 
| Жолт Эро (Zsolt Ero) | 
| Жюльен Руо (Julien Rouhaud) | 
| Зигрид Эренрейх (Sigrid Ehrenreich) | 
| Ибрар Ахмед (Ibrar Ahmed) | 
| Израэл Барт (Israel Barth) | 
| Ильдус Курбангалиев (Ildus Kurbangaliev) | 
| Иржи Фейфар (Jiri Fejfar) | 
| Итамар Гафни (Itamar Gafni) | 
| Иэн Барвик (Ian Barwick) | 
| Йелте Феннема (Jelte Fennema) | 
| Йозеф Нахмиас (Joseph Nahmias) | 
| Йозеф Шиманек (Josef Šimánek) | 
| Йоран Хелинг (Yoran Heling) | 
| Кадзутака Ониси (Kazutaka Onishi) | 
| Кайл Кингсбери (Kyle Kingsbury) | 
| Кевин Йип (Kevin Yeap) | 
| Кевин Свит (Kevin Sweet) | 
| Келли Минь (Kelly Min) | 
| Кирк Джемисон (Kirk Jamison) | 
| Константин Книжник (Konstantin Knizhnik) | 
| Кори Хинкер (Corey Huinker) | 
| Кота Миякэ (Kota Miyake) | 
| Кохэй КайГай (Kohei KaiGai) | 
| Крейг Рингер (Craig Ringer) | 
| Крис Вилсон (Chris Wilson) | 
| Кристиан Квест (Christian Quest) | 
| Кристоф Берг (Christoph Berg) | 
| Кристоф Куртуа (Christophe Courtois) | 
| Кунтал Гхош (Kuntal Ghosh) | 
| Кшиштоф Градек (Krzysztof Gradek) | 
| Кэйсукэ Курода (Keisuke Kuroda) | 
| Кэмерон Дэниел (Cameron Daniel) | 
| Кэнсукэ Окамура (Kensuke Okamura) | 
| Кётаро Хоригути (Kyotaro Horiguchi) | 
| Лауренц Альбе (Laurenz Albe) | 
| Ли Дон Ук (Lee Dong Wook) | 
| Ли Япинь (Li Japin) | 
| Лоран Хассон (Laurent Hasson) | 
| Луис Роберто (Luis Roberto) | 
| Лукас Эдер (Lukas Eder) | 
| Лю Хуайлин (Liu Huailing) | 
| Людовик Кути (Ludovic Kuty) | 
| Люк Фламинг (Luc Vlaming) | 
| Ма Лянчжу (Ma Liangzhu) | 
| Магнус Хагандер (Magnus Hagander) | 
| Мадан Кумар (Madan Kumar) | 
| Майкл Браун (Michael Brown) | 
| Майкл Вастола (Michael Vastola) | 
| Майкл Пауэрс (Michael Powers) | 
| Максим Милютин (Maksim Milyutin) | 
| Максим Орлов (Maxim Orlov) | 
| Марек Шуба (Marek Szuba) | 
| Марина Полякова (Marina Polyakova) | 
| Марио Эмменлауэр (Mario Emmenlauer) | 
| Марк Бурен (Marc Boeren) | 
| Марк Вон (Mark Wong) | 
| Марк Дилгер (Mark Dilger) | 
| Марк Жао (Mark Zhao) | 
| Марко Атзери (Marco Atzeri) | 
| Маркус Ваннер (Markus Wanner) | 
| Мартин Виссер (Martin Visser) | 
| Мартин Маркес (Martín Marqués) | 
| Марцин Крупович (Marcin Krupowicz) | 
| Масао Фудзии (Masao Fujii) | 
| Масахико Савада (Masahiko Sawada) | 
| Масахиро Икеда (Masahiro Ikeda) | 
| Матис Рудольф (Mathis Rudolf) | 
| Маттейс ван дер Влётен (Matthijs van der Vleuten) | 
| Маттиас ван де Меент (Matthias van de Meent) | 
| Матье Гарриг (Matthieu Garrigues) | 
| Махендра Сингх Талор (Mahendra Singh Thalor) | 
| Мачик Сакрейда (Maciek Sakrejda) | 
| Мелани Плейгман (Melanie Plageman) | 
| Мерлин Монкьюр (Merlin Moncure) | 
| Микаэль Густавссон (Mikael Gustavsson) | 
| Микаэль Пакье (Michael Paquier) | 
| Михаил Николаев (Michail Nikolaev) | 
| Михаль Альбрехт (Michal Albrycht) | 
| Михаэль Банк (Michael Banck) | 
| Михаэль Мескес (Michael Meskes) | 
| Мишель Поль Киллиан (Michael Paul Killian) | 
| Мувад Ли (Movead Li) | 
| Мухаммед Усама (Muhammad Usama) | 
| Нагарадж Радж (Nagaraj Raj) | 
| Назлы Уур Кёйлюоглу (Nazli Ugur Koyluoglu) | 
| Наоки Накамити (Naoki Nakamichi) | 
| Натан Боссарт (Nathan Bossart) | 
| Натан Лонг (Nathan Long) | 
| Нейл Чен (Neil Chen) | 
| Неха Шарма (Neha Sharma) | 
| Ник Клитон (Nick Cleaton) | 
| Никита Глухов (Nikita Glukhov) | 
| Никита Конев (Nikita Konev) | 
| Нико Вильямс (Nico Williams) | 
| Николай Беркофф (Nikolai Berkoff) | 
| Николай Самохвалов (Nikolay Samokhvalov) | 
| Николай Шаплов (Nikolay Shaplov) | 
| Никхил Бенеш (Nikhil Benesch) | 
| Никхил Сонтакке (Nikhil Sontakke) | 
| Нитин Ядав (Nitin Jadhav) | 
| Ной Миш (Noah Misch) | 
| Нориёси Синода (Noriyoshi Shinoda) | 
| Один Угедал (Odin Ugedal) | 
| Олег Бартунов (Oleg Bartunov) | 
| Олег Самойлов (Oleg Samoilov) | 
| Ондер Каладжи (Önder Kalaci) | 
| Паван Деоласи (Pavan Deolasee) | 
| Павел Боев (Pavel Boev) | 
| Павел Борисов (Pavel Borisov) | 
| Павел Лузанов (Pavel Luzanov) | 
| Павел Сиваш (Paul Sivash) | 
| Павел Стехуле (Pavel Stehule) | 
| Паскаль Легран (Pascal Legrand) | 
| Пауль Фёрстер (Paul Förster) | 
| Петр Желинек (Petr Jelínek) | 
| Питер Вандивье (Peter Vandivier) | 
| Питер Гейган (Peter Geoghegan) | 
| Питер Смит (Peter Smith) | 
| Питер Эйзентраут (Peter Eisentraut) | 
| Пол Гуо (Paul Guo) | 
| Пол Мартинес (Paul Martinez) | 
| Пол Юнгвирт (Paul Jungwirth) | 
| Прабхат Саху (Prabhat Sahu) | 
| Пьер Жиро (Pierre Giraud) | 
| Пэнчэн Лю (Pengcheng Liu) | 
| Пётр Фёдоров (Petr Fedorov) | 
| Раджкумар Рагхуванши (Rajkumar Raghuwanshi) | 
| Райан Ламберт (Ryan Lambert) | 
| Ранье Вилела (Ranier Vilela) | 
| Рафи Шамим (Rafi Shamim) | 
| Рахила Сьед (Rahila Syed) | 
| Регина Обе (Regina Obe) | 
| Реми Лапейр (Rémi Lapeyre) | 
| Роберт Гранж (Robert Grange) | 
| Роберт Калерт (Robert Kahlert) | 
| Роберт Сосински (Robert Sosinski) | 
| Роберт Трит (Robert Treat) | 
| Роберт Фоджа (Robert Foggia) | 
| Роберт Хаас (Robert Haas) | 
| Робин Абби (Robin Abbi) | 
| Робинс Таракан (Robins Tharakan) | 
| Роджер Мейсон (Roger Mason) | 
| Роман Жарков (Roman Zharkov) | 
| Рон Л. Джонсон (Ron L. Johnson) | 
| Ронан Данклау (Ronan Dunklau) | 
| Рохит Бхогате (Rohit Bhogate) | 
| Рё Мацумура (Ryo Matsumura) | 
| Саид Хубайшан (Saeed Hubaishan) | 
| Саит Талха Нишанджы (Sait Talha Nisanci) | 
| Саймон Риггс (Simon Riggs) | 
| Сандро Мани (Sandro Mani) | 
| Сантош Удупи (Santosh Udupi) | 
| Свен Клемм (Sven Klemm) | 
| Сергей Берников (Sergey Bernikov) | 
| Сергей Зубковский (Sergey Zubkovsky) | 
| Сергей Копосов (Sergey Koposov) | 
| Сергей Корнилов (Sergei Kornilov) | 
| Сергей Черкашин (Sergey Cherkashin) | 
| Сергей Шиндерук (Sergey Shinderuk) | 
| Сероп Саркуни (Sehrope Sarkuni) | 
| Симон Норрис (Simon Norris) | 
| Синъя Като (Shinya Kato) | 
| Синъя Окано (Shinya Okano) | 
| Скотт Райб (Scott Ribe) | 
| Соумйадип Чакраборти (Soumyadeep Chakraborty) | 
| Софоклис Папасофокли (Sofoklis Papasofokli) | 
| Стас Кельвич (Stas Kelvich) | 
| Стефан Лорек (Stéphane Lorek) | 
| Стивен Винфилд (Steven Winfield) | 
| Стивен Фрост (Stephen Frost) | 
| Сурадж Хараге (Suraj Kharage) | 
| Сурафел Темесген (Surafel Temesgen) | 
| Такамити Осуми (Takamichi Osumi) | 
| Такаси Мэндзё (Takashi Menjo) | 
| Такаюки Цунакава (Takayuki Tsunakawa) | 
| Тан Хайин (Tang Haiying) | 
| Тацуо Исии (Tatsuo Ishii) | 
| Тацуро Ямада (Tatsuro Yamada) | 
| Тацухито Касахара (Tatsuhito Kasahara) | 
| Тейс ван Дам (Tijs van Dam) | 
| Теодор-Арсений Ларионов-Тришкин (Theodor Arsenij Larionov-Trichkin) | 
| Том Вейлбриф (Tom Vijlbrief) | 
| Том Готтфрид (Tom Gottfried) | 
| Том Лейн (Tom Lane) | 
| Том Эллис (Tom Ellis) | 
| Томас Бартон (Tomas Barton) | 
| Томас Келлерер (Thomas Kellerer) | 
| Томас Манро (Thomas Munro) | 
| Томас Тренц (Thomas Trenz) | 
| Томаш Вондра (Tomas Vondra) | 
| Томохиро Хирамицу (Tomohiro Hiramitsu) | 
| Тони Ре (Tony Reix) | 
| Уэллс Оливер (Wells Oliver) | 
| Фабрицио де Ройес Мелло (Fabrízio de Royes Mello) | 
| Фабьен Коэльо (Fabien Coelho) | 
| Федерико Казелли (Federico Caselli) | 
| Феликс Лехнер (Felix Lechner) | 
| Фил Крылов (Phil Krylov) | 
| Филипп Бодуэн (Philippe Beaudoin) | 
| Филипп Господинов (Filip Gospodinov) | 
| Филипп Грамцов (Philipp Gramzow) | 
| Филипп Менке (Phillip Menke) | 
| Флорис Ван Ни (Floris Van Nee) | 
| Франк Ганьепен (Frank Gagnepain) | 
| Фриц Ялвинг (Frits Jalvingh) | 
| Хайато Курода (Hayato Kuroda) | 
| Хайин Тан (Haiying Tang) | 
| Хайме Казанова (Jaime Casanova) | 
| Хайме Солер (Jaime Soler) | 
| Хамид Ахтар (Hamid Akhtar) | 
| Ханс Бушман (Hans Buschmann) | 
| Хао Ву (Hao Wu) | 
| Харибабу Комми (Haribabu Kommi) | 
| Харисаи Хари (Harisai Hari) | 
| Хейкки Линнакангас (Heikki Linnakangas) | 
| Хенри Хинце (Henry Hinze) | 
| Хервиг Геманс (Herwig Goemans) | 
| Химаншу Упадхьяя (Himanshu Upadhyaya) | 
| Хиронобу Судзуки (Hironobu Suzuki) | 
| Хироси Иноуэ (Hiroshi Inoue) | 
| Хисанори Кобаяси (Hisanori Kobayashi) | 
| Хит Лорд (Heath Lord) | 
| Хонза Хорак (Honza Horak) | 
| Хоу Чжицзе (Hou Zhijie) | 
| Хуан Хосе Сантамария Флеча (Juan José Santamaría Flecha) | 
| Хуберт Любачевски (Hubert Lubaczewski) | 
| Хуберт Чжан (Hubert Zhang) | 
| Цзюньфэн Ян (Junfeng Yang) | 
| Цюань Цзунлян (Quan Zongliang) | 
| Чарли Хорнсби (Charlie Hornsby) | 
| Чарльз Самборски (Charles Samborski) | 
| Чен Цзяоцянь (Chen Jiaoqian) | 
| Чепмен Флэк (Chapman Flack) | 
| Чжихун Юй (Zhihong Yu) | 
| Чжиюн Ву (Zhiyong Wu) | 
| Ши Юй (Shi Yu) | 
| Шон Ван (Shawn Wang) | 
| Штефан Шпрингль (Stephan Springl) | 
| Шэй Роджански (Shay Rojansky) | 
| Эдмунд Хорнер (Edmund Horner) | 
| Эдсон Рихтер (Edson Richter) | 
| Эйлер Тавейра (Euler Taveira) | 
| Эмил Иггланд (Emil Iggland) | 
| Эмре Хасегели (Emre Hasegeli) | 
| Энди Фан (Andy Fan) | 
| Эндрю Гирт (Andrew Gierth) | 
| Эндрю Дунстан (Andrew Dunstan) | 
| Эрвин Брандштеттер (Erwin Brandstetter) | 
| Эрик Рижкерс (Erik Rijkers) | 
| Эрик Тиннес (Eric Thinnes) | 
| Этьен Сталманс (Etienne Stalmans) | 
| Эцуро Фудзита (Etsuro Fujita) | 
| Юго Нагата (Yugo Nagata) | 
| Юзуко Хосоя (Yuzuko Hosoya) | 
| Юйкунь Ван (Yukun Wang) | 
| Юки Сэйно (Yuki Seino) | 
| Юлинь Пей (Yulin Pei) | 
| Юрген Пуртц (Jürgen Purtz) | 
| Юрий Соколов (Yura Sokolov) | 
| Юта Кацураги (Yuta Katsuragi) | 
| Юта Кондо (Yuta Kondo) | 
| Якуб Вартак (Jakub Wartak) | 
| Ян Линь (Yang Lin) | 
| Ян Мусслер (Jan Mussler) | 
| ЯнгХван Чу (YoungHwan Joo) | 
| Яньлян Лэй (Yanliang Lei) | 
| Яогуан Чэнь (Yaoguang Chen) | 
| Япинь Ли (Japin Li) | 
| Ярослав Пашинский (Yaroslav Pashinsky) | 
| Ярослав Щёкин (Yaroslav Schekin) | 
| Ясуси Ямасита (Yasushi Yamashita) |