E.41. Выпуск 15
Дата выпуска: 2022-10-13
E.41.1. Обзор
PostgreSQL 15 содержит много новых возможностей и улучшений, в том числе:
Поддержка SQL-команды
MERGE.Выборочная публикация содержимого таблицы в рамках логической репликации с возможностью указывать списки столбцов и фильтры строк.
Больше возможностей для использования сжатия и поддержка сжатия Zstandard (zstd). В том числе реализована возможность сжатия на стороне сервера при создании копии с помощью pg_basebackup.
Поддержка структурированного вывода журнала сервера в формате JSON.
Улучшения производительности, в частности, оптимизация операций сортировки в памяти и на диске.
Предыдущие пункты и другие новые возможности PostgreSQL 15 более подробно описаны в следующих разделах.
E.41.2. Миграция на версию 15
Тем, кто хочет перенести данные из любой предыдущей версии, необходимо выполнить выгрузку/восстановление данных с помощью pg_dumpall либо использовать pg_upgrade или логическую репликацию. Общую информацию о переходе на более новую основную версию можно найти в Разделе 17.6.
В версии 15 реализован ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Рассмотрите следующие несовместимые аспекты:
Лишение роли
PUBLICправа создания объектов в схемеpublic(Ной Миш) §По умолчанию теперь применяется один из шаблонов безопасного использования схем, который рекомендуется в Подраздел 5.9.6 с выпуска, посвящённого устранению CVE-2018-1058. Это изменение распространяется на новые кластеры и на новые базы, которые будут создаваться в существующих кластерах. При обновлении кластера или восстановлении выгруженной ранее копии для схемы
publicсохранятся предыдущие разрешения.Для существующих баз данных, особенно для баз со многими пользователями, имеет смысл лишить пользователей права
CREATEв схемеpublicи тем самым перейти к принятому теперь по умолчанию шаблону использования. Для новых баз данных, которые не нужно защищать от внутренних пользователей, предоставление праваCREATEпозволяет получить поведение, принятое в предыдущих версиях.Назначение владельцем схемы
publicнововведённой ролиpg_database_owner(Ной Миш) §Благодаря этому каждый владелец базы данных будет иметь права владельца схемы
publicв своей базе. Ранее ей владел пользователь, выполнявший начальную инициализацию, и пользователи-владельцы баз данных, не имеющие прав суперпользователя, не могли ничего с этим сделать.Это изменение распространяется на новые кластеры и на новые базы, которые будут создаваться в существующих кластерах. При обновлении кластера или восстановлении выгруженной ранее копии владелец схемы
publicостанется прежним.Удаление монопольного режима копирования, который давно был признан устаревшим (Дэвид Стил, Натан Боссарт) §
Ранее сервер мог не запуститься в случае аварийного прерывания работы в этом режиме. Немонопольный режим признан более подходящим для любого применения. Функции
pg_start_backup()/pg_stop_backup()переименованы вpg_backup_start()/pg_backup_stop(), а функцииpg_backup_start_time()иpg_is_in_backup()удалены.Увеличение значения параметра
hash_mem_multiplierпо умолчанию до 2.0 (Питер Гейган) §Благодаря этому операции хеширования в запросах смогут использовать больший объём
work_mem, чем другие операции.Удаление серверного языка
plpython2uи языкаplpythonu, не привязанного к версии Python (Андрес Фройнд) §Python 2.x более не поддерживается. Хотя изначально предполагалось, что
plpythonuв конце концов может стать псевдонимом дляplpython3u, подобное изменение скорее всего создаст больше проблем, чем решит, поэтому это наименование было просто удалено.Недопущение пустых строк в передаваемом функции
array_to_tsvector()массиве (Жан-Кристоф Арну) §Теперь эта функция будет выдавать ошибку, так как лексемы не должны быть пустыми. Пользователям предыдущих версий Postgres следует проверить, что в существующих данных нет пустых лексем, так как при их наличии возможны несогласованные результаты или проблемы при выгрузке/восстановлении.
Выдача ошибки при вызове функции
chr()с отрицательным аргументом (Питер Эйзентраут) §Недопущение изменения правила сортировки выходного столбца в
CREATE OR REPLACE VIEW(Том Лейн) §Недопущение идентификаторов Unicode нулевой длины, например
U&""(Питер Эйзентраут) §Идентификаторы нулевой длины не в Unicode не допускались и до этого.
Запрещение числовых констант, оканчивающихся нецифровыми символами (Питер Эйзентраут) §
Ранее текст вида
123abcв запросе воспринимался как число123, за которым следует отдельный компонент запросаabc.Приведение обработки числовых констант в JSON в соответствие стандарту SQL/JSON (Питер Эйзентраут) §
Теперь принимаются числовые форматы
.1и1., но не допускается лишнее содержимое после числа, например1.type().Округление вводимых в тип
intervalдробных значений, заданных в единицах больше месяца, до ближайшего месяца (Брюс Момджян) §Например, значение
1.99 yearsбудет преобразовано в2 years(2 года), а не1 year 11 months(1 год 11 месяцев), как раньше.Реализация более согласованного разбора значений
intervalс точками в конце (Том Лейн) §Числа с точками в конце ранее не допускались на некоторых платформах.
Присвоение функции вывода
intervalхарактеристики стабильной, но не постоянной, так как она зависит от значенияIntervalStyle(Том Лейн) §Вследствие этого теперь, например, нельзя будет создать индексы, зависящие от значений
intervalв текстовом виде.Выявление целочисленного переполнения в функциях выравнивания интервала (Джозеф Кошаков) §
Это изменение затронуло функции
justify_interval(),justify_hours()иjustify_days().Изменение формата ввода-вывода типа
"char"для не ASCII-символов (Том Лейн) §Теперь во избежание проблем с кодировками байты с установленным старшим битом выводятся как три восьмеричных цифры после обратной косой черты.
Лишение ролей подразумеваемого по умолчанию права
ADMIN OPTION, которое они имели для собственной роли (Роберт Хаас) §Ранее роль с правом входа могла добавлять/удалять членов собственной роли, даже не имея права
ADMIN OPTION.Выполнение процесса логической репликации от имени владельца подписки (Марк Дилгер) §
Так как политики защиты на уровне строк при репликации не проверяются, реплицировать данные в таблицы с защитой на уровне строк могут только суперпользователи, роли со свойством
bypassrlsи владельцы таблиц.Предотвращение при логической репликации операций
UPDATEиDELETEс таблицами, для которых владелец подписки не имеет праваSELECT(Джефф Дэвис) §Команды
UPDATEиDELETEобычно подразумевают и чтение таблицы, поэтому владелец подписки должен иметь правоSELECTдля таблицы.Обозначение схемы временных объектов сеанса в выводе
EXPLAINпсевдонимомpg_temp(Амул Сул) §Ранее выводилось имя фактически используемой схемы, так что в разных сеансах наблюдались разные имена.
Обеспечение консолидирования значений в
pg_statio_all_tablesв редком случае наличия нескольких индексов у одной таблицы TOAST (Андрей Зубков) §Ранее в таких случаях для каждого индекса появлялась отдельная запись.
Запрет присваивания значений нестандартным параметрам, у которых префикс имени совпадает с префиксами имён установленных расширений, но при этом данные параметры не являются объявленными переменными расширения (Флорин Ирион, Том Лейн) § § §
В результате этого изменения все такие предварительно заданные переменные будут удаляться при загрузке расширения, и создать новые в этом же сеансе будет нельзя. Это должно исключить неопределённость в вопросе, связана ли переменная с расширением или нет.
Удаление устаревшей серверной переменной
stats_temp_directory(Андрес Фройнд, Кётаро Хоригути) §Улучшение алгоритма, используемого для вычисления
random()(Фабьен Коэльо) § §Как следствие, при тех же значениях затравки
random()теперь будет выдавать результаты, отличающиеся от выдаваемых в предыдущих версиях.Функция libpq
PQsendQuery()более не поддерживается в конвейерном режиме (Альваро Эррера) §В приложениях, использующих её в этом режиме, нужно перейти к использованию
PQsendQueryParams().Реализация определения домашнего каталога пользователя на платформах, отличных от Windows, по значению переменной окружения
HOME(Андерс Касеорг) §Если переменная
HOMEне установлена или содержит пустую строку, задействуется предыдущий метод определения — проверяется база данных<pwd.h>. Это изменение затрагивает библиотеку libpq (в частности, в домашнем каталоге она ищет файл~/.pgpass), а также различные клиентские приложения.Ликвидация параметра pg_dump
--no-synchronized-snapshots(Том Лейн) §Все поддерживаемые сейчас версии сервера способны выдавать синхронные снимки, поэтому данный параметр больше не нужен.
Замена окончательной команды
COMMITнаROLLBACKв случае возникновения ошибки в режиме psql--single-transactionтолько при установленном параметреON_ERROR_STOP(Микаэль Пакье) §Исключение ненужных приведений констант в запросах, которые передаёт postgres_fdw (Дайан Фей) §
Когда типы столбцов в локальной и удалённой базе в соответствии с ожиданиями различались, приведения констант могли вызывать ошибки.
Удаление функции
xml_is_well_formed()из xml2 (Том Лейн) §Одноимённая функция была реализована в коде ядра в Postgres 9.1.
Наделение провайдеров нестандартного сканирования возможностью обозначать поддержку проекций (Свен Клемм) §
Теперь по умолчанию считается, что провайдеры нестандартного сканирования не поддерживают проекции; те же, что действительно поддерживают, для данной версии должны быть обновлены.
E.41.3. Изменения
Ниже вы найдёте подробный список изменений, произошедших между предыдущим основным выпуском и выпуском PostgreSQL 15.
E.41.3.1. Сервер
Сохранение и проверка версии правила сортировки для каждой базы данных (Питер Эйзентраут) §
Контроль версий правил сортировки предназначен для выявления изменения версий и предотвращения повреждения индексов. Версию правила сортировки в ОС позволяет узнать функция
pg_database_collation_actual_version(), а привести версию, записанную в БД, в соответствие с версией в ОС позволяет командаALTER DATABASE ... REFRESH.Возможность использования правила сортировки ICU в качестве основного для кластеров и баз данных (Питер Эйзентраут) §
Ранее на уровне кластера и базы данных можно было выбирать только правила сортировки на базе libc, а правила сортировки ICU можно было использовать, только указывая их явно в предложениях
COLLATE.Добавление системного представления
pg_ident_file_mappings, выдающего информацию изpg_ident.conf(Жюльен Руо) §
E.41.3.1.1. Секционирование
Ускорение планирования запросов, обращающихся к секционированным таблицам (Дэвид Роули) §
Эффект этого изменения заметен, только когда затрагивается лишь несколько секций из множества.
Возможность упорядоченного сканирования секций, что позволяет избежать сортировки ещё в ряде случаев (Дэвид Роули) §
Ранее наличие в секционированной таблице секции
DEFAULTили секцииLISTсо множеством значений исключало упорядоченное сканирование секций. Теперь упорядоченное сканирование возможно, если такие секции устраняются во время планирования.Улучшение поведения внешнего ключа при изменениях в секционированной таблице, при которых строки перемещаются между секциями (Амит Ланготе) §
Ранее при таких изменениях выполнялось действие удаления строки в исходной секции и действие добавления в целевой секции. Теперь PostgreSQL будет выполнять действие изменения для корневой секции, что правильнее по смыслу.
Поддержка выполнения
CLUSTERв секционированных таблицах (Джастин Призби) § §Исправление в
ALTER TRIGGER RENAMEпереименования триггеров во всех секциях секционированных таблиц (Арне Роланд, Альваро Эррера) §Также теперь не будут переименовываться скопированные триггеры.
E.41.3.1.2. Индексы
Обеспечение эффективного хранения дублирующихся значений в индексах btree системных таблиц и TOAST-таблиц (Питер Эйзентраут) §
Ранее в таких индексах исключение дубликатов не работало.
Улучшение производительности индексов GiST, которые были построены методом сортировки (Александр Каленик, Сергей Шулбаков, Андрей Бородин) §
Обеспечение возможности обрабатывать
NULLв уникальных ограничениях и индексах как равные значения (Питер Эйзентраут) §Ранее значения
NULLвсегда обрабатывались как различные, но теперь это можно изменить, создавая ограничения и индексы с указаниемUNIQUE NULLS NOT DISTINCT.Поддержка использования оператора
^@(«начинается с») и функцииstarts_with()в индексах btree с правилом сортировки C (Том Лейн) §Ранее эти конструкции можно было использовать только в индексах SP-GiST.
E.41.3.1.3. Оптимизатор
Возможность сохранения в расширенной статистике данных по родительскому отношению со всеми его потомками (Томаш Вондра, Джастин Призби) §
В обычной статистике данные только родительской таблицы и консолидированные данные, охватывающие и все дочерние таблицы, хранились отдельно и ранее.
Добавление серверного параметра
recursive_worktable_factor, позволяющего задать ожидаемый размер рабочей таблицы для рекурсивных запросов (Саймон Риггс) §
E.41.3.1.4. Общая производительность
Возможность использования поиска по хешу при обработке предложений
NOT INсо множеством констант (Дэвид Роули, Джеймс Коулман) §Ранее список значений всегда сканировался последовательно.
Возможность параллельного выполнения
SELECT DISTINCT(Дэвид Роули) §Ускорение проверки корректности текста UTF-8 за счёт обработки 16 байт за раз (Джон Нейлор, Хейкки Линнакангас) §
Это ускоряет операции обработки текстов в большом объёме, например
COPY FROM.Оптимизация производительности операций сортировки, для которых недостаточно объёма
work_mem(Хейкки Линнакангас) § §Когда сортируемые данные перестают помещаться в объём
work_mem, теперь применяется алгоритм пакетной сортировки, использующий больше выходных потоков, чем раньше.Улучшение производительности операций сортировки в памяти и уменьшение требующегося для них объёма ОЗУ (Ронан Данклау, Дэвид Роули, Томас Манро, Джон Нейлор) § § §
Возможность сжатия полных страниц в WAL методами LZ4 и Zstandard (Андрей Бородин, Джастин Призби) § §
Для выбора алгоритма сжатия предназначен серверный параметр
wal_compression.Добавление в macOS поддержки записи WAL в режиме прямого ввода-вывода (Томас Манро) §
Этот механизм задействуется, только если
max_wal_senders = 0иwal_level = minimal.Реализация более агрессивного выбора идентификаторов старейшей замороженной транзакции и мультитранзакции в процессе очистки (Питер Эйзентраут) §
Расширение возможности применения параллельного сканирования сторонней таблицы при выполнении запроса, обращающегося к нескольким сторонним таблицам (Андрей Лепихов, Эцуро Фудзита) §
Оптимизация выполнения запросов с оконными функциями, где используются
row_number(),rank(),dense_rank()иcount()(Дэвид Роули) §Улучшение производительности циклических блокировок в многоядерных системах ARM64 (Джеффри Блейк) §
E.41.3.1.5. Мониторинг
Включение по умолчанию протоколирования контрольных точек и медленных операций автоочистки (Бхарат Рупиредди) §
Теперь параметр
log_checkpointsпо умолчанию включён (on), а значениеlog_autovacuum_min_durationравно 10 минутам. При этом даже простаивающий сервер будет выдавать записи в журнал, что может создать проблемы на серверах с ограниченными ресурсами, если ротация файлов журналов не производится. В таких случаях эти параметры следует изменить.Вывод в журнал сообщений о текущих действиях во время длительного запуска сервера (Нитин Ядав, Роберт Хаас) § §
Эти сообщения будут содержать информацию о причине задержки. Интервал этих уведомлений задаётся в новой серверной переменной
log_startup_progress_interval.Сохранение данных накопительной статистики в общей памяти (Кётаро Хоригути, Андрес Фройнд, Мелани Плейгман) § §
Ранее эти данные передавались процессу сборщика статистики UDP-пакетами и могли быть прочитаны сеансами только после сохранения в файловой системе. В результате изменения отдельный процесс сборщика статистики был упразднён.
Добавление дополнительной информации в сообщения, выводимые командой
VACUUM VERBOSEи процессом автоочистки (Питер Гейган) §§§Добавление в
EXPLAIN (BUFFERS)информации о вводе-выводе блоков временных файлов (Масахико Савада) §Реализация вывода журнала в формате JSON (Сероп Саркуни, Микаэль Пакье) §
Выбирает такой формат значение
log_destination = jsonlog.Добавление в
pg_stat_reset_single_table_counters()возможности сбрасывать счётчики для отношений, разделяемых всеми базами данных (Садхупрасад Патро) §Добавление событий ожидания для локальных команд оболочки (Фудзии Масао) §
Новые события ожидания используются, когда вызываются команды
archive_command,archive_cleanup_command,restore_commandиrecovery_end_command.
E.41.3.1.6. Права
Возможность ограничивать доступ к представлению на основании прав обращающегося к нему пользователя (Кристоф Хейсс) §
Ранее при обращении к представлению всегда проверялись права владельца представления. Этот порядок и теперь действует по умолчанию.
Предоставление членам предопределённой роли
pg_write_server_filesвозможности выполнять базовое резервное копирование на стороне сервера (Дагфинн Ильмари Маннсакер) §Ранее такое копирование могли выполнять только суперпользователи.
Возможность предоставлять пользователям (
GRANT) право изменения отдельных серверных переменных командамиSETиALTER SYSTEM(Марк Дилгер) § §Информацию о наличии этого права выдаёт новая функция
has_parameter_privilege().Добавление предопределённой роли
pg_checkpoint, членам которой разрешено выполнять командуCHECKPOINT(Джефф Девис) § §Ранее процедуру контрольной точки могли запускать только суперпользователи.
Предоставление членам предопределённой роли
pg_read_all_statsдоступа к представлениямpg_backend_memory_contextsиpg_shmem_allocations(Бхарат Рупиредди) §Ранее к этим представлениям могли обращаться только суперпользователи.
Возможность предоставления прав (
GRANT) для использованияpg_log_backend_memory_contexts()(Джефф Девис) §Ранее эту функцию могли вызывать только суперпользователи.
E.41.3.1.7. Конфигурация сервера
Добавление серверной переменной
shared_memory_size, показывающей размер выделенной общей памяти (Натан Боссарт) § §Добавление серверной переменной
shared_memory_size_in_huge_pages, показывающей требуемое количество огромных страниц (Натан Боссарт) § §Эта переменная функционирует только в Linux.
Обработка значения серверной переменной
shared_preload_librariesв однопользовательском режиме (Джефф Дэвис) §В результате этого изменения поддерживается загрузка в
shared_preload_librariesбиблиотек пользовательских методов доступа и менеджеров ресурсов WAL, что может быть необходимо для доступа к базе данных даже в однопользовательском режиме.Выбор в ОС Solaris для
dynamic_shared_memory_typeпо умолчанию значенияsysv(Томас Манро) §С типом
posix, выбираемым по умолчанию ранее, на этой платформе могли происходить разнообразные сбои.Исправление выводимых командой
postgres -Cзначений переменных, которые вычисляются во время выполнения (Натан Боссарт) §Ранее для вычисляемых во время выполнения переменных
data_checksums,wal_segment_sizeиdata_directory_modeвыдавались значения, не в точности отражающие состояние работающего сервера. Однако эта команда не работает, когда сервер запущен.
E.41.3.2. Потоковая репликация и восстановление
Добавление поддержки сжатия LZ4 и Zstandard для базовых копий на стороне сервера (Дживан Ладхе, Роберт Хаас) § § §
Запуск процесса контрольных точек и процесса фоновой записи во время восстановления после сбоя (Томас Манро) §
Это помогает ускорить длительное восстановление после сбоя.
Возможность предвыборки блоков файлов, которые вскоре потребуются, при обработке WAL(Томас Манро) §
Этим механизмом управляет серверная переменная
recovery_prefetch.Возможность архивирования с применением загружаемых модулей (Натан Боссарт) §
Ранее архивирование было возможно только с использованием команд оболочки. Для определения библиотеки функций, которые будут вызываться для архивирования, предназначена новая серверная переменная
archive_library.Устранение требования выполнять
IDENTIFY_SYSTEMпередSTART_REPLICATION(Джефф Девис) §
E.41.3.2.1. Логическая репликация
Реализация возможности публиковать все таблицы в схеме (Вигнеш Си, Хоу Чжицзе, Амит Капила) § § §
Например, теперь поддерживается синтаксис:
CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s1,s2. Подобный синтаксис поддерживает иALTER PUBLICATION. Таблицы, которые будут добавлены в перечисленные схемы позднее, также будут реплицироваться.Возможность фильтрации содержимого публикации с использованием предложения
WHERE(Хоу Чжицзе, Эйлер Тавейра, Питер Смит, Аджин Чериан, Томаш Вондра, Амит Капила) § § §Строки, не удовлетворяющие условию
WHERE, не будут публиковаться.Возможность ограничения содержимого публикаций определёнными столбцами (Томаш Вондра, Альваро Эррера, Рахила Сьед) §
Добавление конструкции
ALTER SUBSCRIPTION ... SKIP, позволяющей пропускать транзакции на стороне подписчика (Масахико Савада) §Добавление поддержки подготовленных (двухфазных) транзакций в реализацию логической репликации (Питер Смит, Аджин Чериан, Амит Капила, Никхил Сонтакке, Стас Кельвич) § §
Новый параметр команды
CREATE_REPLICATION_SLOTназываетсяTWO_PHASE. Теперь pg_recvlogical при создании слота принимает новый ключ--two-phase.Предотвращение логической репликации пустых транзакций (Аджин Чериан, Хоу Чжицзе, Эйлер Тавейра) §
Ранее подписчикам передавались пустые транзакции, если содержимое таблиц в подписке не менялось.
Добавление функций уровня SQL для наблюдения за содержимым каталогов слотов логической репликации (Бхарат Рупиредди) §
Новые функции:
pg_ls_logicalsnapdir(),pg_ls_logicalmapdir()иpg_ls_replslotdir(). Вызывать их разрешено членам предопределённой ролиpg_monitor.Предоставление подписчикам возможности остановить применение изменений логической репликации в случае ошибки (Такамити Осуми, Марк Дилгер) §
Это поведение включается на стороне подписчика параметром
disable_on_errorи позволяет избежать бесконечного зацикливания при ошибке в процессе применения потока изменений.Приведение серверных переменных на стороне подписчика в соответствие со стороной публикации, чтобы значения даты/времени и типа float8 воспринимались согласованно (Япинь Ли) §
Не исключено, что некоторые публикации зависят от прежнего несогласованного поведения.
Добавление системного представления
pg_stat_subscription_statsс информацией об активности подписчика (Масахико Савада) § §Сбросить соответствующие счётчики статистики позволяет новая функция
pg_stat_reset_subscription_stats().Подавление дублирующихся записей в системном представлении
pg_publication_tables(Хоу Чжицзе) §В некоторых случаях секция таблицы могла выводиться в нём неоднократно.
E.41.3.3. Служебные команды
Добавление SQL-команды
MERGE, позволяющей привести одну таблицу в соответствие другой (Саймон Риггс, Паван Деоласи, Альваро Эррера, Амит Ланготе) §Эта команда подобна конструкции
INSERT ... ON CONFLICT, но больше подходит для массовой обработки данных.Добавление поддержки параметра
HEADERдля текстового формата командыCOPY(Реми Лапейр) § §С новым параметром имена столбцов будут выводиться, а также могут проверяться при загрузке данных.
Добавление для команды создания базы нового метода с записью WAL (Дилип Кумар) §
Теперь шаблонная база данных копируется по умолчанию этим методом, так как он не требует выполнять контрольные точки во время создания базы. Однако этот метод может быть медленнее, если шаблонная база большая, поэтому сохранён и старый метод.
Возможность указать OID для базы данных в команде
CREATE DATABASE(Шрути Говда, Антонин Хоуска) §Исключение возможных ошибок команд
DROP DATABASE,DROP TABLESPACEиALTER DATABASE SET TABLESPACEпри параллельном использовании в Windows (Томас Манро) §Возможность изменения только определённых столбцов в связанных с внешними ключами действиях
ON DELETE SET(Пол Мартинес) §Ранее такие действия всегда затрагивали все столбцы внешнего ключа.
Добавление в
ALTER TABLEвозможности сменитьACCESS METHOD(Джастин Призби, Джефф Девис) §Добавление вызова обработчика обращения к объекту в случаях, когда при выполнении
ALTER TABLEпроисходит перезапись таблицы (Микаэль Пакье) §Возможность создания нежурналируемых последовательностей (Питер Эйзентраут) §
Отслеживание зависимостей отдельных столбцов в результатах функций, возвращающих составные типы (Том Лейн) §
Ранее, если представление или правило ссылалось на определённый столбец в результате функции, возвращающей составной тип, это не рассматривалось как зависимость; считалось, что представление или правило зависит только от составного типа в целом. Это значит, что можно было удалить отдельный столбец, вследствие чего при дальнейшем использовании представления или правила возникали проблемы. Теперь также записывается зависимость на уровне столбцов, так что удалить столбец будет возможно, только если удалить или изменить представление.
E.41.3.4. Типы данных
Возможность задать для значения
numericмасштаб, превышающий точность или отрицательный (Дин Рашид, Том Лейн) §Это позволяет реализовать округление чисел до позиции левее десятичной точки: например, результатом выражения
'1234'::numeric(4, -2)будет 1200.Усовершенствование обработки переполнения при приведении значений к типу interval (Джозеф Кошаков) §
Изменение формата ввода-вывода типа
"char"для не ASCII-символов (Том Лейн) §Корректировка информации о ширине отображаемых современных символов Unicode, в частности эмодзи (Джейкоб Чемпион) § §
При этом также обновлена версия Unicode с 5.0 до 14.0.0 и разработан автоматический метод синхронизации кода Postgres с новыми версиями Unicode.
E.41.3.5. Функции
Добавление поддержки мультидиапазонных значений в функцию
range_agg()(Пол Юнгвирт) §Реализация агрегатных функций
MIN()иMAX()для типа данныхxid8(Кен Като) §Добавление функций обработки регулярных выражений для совместимости с другими реляционными СУБД (Жиль Даролд, Том Лейн) §
Новые функции:
regexp_count(),regexp_instr(),regexp_like()иregexp_substr(). Также было добавлено несколько необязательных аргументов для функцииregexp_replace().Добавление возможности вычисления расстояния между
многоугольниками(Том Лейн) §Добавление в функцию
to_char()кодов форматаof,tzhиtzm(Нитин Ядав) §Равнозначные коды в верхнем регистре поддерживались и ранее.
Определение режима летнего времени для выполнения
AT TIME ZONEсо значениемtime with time zoneв момент начала транзакции, а не в текущий момент времени (Александр Алексеев, Том Лейн) §Это позволяет считать такое преобразование стабильным, а не изменчивым, и сэкономить обращение к ядру на каждом выполнении.
Отбрасывание элементов NULL в массивах, передаваемых функциям
ts_delete()иsetweight()(Жан-Кристоф Арну) §Эти функции по сути игнорируют элементы массива, содержащие пустые строки (так как им никогда не будут соответствовать корректные лексемы). Поведение будет более согласованным, если и элементы NULL будут игнорироваться, а не вызывать ошибку.
Добавление в функции
pg_size_pretty()иpg_size_bytes()единицы измерения «петабайты» (Дэвид Кристенсен) §Переход в выводимых функцией
pg_event_trigger_ddl_commands()обозначениях временных схем, принадлежащим другим сеансам, к фактическим именам схем (Том Лейн) §Ранее эта функция обозначала все временные схемы псевдонимом
pg_temp, вводящим в заблуждение, потому что это имя годится для обращения только к временной схеме текущего сеанса.
E.41.3.6. PL/pgSQL
E.41.3.7. libpq
Возможность сверить IP-адрес сервера с альтернативным именем субъекта, указанным в сертификате сервера (Джейкоб Чемпион) §
Возможность узнать у
PQsslAttribute()тип библиотеки SSL, не устанавливая соединение libpq (Джейкоб Чемпион) §Использование при передаче команды отмены запроса тех же параметров TCP, что используются для обычных клиентских подключений (Йелте Феннема) §
Благодаря этому для подключений, создаваемых для отмены запросов, будут действовать настроенные тайм-ауты TCP.
Предотвращение изменения объекта результата при возникновении ошибок в обработчике событий libpq (Том Лейн) §§
E.41.3.8. Клиентские приложения
E.41.3.8.1. psql
Оптимизация производительности команды psql \copy за счёт передачи данных порциями большего размера (Хейкки Линнакангас) §
Реализация команды
\dconfig, показывающей серверные переменные (Марк Дилгер, Том Лейн) §§§Она действует подобно серверной команде
SHOW, но может обрабатывать шаблоны, что удобно, когда нужно просмотреть несколько переменных.Добавление команды
\getenv, назначающей переменной psql значение переменной окружения (Том Лейн) §Добавление в команды
\lo_listи\dlпараметра+для отображения прав доступа к большим объектам (Павел Лузанов) §Добавление возможности указать постраничник для команды
\watch(Павел Стехуле, Томас Манро) §Для этого предназначена переменная окружения
PSQL_WATCH_PAGER; поддерживается эта возможность только в Unix.Сохранение комментариев с двумя минусами внутри запросов, которые psql передаёт серверу (Том Лейн, Грег Нанкарроу) § §
Ранее такие комментарии удалялись из строки запроса до передачи серверу. Если два минуса стоят в строке перед текстом запроса, такая строка серверу не передаётся и не записывается в историю psql.
Связывание с командой Readline Meta+
#в psql добавления маркера комментария с двумя минусами (Том Лейн) §Ранее вставлялся знак решётки, если только пользователь не озадачился тем, чтобы настроить другой маркер комментария.
Обеспечение в psql вывода всех результатов в случае, когда серверу передаются сразу несколько запросов (Фабьен Коэльо) §
Ранее выводился результат только последнего запроса. Восстановить предыдущее поведение можно, присвоив переменной psql
SHOW_ALL_RESULTSзначениеoff.Замена окончательной команды
COMMITнаROLLBACKв случае возникновения ошибки в режиме--single-transactionтолько при установленном параметреON_ERROR_STOP(Микаэль Пакье) §Ранее, если в команде
-cили в файле скрипта-fобнаруживалась ошибка, в конце выдавалась командаROLLBACK, вне зависимости от значенияON_ERROR_STOP.Улучшение дополнения табуляцией в psql (Синъя Като, Дагфинн Ильмари Маннсакер, Питер Смит, Кою Танигава, Кен Като, Давид Феттер, Тан Хайин, Питер Эйзентраут, Альваро Эррера, Том Лейн, Масахико Савада) § § § § § § § § § § § § § § § § § § § §
Ограничение поддержки в psql команд с обратной косой чертой для серверов PostgreSQL версий ниже 9.2 (Том Лейн) §
Это позволило удалить код, выполняемый только при использовании старых серверов. Команды, которые не требуют специальной обработки для версий ниже 9.2, по-прежнему будут работать.
E.41.3.8.2. pg_dump
Обеспечение в pg_dump выгрузки информации о метках безопасности и владельце схемы
public(Ной Миш) § §Увеличение производительности при выгрузке баз данных со множеством объектов (Том Лейн) §§§
При этом также улучшена производительность pg_upgrade.
Оптимизация производительности параллельного режима pg_dump при выгрузке таблиц с большими TOAST-отношениями (Том Лейн) §
Добавление параметра выгрузки/восстановления
--no-table-access-methodдля восстановления объектов с принудительным выбором табличного метода доступа по умолчанию (Джастин Призби) §Прекращение поддержки программами pg_dump и pg_dumpall серверов PostgreSQL версии ниже 9.2 (Том Лейн) §
E.41.3.9. Серверные приложения
Добавление в pg_basebackup параметра
--target, задающего расположение базовой резервной копии (Роберт Хаас) §Возможные значения этого параметра:
serverдля сохранения копии на сервере иblackholeдля отказа от сохранения копии (в целях тестирования).Реализация в pg_basebackup возможности сжимать файлы базовой копии методами gzip, LZ4 и Zstandard на стороне сервера и методами LZ4 и Zstandard на стороне клиента (Дипеш Пандит, Дживан Ладхе) § § §
Сжатие методом
gzipна стороне клиента поддерживалось ранее.Реализация в pg_basebackup возможности сжимать данные на стороне сервера и сохранять их на стороне клиента в распакованном виде (Дипеш Пандит) §
Теперь вы можете, используя формат вывода
plain, запросить сжатие на стороне сервера.Добавление для параметра pg_basebackup
--compressвозможности выбирать, где производить сжатие (на стороне сервера или клиента), метод сжатия и параметры сжатия (Микаэль Пакье, Роберт Хаас) § §Поддержка метода сжатия LZ4 в pg_receivewal (Георгиос Коколатос) § §
Такое сжатие включается параметром
--compress=lz4; при этом исполняемые файлы должны быть собраны с ключом--with-lz4.Расширение возможностей параметра pg_receivewal
--compress(Георгиос Коколатос) §Улучшение в pg_receivewal выбора позиции перезапуска в WAL (Ронан Данклау) §
Ранее pg_receivewal выбирал начальную позицию в зависимости от содержимого файлов WAL, находящихся в локальном архиве, либо с текущей позиции сброса WAL на передающем сервере. Теперь при получении WAL с сервера Postgres 15 или новее и использовании слота репликации начальной позицией будет точка перезапуска этого слота.
Добавление для pg_rewind ключа
--config-file, позволяющего упростить использование этой программы, когда файлы конфигурации сервера находятся не в каталоге данных (Гуннар Блут) §
E.41.3.9.1. pg_upgrade
Размещение временных файлов и журналов pg_upgrade в подкаталоге
pg_upgrade_output.dкаталога нового кластера (Джастин Призби) § § §Ранее эти файлы оставались в текущем каталоге, и их надо было удалять вручную. Теперь при успешном завершении pg_upgrade они удаляются автоматически.
Отключение вывода информации о текущем состоянии операции pg_upgrade по умолчанию, когда устройство вывода — не терминал (Андрес Фройнд) §
Вывод информации о текущем состоянии на устройства, отличные от tty, можно включить ключом
--verbose.Вывод в pg_upgrade списка всех баз данных с некорректными параметрами подключения (Дживан Ладхе) §
Ранее выдавалось сообщение только о первой базе данных с неправильным параметром подключения.
Обеспечение в pg_upgrade сохранения неизменённых OID табличных пространств и OID баз данных, а также номеров файловых узлов отношений (Шрути Говда, Антонин Хоуска) § § §
Добавление ключа
--no-syncдля pg_upgrade (Микаэль Пакье) §Использовать его рекомендуется только при тестировании.
Прекращение поддержки программой pg_upgrade серверов PostgreSQL версии ниже 9.2 (Том Лейн) §
E.41.3.9.2. pg_waldump
Возможность фильтровать в выводе pg_waldump записи по номеру файлового узла, номеру блока, номеру слоя и признаку образов полных страниц (Дэвид Кристенсен, Томас Манро) § §
Обеспечение в pg_waldump вывода статистики перед завершением работы при прерывании (Бхарат Рупиредди) §
Например, если нажать
Ctrl+Cв терминале, где работаетpg_waldump --stats --follow, перед завершением работы программы будет выведена текущая статистика. В Windows это не работает.Улучшение описаний некоторых записей транзакций в WAL, которые выводит pg_waldump (Масахико Савада, Микаэль Пакье) §
Реализация в pg_waldump вывода информации о различных менеджерах ресурсов (Хейкки Линнакангас) §
Для получения такой информации можно передать параметр
--rmgrнесколько раз.
E.41.3.10. Документация
Добавление документации функций
pg_encoding_to_char()иpg_char_to_encoding()(Иэн Барвик) §
E.41.3.11. Исходный код
Обеспечение поддержки непрерывного интеграционного тестирования с использованием cirrus-ci (Андрес Фройнд, Томас Манро, Мелани Плейгман) §
Добавление параметра configure
--with-zstdдля сборки с библиотекой Zstandard (Дживан Ладхе, Роберт Хаас, Микаэль Пакье) §Добавление поля с идентификатором ABI в отличительный блок загружаемых библиотек, что позволяет отслеживать несовместимость продуктов, производных от PostgreSQL, с библиотеками, скомпилированными для других продуктов (Питер Эйзентраут) §
В случае расхождения в поле ABI при загрузке модуля будет выдана ошибка.
Определение нового значения
pg_type.typcategoryдля типа"char"(Том Лейн) §К этой категории также отнесены несколько других типов для внутреннего использования.
Добавление в протокол сервера сообщения
TARGET, позволяющего выбрать новый методCOPYдля использования при базовом копировании (Роберт Хаас) §Этот метод теперь применяется в pg_basebackup.
Добавление в протокол сервера сообщений
COMPRESSIONиCOMPRESSION_DETAILдля указания метода сжатия и его параметров (Роберт Хаас) § §Ликвидация поддержки удалённого сервера в старом синтаксисе команды
BASE_BACKUPи в протоколе базового копирования (Роберт Хаас) § §Добавление для расширений возможности определять дополнительных получателей резервного копирования (Роберт Хаас) §
Реализация возможности для расширений определять пользовательских менеджеров ресурсов WAL (Джефф Девис) §
Добавление функции
pg_settings_get_flags()для получения флагов серверных переменных (Джастин Призби) §Экспортирование всех глобальных серверных переменных в Windows, для чего в их объявления добавлены маркеры
PGDLLIMPORT(Роберт Хаас) §Ранее в Windows расширениям были доступны только отдельные переменные.
Увеличение минимальной версии GNU make, требующейся для сборки PostgreSQL, до 3.81 (Том Лейн) §
Добавление зависимости от OpenSSL для сборки расширения pgcrypto (Питер Эйзентраут) §
Увеличение минимальной требуемой версии Perl до 5.8.3 (Дагфинн Ильмари Маннсакер) §
Отказ от поддержки Python версий ниже 3.2 (Андрес Фройнд) §
E.41.3.12. Дополнительные модули
Добавление в amcheck проверки последовательностей (Марк Дилгер) §
Улучшение в amcheck проверок корректности таблиц TOAST (Марк Дилгер) §
Добавление модуля basebackup_to_shell в качестве примера нестандартного получателя резервной копии (Роберт Хаас) § §
Добавление модуля basic_archive в качестве примера библиотеки, выполняющей архивирование (Натан Боссарт) §
Возможность построения индексов btree_gist по логическим столбцам (Эмре Хасегели) §§§
Такие индексы могут использоваться для ограничений-исключений.
Исправление в функции pageinspect
page_header()обработки страниц размером 32 Кбайта (Цюань Цзунлян) §Ранее с такими страницами в некоторых случаях могли выдаваться некорректные отрицательные значения.
Добавление в pg_stat_statements счётчиков для ввода-вывода блоков временных файлов (Масахико Савада) §
Добавление счётчиков JIT в pg_stat_statements (Магнус Хагандер) §
Добавление нового модуля pg_walinspect (Бхарат Рупиредди) §
Он позволяет получить на уровне SQL примерно ту же информацию, что выдаёт pg_waldump.
Отображение в сообщениях sepgsql состояния разрешительного/запретительного режима (Дейв Пейдж) §
E.41.3.12.1. postgres_fdw
Возможность передачи через postgres_fdw выражений
CASEдля удалённого выполнения (Александр Пыхалов) §Добавление серверной переменной
postgres_fdw.application_name, позволяющей установить имя приложения для подключений postgres_fdw (Хайато Курода) § §Ранее
application_nameдля удалённого сеанса можно было задать только на удалённом сервере или в свойствах соединения postgres_fdw. Вpostgres_fdw.application_nameможно включать некоторые спецпоследовательности, что позволяет сформировать имена, с которыми соединения на удалённом сервере можно будет легко различать.Возможность параллельной фиксации транзакций на серверах postgres_fdw (Эцуро Фудзита) §
Эта возможность включается параметром
parallel_commitкомандыCREATE SERVER.
E.41.4. Благодарственный список
Перечисленные ниже (в алфавитном порядке) лица сделали вклад в этот выпуск, разрабатывая, совершенствуя и рецензируя код, принимая правки, проводя тестирование или сообщая о проблемах.
| Абхиджит Менон-Сен (Abhijit Menon-Sen) |
| Адам Брюссельбек (Adam Brusselback) |
| Адам Маклер (Adam Mackler) |
| Аджин Чериан (Ajin Cherian) |
| Адриан Хо (Adrian Ho) |
| Аластер Маккинли (Alastair McKinley) |
| Алекс Кингсборо (Alex Kingsborough) |
| Александр Алексеев (Aleksander Alekseev) |
| Александр Каленик (Aliaksandr Kalenik) |
| Александр Кожемякин (Alex Kozhemyakin) |
| Александр Коротков (Alexander Korotkov) |
| Александр Кукушкин (Alexander Kukushkin) |
| Александр Лахин (Alexander Lakhin) |
| Александр Навратил (Alexander Nawratil) |
| Александр Пыхалов (Alexander Pyhalov) |
| Алексей Борзов (Alexey Borzov) |
| Алексей Ермаков (Alexey Ermakov) |
| Алеш Зелены (Ales Zeleny) |
| Альваро Эррера (Álvaro Herrera) |
| Амит Капила (Amit Kapila) |
| Амит Ланготе (Amit Langote) |
| Амит Хандекар (Amit Khandekar) |
| Амул Сул (Amul Sul) |
| Анастасия Лубенникова (Anastasia Lubennikova) |
| Андерс Касеорг (Anders Kaseorg) |
| Андреас Гроб (Andreas Grob) |
| Андреас Диджкмен (Andreas Dijkman) |
| Андреас Зельтенрейх (Andreas Seltenreich) |
| Андрей Билле (Andrew Bille) |
| Андрей Бородин (Andrey Borodin) |
| Андрей Зубков (Andrei Zubkov) |
| Андрей Лепихов (Andrey Lepikhov) |
| Андрей Соколов (Andrey Sokolov) |
| Андрес Фройнд (Andres Freund) |
| Антон Волошин (Anton Voloshin) |
| Антон Мельников (Anton Melnikov) |
| Антонин Хоуска (Antonin Houska) |
| Арне Роланд (Arne Roland) |
| Артур Закиров (Artur Zakirov) |
| Арьян ван де Вен (Arjan van de Ven) |
| Асим Правин (Asim Praveen) |
| Асиф Рехман (Asif Rehman) |
| Атсуши Торикоши (Atsushi Torikoshi) |
| Ахсан Хади (Ahsan Hadi) |
| Ашвин Агравал (Ashwin Agrawal) |
| Ашутош Бапат (Ashutosh Bapat) |
| Ашутош Шарма (Ashutosh Sharma) |
| Ая Ивата (Aya Iwata) |
| Бауржан Сахариев (Bauyrzhan Sakhariyev) |
| Бенуа Лобро (Benoit Lobréau) |
| Бернд Дорн (Bernd Dorn) |
| Бертран Друво (Bertrand Drouvot) |
| Борис Колпаков (Boris Kolpackov) |
| Борис Корзун (Boris Korzun) |
| Брар Пининг (Brar Piening) |
| Брин Ллевеллин (Bryn Llewellyn) |
| Бруно да Силва (Bruno da Silva) |
| Брэд Николсон (Brad Nicholson) |
| Брюс Момджян (Bruce Momjian) |
| Бхарат Рупиредди (Bharath Rupireddy) |
| Бьорн Харртелл (Björn Harrtell) |
| Ван Ке (Wang Ke) |
| Вейл Сонг (Whale Song) |
| Вигнеш Си (Vignesh C) |
| Вик Фиринг (Vik Fearing) |
| Виктор Вагнер (Victor Wagner) |
| Виктор Егоров (Victor Yegorov) |
| Вилл Мортенсен (Will Mortensen) |
| Винцас Даргис (Vincas Dargis) |
| Виталий Буровой (Vitaly Burovoy) |
| Виталий Воронов (Vitaly Voronov) |
| Владимир Ситников (Vladimir Sitnikov) |
| Вольфганг Вальтер (Wolfgang Walther) |
| Вэй Ван (Wei Wang) |
| Вэй Сунь (Wei Sun) |
| Габриела Сервенти (Gabriela Serventi) |
| Гаураб Дей (Gaurab Dey) |
| Георгиос Коколатос (Georgios Kokolatos) |
| Гийом Леларж (Guillaume Lelarge) |
| Грег Нанкарроу (Greg Nancarrow) |
| Грег Рыхлевски (Greg Rychlewski) |
| Грег Сабино Маллейн (Greg Sabino Mullane) |
| Грег Старк (Greg Stark) |
| Грегори Смит (Gregory Smith) |
| Гуннар Блут (Gunnar Bluth) |
| Гуржит Сингх (Gurjeet Singh) |
| Давид Феттер (David Fetter) |
| Даг Лем (Dag Lem) |
| Дагфинн Ильмари Маннсакер (Dagfinn Ilmari Mannsåker) |
| Дайан Фей (Dian Fay) |
| Даниель Вестерман (Daniel Westermann) |
| Даниил Анисимов (Daniil Anisimov) |
| Даниил Черний (Daniel Cherniy) |
| Даниэле Вараццо (Daniele Varrazzo) |
| Даниэль Верите (Daniel Vérité) |
| Даниэль Густафссон (Daniel Gustafsson) |
| Даниэль Польски (Daniel Polski) |
| Дарья Лепихова (Daria Lepikhova) |
| Дейв Крамер (Dave Cramer) |
| Дейв Пейдж (Dave Page) |
| Джастин Призби (Justin Pryzby) |
| Джейкоб Чемпион (Jacob Champion) |
| Джеймс Информ (James Inform) |
| Джеймс Коулман (James Coleman) |
| Джеймс Хиллиард (James Hilliard) |
| Джейсон Ким (Jason Kim) |
| Джейсон Харви (Jason Harvey) |
| Джереми Шнайдер (Jeremy Schneider) |
| Джереми Эванс (Jeremy Evans) |
| Джефф Винклес (Geoff Winkless) |
| Джефф Девис (Jeff Davis) |
| Джефф Джейнс (Jeff Janes) |
| Джеффри Блейк (Geoffrey Blake) |
| Дживан Ладхе (Jeevan Ladhe) |
| Джимми Йи (Jimmy Yih) |
| Джо Вайлдиш (Joe Wildish) |
| Джо Конвей (Joe Conway) |
| Джозеф Кошаков (Joseph Koshakow) |
| Джон Нейлор (John Naylor) |
| Джонатан С Кац (Jonathan S. Katz) |
| Джоуи Бодойя (Joey Bodoia) |
| Джош Сореф (Josh Soref) |
| Джошуа Бриндл (Joshua Brindle) |
| Джоэл Джейкобсон (Joel Jacobson) |
| Дилип Кумар (Dilip Kumar) |
| Дин Рашид (Dean Rasheed) |
| Дипеш Пандит (Dipesh Pandit) |
| Дмитрий Долгов (Dmitry Dolgov) |
| Дмитрий Коваль (Dmitry Koval) |
| Дмитрий Маракасов (Dmitry Marakasov) |
| Доминик Девьен (Dominique Devienne) |
| Дон Ук (Dong Wook) |
| Дорофей Пролесковский (Darafei Praliaskouski) |
| Дрю ДеВолт (Drew DeVault) |
| Дэвид Дж. Джонстон (David G. Johnston) |
| Дэвид Кристенсен (David Christensen) |
| Дэвид Роули (David Rowley) |
| Дэвид Стил (David Steele) |
| Дэвид Чжан (David Zhang) |
| Дэн Кубб (Dan Kubb) |
| Дэнни Шемеш (Danny Shemesh) |
| Егор Рогов (Egor Rogov) |
| Егор Чиндяскин (Egor Chindyaskin) |
| Екатерина Кирьянова (Ekaterina Kiryanova) |
| Елена Индрупская (Elena Indrupskaya) |
| Ерки Еэссаар (Erki Eessaar) |
| Жан-Кристоф Арну (Jean-Christophe Arnu) |
| Жеан-Гийом де Рорте (Jehan-Guillaume de Rorthais) |
| Жиль Даролд (Gilles Darold) |
| Житка Плесникова (Jitka Plesníková) |
| Жуй Жао (Rui Zhao) |
| Жюльен Розе (Julien Roze) |
| Жюльен Руо (Julien Rouhaud) |
| Ибрар Ахмед (Ibrar Ahmed) |
| Ильдус Курбангалиев (Ildus Kurbangaliev) |
| Илья Анфимов (Ilya Anfimov) |
| Иржи Фейфар (Jiri Fejfar) |
| Итамар Гафни (Itamar Gafni) |
| Иэн Барвик (Ian Barwick) |
| Иэн Кэмпбелл (Ian Campbell) |
| Йелте Феннема (Jelte Fennema) |
| Йогендра Суралкар (Yogendra Suralkar) |
| Йозеф Шиманек (Josef Šimánek) |
| Карл Сопчак (Carl Sopchak) |
| Кевин Бёрк (Kevin Burke) |
| Кевин Гриттнер (Kevin Grittner) |
| Кевин Маккиббин (Kevin McKibbin) |
| Кевин Свит (Kevin Sweet) |
| Кевин Хамфрис (Kevin Humphreys) |
| Кевин Чжэн (Kevin Zheng) |
| Кен Като (Ken Kato) |
| Клауди Виллис (Klaudie Willis) |
| Клаудио Фрейре (Claudio Freire) |
| Клеменс Зейдлер (Clemens Zeidler) |
| Константин Книжник (Konstantin Knizhnik) |
| Константина Сковола (Konstantina Skovola) |
| Кори Хинкер (Corey Huinker) |
| Косей Масумура (Kosei Masumura) |
| Котаро Кавамото (Kotaro Kawamoto) |
| Кою Танигава (Koyu Tanigawa) |
| Крис Бенди (Chris Bandy) |
| Крис Лоудер (Chris Lowder) |
| Кристиан Квест (Christian Quest) |
| Кристоф Берг (Christoph Berg) |
| Кристоф Петтус (Christophe Pettus) |
| Кристоф Хейсс (Christoph Heiss) |
| Кристофер Пэйнтер-Вейкфилд (Christopher Painter-Wakefield) |
| Кунтал Гхош (Kuntal Ghosh) |
| Кэри Хуан (Cary Huang) |
| Кётаро Хоригути (Kyotaro Horiguchi) |
| Ларс Канис (Lars Kanis) |
| Лауренц Альбе (Laurenz Albe) |
| Лесли Лемэр (Leslie Lemaire) |
| Лиам Боуэн (Liam Bowen) |
| Линцзе Цян (Lingjie Qiang) |
| Лоран Хассон (Laurent Hasson) |
| Лорен Фликстин (Lauren Fliksteen) |
| Луи Жашье (Louis Jachiet) |
| Лукас Фиттл (Lukas Fittl) |
| Лю Хуайлин (Liu Huailing) |
| Ма Лянчжу (Ma Liangzhu) |
| Магнус Хагандер (Magnus Hagander) |
| Майк Ох (Mike Oh) |
| Майк Фидлер (Mike Fiedler) |
| Майкл Дж. Салливан (Michael J. Sullivan) |
| Майкл Пауэрс (Michael Powers) |
| Майкл Харрис (Michael Harris) |
| Майлз Делаханти (Miles Delahunty) |
| Максим Милютин (Maksim Milyutin) |
| Максим Орлов (Maxim Orlov) |
| Максим Яблоков (Maxim Yablokov) |
| Марек Шуба (Marek Szuba) |
| Марина Полякова (Marina Polyakova) |
| Марио Эмменлауэр (Mario Emmenlauer) |
| Марк Бахманн (Marc Bachmann) |
| Марк Вон (Mark Wong) |
| Марк Дилгер (Mark Dilger) |
| Марк Муравски (Mark Murawski) |
| Маркус Ваннер (Markus Wanner) |
| Маркус Винанд (Markus Winand) |
| Маркус Гартнер (Marcus Gartner) |
| Мартейн Ван Остерхаут (Martijn van Oosterhout) |
| Мартин Калхер (Martin Kalcher) |
| Мартин Маркес (Martín Marqués) |
| Мартин Юрча (Martin Jurca) |
| Марцин Крупович (Marcin Krupowicz) |
| Масао Фудзии (Masao Fujii) |
| Масахико Савада (Masahiko Sawada) |
| Масахиро Икеда (Masahiro Ikeda) |
| Масаюки Хиросэ (Masayuki Hirose) |
| Масая Кавамото (Masaya Kawamoto) |
| Маттейс ван дер Влётен (Matthijs van der Vleuten) |
| Маттиас ван де Меент (Matthias van de Meent) |
| Махендра Сингх Талор (Mahendra Singh Thalor) |
| Мачик Сакрейда (Maciek Sakrejda) |
| Мелани Плейгман (Melanie Plageman) |
| Микаэль Пакье (Michael Paquier) |
| Михаил Кулагин (Mikhail Kulagin) |
| Михаэль Банк (Michael Banck) |
| Михаэль Мескес (Michael Meskes) |
| Михаэль Мюльбейер (Michael Mühlbeyer) |
| Назир Билал Явуз (Nazir Bilal Yavuz) |
| Наоки Окано (Naoki Okano) |
| Натан Боссарт (Nathan Bossart) |
| Натан Лонг (Nathan Long) |
| Нейл Чен (Neil Chen) |
| Неха Шарма (Neha Sharma) |
| Никита Глухов (Nikita Glukhov) |
| Никола Конту (Nicola Contu) |
| Николай Беркофф (Nikolai Berkoff) |
| Николай Самохвалов (Nikolay Samokhvalov) |
| Николай Шаплов (Nikolay Shaplov) |
| Николас Лютик (Nicolas Lutic) |
| Никхил Бенеш (Nikhil Benesch) |
| Никхил Сонтакке (Nikhil Sontakke) |
| Никхил Шетти (Nikhil Shetty) |
| Нитин Ядав (Nitin Jadhav) |
| Нобору Сайто (Noboru Saito) |
| Ной Миш (Noah Misch) |
| Нориёси Синода (Noriyoshi Shinoda) |
| Олаф Болен (Olaf Bohlen) |
| Олли Беттс (Olly Betts) |
| Ондер Каладжи (Onder Kalaci) |
| Оскар Стенберг (Oskar Stenberg) |
| Отто Кекяляйнен (Otto Kekalainen) |
| Паван Деоласи (Pavan Deolasee) |
| Павел Борисов (Pavel Borisov) |
| Павел Лузанов (Pavel Luzanov) |
| Павел Стехуле (Pavel Stehule) |
| Петер Славов (Peter Slavov) |
| Петр Желинек (Petr Jelínek) |
| Питер Гейган (Peter Geoghegan) |
| Питер Смит (Peter Smith) |
| Питер Эйзентраут (Peter Eisentraut) |
| Пол Гуо (Paul Guo) |
| Пол Мартинес (Paul Martinez) |
| Пол Юнгвирт (Paul Jungwirth) |
| Прабхат Саху (Prabhat Sahu) |
| Пьер-Орельен Жорж (Pierre-Aurélien Georges) |
| Р. К. Н. Саи Кришна (RKN Sai Krishna) |
| Раджакавитха Кодхандапани (Rajakavitha Kodhandapani) |
| Раджкумар Рагхуванши (Rajkumar Raghuwanshi) |
| Райан Келли (Ryan Kelly) |
| Ранье Вилела (Ranier Vilela) |
| Рахила Сьед (Rahila Syed) |
| Рей Камигиси (Rei Kamigishi) |
| Реми Лапейр (Rémi Lapeyre) |
| Ренан Соарес Лопес (Renan Soares Lopes) |
| Рид Томпсон (Reid Thompson) |
| Ричард Гуо (Richard Guo) |
| Ричард Уэсли (Richard Wesley) |
| Роберт Трит (Robert Treat) |
| Роберт Хаас (Robert Haas) |
| Роберто Мелло (Roberto Mello) |
| Робинс Таракан (Robins Tharakan) |
| Роджер Мейсон (Roger Mason) |
| Роман Жарков (Roman Zharkov) |
| Ронан Данклау (Ronan Dunklau) |
| Рэйчел Хитон (Rachel Heaton) |
| Рё Мацумура (Ryo Matsumura) |
| Рёхэй Такахаси (Ryohei Takahashi) |
| Садхупрасад Патро (Sadhuprasad Patro) |
| Саит Талха Нишанджы (Sait Talha Nisanci) |
| Саймон Риггс (Simon Riggs) |
| Сами Имсейх (Sami Imseih) |
| Сандип Таккар (Sandeep Thakkar) |
| Свен Клемм (Sven Klemm) |
| Себастьян Кемпер (Sebastian Kemper) |
| Семён Перепелица (Simon Perepelitsa) |
| Сергей Корнилов (Sergei Kornilov) |
| Сергей Шиндерук (Sergey Shinderuk) |
| Сергей Шулбаков (Sergei Shoulbakov) |
| Сероп Саркуни (Sehrope Sarkuni) |
| Синъя Като (Shinya Kato) |
| Сириша Чамарти (Sirisha Chamarthi) |
| Соумйадип Чакраборти (Soumyadeep Chakraborty) |
| Стас Кельвич (Stas Kelvich) |
| Стефен Хиллман (Stefen Hillman) |
| Стив Чавес (Steve Chavez) |
| Стивен Фрост (Stephen Frost) |
| Стэн Ху (Stan Hu) |
| Суманта Мукерджи (Sumanta Mukherjee) |
| Сурадж Хамкар (Suraj Khamkar) |
| Сурадж Хараге (Suraj Kharage) |
| Такамити Осуми (Takamichi Osumi) |
| Такаюки Цунакава (Takayuki Tsunakawa) |
| Такэси Идэриха (Takeshi Ideriha) |
| Тацуо Исии (Tatsuo Ishii) |
| Тацуро Ямада (Tatsuro Yamada) |
| Тацухиро Накамори (Tatsuhiro Nakamori) |
| Тацухито Касахара (Tatsuhito Kasahara) |
| Теджа Муппарти (Teja Mupparti) |
| Тибо Валковяк (Thibaud Walkowiak) |
| Тим Макнамара (Tim McNamara) |
| Тимо Штольц (Timo Stolz) |
| Тимур Ханжанов (Timur Khanjanov) |
| Том Браун (Thom Brown) |
| Том Лейн (Tom Lane) |
| Томас Бартон (Tomas Barton) |
| Томас Маккей (Thomas McKay) |
| Томас Манро (Thomas Munro) |
| Томаш Вондра (Tomas Vondra) |
| Тони Ре (Tony Reix) |
| Трой Фрерикс (Troy Frericks) |
| Тушар Ахуджа (Tushar Ahuja) |
| Фабрис Фонтен (Fabrice Fontaine) |
| Фабрис Шапюи (Fabrice Chapuis) |
| Фабрицио де Ройес Мелло (Fabrízio de Royes Mello) |
| Фабьен Коэльо (Fabien Coelho) |
| Фейке Стинберген (Feike Steenbergen) |
| Фил Крылов (Phil Krylov) |
| Фил Флорент (Phil Florent) |
| Филипп Господинов (Filip Gospodinov) |
| Флорин Ирион (Florin Irion) |
| Флорис Ван Ни (Floris Van Nee) |
| Фредерик Юэль (Frédéric Yhuel) |
| Фёдор Сигаев (Teodor Sigaev) |
| Хайато Курода (Hayato Kuroda) |
| Хайин Тан (Haiying Tang) |
| Хайме Казанова (Jaime Casanova) |
| Хайян Ван (Haiyang Wang) |
| Ханну Кросинг (Hannu Krosing) |
| Ханс Бушман (Hans Buschmann) |
| Хейкки Линнакангас (Heikki Linnakangas) |
| Хервиг Геманс (Herwig Goemans) |
| Химаншу Упадхьяя (Himanshu Upadhyaya) |
| Хит Лорд (Heath Lord) |
| Холли Робертс (Holly Roberts) |
| Хоу Чжицзе (Hou Zhijie) |
| Хуан Хосе Сантамария Флеча (Juan José Santamaría Flecha) |
| Хуберт Любачевски (Hubert Lubaczewski) |
| Цзюньван Жао (Junwang Zhao) |
| Цзянь Гуо (Jian Guo) |
| Цзянь Хи (Jian He) |
| Цюань Цзунлян (Quan Zongliang) |
| Чен Цзяоцянь (Chen Jiaoqian) |
| Чепмен Флэк (Chapman Flack) |
| Чжан Вэньцзе (Zhang Wenjie) |
| Чжан Минли (Zhang Mingli) |
| Чжихун Юй (Zhihong Yu) |
| Чжиюн Ву (Zhiyong Wu) |
| Шеньхао Ван (Shenhao Wang) |
| Ши Юй (Shi Yu) |
| Шрути Говда (Shruthi Gowda) |
| Шэй Роджански (Shay Rojansky) |
| Эдуард Катала (Eduard Català) |
| Эйлер Тавейра (Euler Taveira) |
| Элвис Пранскевичус (Elvis Pranskevichus) |
| Эммануэль Кенсро (Emmanuel Quincerot) |
| Эмре Хасегели (Emre Hasegeli) |
| Энди Фан (Andy Fan) |
| Эндрю Алсуп (Andrew Alsup) |
| Эндрю Гирт (Andrew Gierth) |
| Эндрю Дунстан (Andrew Dunstan) |
| Эндрю Кеспер (Andrew Kesper) |
| Эрик Мутта (Eric Mutta) |
| Эрик Рижкерс (Erik Rijkers) |
| Эрика Чжан (Erica Zhang) |
| Эцуро Фудзита (Etsuro Fujita) |
| Юго Нагата (Yugo Nagata) |
| Юзуко Хосоя (Yuzuko Hosoya) |
| Юйкунь Ван (Yukun Wang) |
| Юрген Пуртц (Jürgen Purtz) |
| Юрий Соколов (Yura Sokolov) |
| Юсукэ Эгашира (Yusuke Egashira) |
| Якуб Вартак (Jakub Wartak) |
| Ян Петровски (Jan Piotrowski) |
| ЯнгХван Чу (YoungHwan Joo) |
| Яньлян Лэй (Yanliang Lei) |
| Яогуан Чэнь (Yaoguang Chen) |
| Япинь Ли (Japin Li) |
E.41. Release 15
Release date: 2022-10-13
E.41.1. Overview
PostgreSQL 15 contains many new features and enhancements, including:
Support for the SQL
MERGEcommand.Selective publication of tables' contents within logical replication publications, through the ability to specify column lists and row filter conditions.
More options for compression, including support for Zstandard (zstd) compression. This includes support for performing compression on the server side during pg_basebackup.
Support for structured server log output using the JSON format.
Performance improvements, particularly for in-memory and on-disk sorting.
The above items and other new features of PostgreSQL 15 are explained in more detail in the sections below.
E.41.2. Migration to Version 15
A dump/restore using pg_dumpall or use of pg_upgrade or logical replication is required for those wishing to migrate data from any previous release. See Section 17.6 for general information on migrating to new major releases.
Version 15 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:
Remove
PUBLICcreation permission on thepublicschema (Noah Misch) §The new default is one of the secure schema usage patterns that Section 5.9.6 has recommended since the security release for CVE-2018-1058. The change applies to new database clusters and to newly-created databases in existing clusters. Upgrading a cluster or restoring a database dump will preserve
public's existing permissions.For existing databases, especially those having multiple users, consider revoking
CREATEpermission on thepublicschema to adopt this new default. For new databases having no need to defend against insider threats, grantingCREATEpermission will yield the behavior of prior releases.Change the owner of the
publicschema to be the newpg_database_ownerrole (Noah Misch) §This allows each database's owner to have ownership privileges on the
publicschema within their database. Previously it was owned by the bootstrap superuser, so that non-superuser database owners could not do anything with it.This change applies to new database clusters and to newly-created databases in existing clusters. Upgrading a cluster or restoring a database dump will preserve
public's existing ownership specification.Remove long-deprecated exclusive backup mode (David Steele, Nathan Bossart) §
If the database server stops abruptly while in this mode, the server could fail to start. The non-exclusive backup mode is considered superior for all purposes. Functions
pg_start_backup()/pg_stop_backup()have been renamed topg_backup_start()/pg_backup_stop(), and the functionspg_backup_start_time()andpg_is_in_backup()have been removed.Increase
hash_mem_multiplierdefault to 2.0 (Peter Geoghegan) §This allows query hash operations to use more
work_memmemory than other operations.Remove server-side language
plpython2uand generic Python languageplpythonu(Andres Freund) §Python 2.x is no longer supported. While the original intent of
plpythonuwas that it could eventually refer toplpython3u, changing it now seems more likely to cause problems than solve them, so it's just been removed.Generate an error if
array_to_tsvector()is passed an empty-string array element (Jean-Christophe Arnu) §This is prohibited because lexemes should never be empty. Users of previous Postgres releases should verify that no empty lexemes are stored because they can lead to dump/restore failures and inconsistent results.
Generate an error when
chr()is supplied with a negative argument (Peter Eisentraut) §Prevent
CREATE OR REPLACE VIEWfrom changing the collation of an output column (Tom Lane) §Disallow zero-length Unicode identifiers, e.g.,
U&""(Peter Eisentraut) §Non-Unicode zero-length identifiers were already disallowed.
Prevent numeric literals from having non-numeric trailing characters (Peter Eisentraut) §
Previously, query text like
123abcwould be interpreted as123followed by a separate tokenabc.Adjust JSON numeric literal processing to match the SQL/JSON-standard (Peter Eisentraut) §
This accepts numeric formats like
.1and1., and disallows trailing junk after numeric literals, like1.type().When
intervalinput provides a fractional value for a unit greater than months, round to the nearest month (Bruce Momjian) §For example, convert
1.99 yearsto2 years, not1 year 11 monthsas before.Improve consistency of
intervalparsing with trailing periods (Tom Lane) §Numbers with trailing periods were rejected on some platforms.
Mark the
intervaloutput function as stable, not immutable, since it depends onIntervalStyle(Tom Lane) §This will, for example, cause creation of indexes relying on the text output of
intervalvalues to fail.Detect integer overflow in interval justification functions (Joe Koshakow) §
The affected functions are
justify_interval(),justify_hours(), andjustify_days().Change the I/O format of type
"char"for non-ASCII characters (Tom Lane) §Bytes with the high bit set are now output as a backslash and three octal digits, to avoid encoding issues.
Remove the default
ADMIN OPTIONprivilege a login role has on its own role membership (Robert Haas) §Previously, a login role could add/remove members of its own role, even without
ADMIN OPTIONprivilege.Allow logical replication to run as the owner of the subscription (Mark Dilger) §
Because row-level security policies are not checked, only superusers, roles with
bypassrls, and table owners can replicate into tables with row-level security policies.Prevent
UPDATEandDELETElogical replication operations on tables where the subscription owner does not haveSELECTpermission on the table (Jeff Davis) §UPDATEandDELETEcommands typically involve reading the table as well, so require the subscription owner to have tableSELECTpermission.When
EXPLAINreferences the session's temporary object schema, refer to it aspg_temp(Amul Sul) §Previously the actual schema name was reported, leading to inconsistencies across sessions.
Fix
pg_statio_all_tablesto sum values for the rare case of TOAST tables with multiple indexes (Andrei Zubkov) §Previously such cases would show one row for each index.
Disallow setting custom options that match the name of an installed extension, but are not one of the extension's declared variables (Florin Irion, Tom Lane) § § §
This change causes any such pre-existing variables to be deleted during extension load, and then prevents new ones from being created later in the session. The intent is to prevent confusion about whether a variable is associated with an extension or not.
Remove obsolete server variable
stats_temp_directory(Andres Freund, Kyotaro Horiguchi) §Improve the algorithm used to compute
random()(Fabien Coelho) § §This will cause
random()'s results to differ from what was emitted by prior versions, even for the same seed value.libpq's
PQsendQuery()function is no longer supported in pipeline mode (Álvaro Herrera) §Applications that are using that combination will need to be modified to use
PQsendQueryParams()instead.On non-Windows platforms, consult the
HOMEenvironment variable to find the user's home directory (Anders Kaseorg) §If
HOMEis empty or unset, fall back to the previous method of checking the<pwd.h>database. This change affects libpq (for example, while looking up~/.pgpass) as well as various client application programs.Remove pg_dump's
--no-synchronized-snapshotsoption (Tom Lane) §All still-supported server versions support synchronized snapshots, so there's no longer a need for this option.
After an error is detected in psql's
--single-transactionmode, change the finalCOMMITcommand toROLLBACKonly ifON_ERROR_STOPis set (Michael Paquier) §Avoid unnecessary casting of constants in queries sent by postgres_fdw (Dian Fay) §
When column types are intentionally different between local and remote databases, such casts could cause errors.
Remove xml2's
xml_is_well_formed()function (Tom Lane) §This function has been implemented in the core backend since Postgres 9.1.
Allow custom scan providers to indicate if they support projections (Sven Klemm) §
The default is now that custom scan providers are assumed to not support projections; those that do will need to be updated for this release.
E.41.3. Changes
Below you will find a detailed account of the changes between PostgreSQL 15 and the previous major release.
E.41.3.1. Server
Record and check the collation version of each database (Peter Eisentraut) §
This feature is designed to detect collation version changes to avoid index corruption. Function
pg_database_collation_actual_version()reports the underlying operating system collation version, andALTER DATABASE ... REFRESHsets the recorded database collation version to match the operating system collation version.Allow ICU collations to be set as the default for clusters and databases (Peter Eisentraut) §
Previously, only libc-based collations could be selected at the cluster and database levels. ICU collations could only be used via explicit
COLLATEclauses.Add system view
pg_ident_file_mappingsto reportpg_ident.confinformation (Julien Rouhaud) §
E.41.3.1.1. Partitioning
Improve planning time for queries referencing partitioned tables (David Rowley) §
This change helps when only a few of many partitions are relevant.
Allow ordered scans of partitions to avoid sorting in more cases (David Rowley) §
Previously, a partitioned table with a
DEFAULTpartition or aLISTpartition containing multiple values could not be used for ordered partition scans. Now they can be used if such partitions are pruned during planning.Improve foreign key behavior of updates on partitioned tables that move rows between partitions (Amit Langote) §
Previously, such updates ran a delete action on the source partition and an insert action on the target partition. PostgreSQL will now run an update action on the partition root, providing cleaner semantics.
Fix
ALTER TRIGGER RENAMEon partitioned tables to properly rename triggers on all partitions (Arne Roland, Álvaro Herrera) §Also prohibit cloned triggers from being renamed.
E.41.3.1.2. Indexes
Allow btree indexes on system and TOAST tables to efficiently store duplicates (Peter Geoghegan) §
Previously de-duplication was disabled for these types of indexes.
Improve lookup performance of GiST indexes that were built using sorting (Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin) §
Allow unique constraints and indexes to treat
NULLvalues as not distinct (Peter Eisentraut) §Previously
NULLentries were always treated as distinct values, but this can now be changed by creating constraints and indexes usingUNIQUE NULLS NOT DISTINCT.Allow the
^@starts-with operator and thestarts_with()function to use btree indexes if using the C collation (Tom Lane) §Previously these could only use SP-GiST indexes.
E.41.3.1.3. Optimizer
Allow extended statistics to record statistics for a parent with all its children (Tomas Vondra, Justin Pryzby) §
Regular statistics already tracked parent and parent-plus-all-children statistics separately.
Add server variable
recursive_worktable_factorto allow the user to specify the expected size of the working table of a recursive query (Simon Riggs) §
E.41.3.1.4. General Performance
Allow hash lookup for
NOT INclauses with many constants (David Rowley, James Coleman) §Previously the code always sequentially scanned the list of values.
Allow
SELECT DISTINCTto be parallelized (David Rowley) §Speed up encoding validation of UTF-8 text by processing 16 bytes at a time (John Naylor, Heikki Linnakangas) §
This will improve text-heavy operations like
COPY FROM.Improve performance for sorts that exceed
work_mem(Heikki Linnakangas) § §When the sort data no longer fits in
work_mem, switch to a batch sorting algorithm that uses more output streams than before.Improve performance and reduce memory consumption of in-memory sorts (Ronan Dunklau, David Rowley, Thomas Munro, John Naylor) § § §
Allow WAL full page writes to use LZ4 and Zstandard compression (Andrey Borodin, Justin Pryzby) § §
This is controlled by the
wal_compressionserver setting.Add support for writing WAL using direct I/O on macOS (Thomas Munro) §
This only works if
max_wal_senders = 0andwal_level = minimal.Allow vacuum to be more aggressive in setting the oldest frozen and multi transaction id (Peter Geoghegan) §
Allow a query referencing multiple foreign tables to perform parallel foreign table scans in more cases (Andrey Lepikhov, Etsuro Fujita) §
Improve the performance of window functions that use
row_number(),rank(),dense_rank()andcount()(David Rowley) §Improve the performance of spinlocks on high-core-count ARM64 systems (Geoffrey Blake) §
E.41.3.1.5. Monitoring
Enable default logging of checkpoints and slow autovacuum operations (Bharath Rupireddy) §
This changes the default of
log_checkpointstoonand that oflog_autovacuum_min_durationto 10 minutes. This will cause even an idle server to generate some log output, which might cause problems on resource-constrained servers without log file rotation. These defaults should be changed in such cases.Generate progress messages in the server log during slow server starts (Nitin Jadhav, Robert Haas) § §
The messages report the cause of the delay. The time interval for notification is controlled by the new server variable
log_startup_progress_interval.Store cumulative statistics system data in shared memory (Kyotaro Horiguchi, Andres Freund, Melanie Plageman) § §
Previously this data was sent to a statistics collector process via UDP packets, and could only be read by sessions after transferring it via the file system. There is no longer a separate statistics collector process.
Add additional information to
VACUUM VERBOSEand autovacuum logging messages (Peter Geoghegan) § § §Add
EXPLAIN (BUFFERS)output for temporary file block I/O (Masahiko Sawada) §Allow log output in JSON format (Sehrope Sarkuni, Michael Paquier) §
The new setting is
log_destination = jsonlog.Allow
pg_stat_reset_single_table_counters()to reset the counters of relations shared across all databases (Sadhuprasad Patro) §Add wait events for local shell commands (Fujii Masao) §
The new wait events are used when calling
archive_command,archive_cleanup_command,restore_commandandrecovery_end_command.
E.41.3.1.6. Privileges
Allow table accesses done by a view to optionally be controlled by privileges of the view's caller (Christoph Heiss) §
Previously, view accesses were always treated as being done by the view's owner. That's still the default.
Allow members of the
pg_write_server_filespredefined role to perform server-side base backups (Dagfinn Ilmari Mannsåker) §Previously only superusers could perform such backups.
Allow
GRANTto grant permissions to change individual server variables viaSETandALTER SYSTEM(Mark Dilger) § §The new function
has_parameter_privilege()reports on this privilege.Add predefined role
pg_checkpointthat allows members to runCHECKPOINT(Jeff Davis) § §Previously checkpoints could only be run by superusers.
Allow members of the
pg_read_all_statspredefined role to access the viewspg_backend_memory_contextsandpg_shmem_allocations(Bharath Rupireddy) §Previously these views could only be accessed by superusers.
Allow
GRANTto grant permissions onpg_log_backend_memory_contexts()(Jeff Davis) §Previously this function could only be run by superusers.
E.41.3.1.7. Server Configuration
Add server variable
shared_memory_sizeto report the size of allocated shared memory (Nathan Bossart) § §Add server variable
shared_memory_size_in_huge_pagesto report the number of huge memory pages required (Nathan Bossart) § §This is only supported on Linux.
Honor server variable
shared_preload_librariesin single-user mode (Jeff Davis) §This change supports use of
shared_preload_librariesto load custom access methods and WAL resource managers, which would be essential for database access even in single-user mode.On Solaris, make the default setting of
dynamic_shared_memory_typebesysv(Thomas Munro) §The previous default choice,
posix, can result in spurious failures on this platform.Allow
postgres -Cto properly report runtime-computed values (Nathan Bossart) §Previously runtime-computed values
data_checksums,wal_segment_size, anddata_directory_modewould report values that would not be accurate on the running server. However, this does not work on a running server.
E.41.3.2. Streaming Replication and Recovery
Add support for LZ4 and Zstandard compression of server-side base backups (Jeevan Ladhe, Robert Haas) § § §
Run the checkpointer and bgwriter processes during crash recovery (Thomas Munro) §
This helps to speed up long crash recoveries.
Allow WAL processing to pre-fetch needed file contents (Thomas Munro) §
This is controlled by the server variable
recovery_prefetch.Allow archiving via loadable modules (Nathan Bossart) §
Previously, archiving was only done by calling shell commands. The new server variable
archive_librarycan be set to specify a library to be called for archiving.No longer require
IDENTIFY_SYSTEMto be run beforeSTART_REPLICATION(Jeff Davis) §
E.41.3.2.1. Logical Replication
Allow publication of all tables in a schema (Vignesh C, Hou Zhijie, Amit Kapila) § § §
For example, this syntax is now supported:
CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s1,s2.ALTER PUBLICATIONsupports a similar syntax. Tables added later to the listed schemas will also be replicated.Allow publication content to be filtered using a
WHEREclause (Hou Zhijie, Euler Taveira, Peter Smith, Ajin Cherian, Tomas Vondra, Amit Kapila) § § §Rows not satisfying the
WHEREclause are not published.Allow publication content to be restricted to specific columns (Tomas Vondra, Álvaro Herrera, Rahila Syed) §
Allow skipping of transactions on a subscriber using
ALTER SUBSCRIPTION ... SKIP(Masahiko Sawada) §Add support for prepared (two-phase) transactions to logical replication (Peter Smith, Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich) § § §
The new
CREATE_REPLICATION_SLOToption is calledTWO_PHASE. pg_recvlogical now supports a new--two-phaseoption during slot creation.Prevent logical replication of empty transactions (Ajin Cherian, Hou Zhijie, Euler Taveira) §
Previously, publishers would send empty transactions to subscribers if subscribed tables were not modified.
Add SQL functions to monitor the directory contents of logical replication slots (Bharath Rupireddy) §
The new functions are
pg_ls_logicalsnapdir(),pg_ls_logicalmapdir(), andpg_ls_replslotdir(). They can be run by members of the predefinedpg_monitorrole.Allow subscribers to stop the application of logical replication changes on error (Osumi Takamichi, Mark Dilger) §
This is enabled with the subscriber option
disable_on_errorand avoids possible infinite error loops during stream application.Adjust subscriber server variables to match the publisher so datetime and float8 values are interpreted consistently (Japin Li) §
Some publishers might be relying on inconsistent behavior.
Add system view
pg_stat_subscription_statsto report on subscriber activity (Masahiko Sawada) § §The new function
pg_stat_reset_subscription_stats()allows resetting these statistics counters.Suppress duplicate entries in the
pg_publication_tablessystem view (Hou Zhijie) §In some cases a partition could appear more than once.
E.41.3.3. Utility Commands
Add SQL
MERGEcommand to adjust one table to match another (Simon Riggs, Pavan Deolasee, Álvaro Herrera, Amit Langote) §This is similar to
INSERT ... ON CONFLICTbut more batch-oriented.Add support for
HEADERoption inCOPYtext format (Rémi Lapeyre) § §The new option causes the column names to be output, and optionally verified on input.
Add new WAL-logged method for database creation (Dilip Kumar) §
This is the new default method for copying the template database, as it avoids the need for checkpoints during database creation. However, it might be slow if the template database is large, so the old method is still available.
Allow
CREATE DATABASEto set the database OID (Shruthi Gowda, Antonin Houska) §Prevent
DROP DATABASE,DROP TABLESPACE, andALTER DATABASE SET TABLESPACEfrom occasionally failing during concurrent use on Windows (Thomas Munro) §Allow foreign key
ON DELETE SETactions to affect only specified columns (Paul Martinez) §Previously, all of the columns in the foreign key were always affected.
Allow
ALTER TABLEto modify a table'sACCESS METHOD(Justin Pryzby, Jeff Davis) §Properly call object access hooks when
ALTER TABLEcauses table rewrites (Michael Paquier) §Track dependencies on individual columns in the results of functions returning composite types (Tom Lane) §
Previously, if a view or rule contained a reference to a specific column within the result of a composite-returning function, that was not noted as a dependency; the view or rule was only considered to depend on the composite type as a whole. This meant that dropping the individual column would be allowed, causing problems in later use of the view or rule. The column-level dependency is now also noted, so that dropping such a column will be rejected unless the view is changed or dropped.
E.41.3.4. Data Types
Allow the scale of a
numericvalue to be negative, or greater than its precision (Dean Rasheed, Tom Lane) §This allows rounding of values to the left of the decimal point, e.g.,
'1234'::numeric(4, -2)returns 1200.Improve overflow detection when casting values to interval (Joe Koshakow) §
Change the I/O format of type
"char"for non-ASCII characters (Tom Lane) §Update the display width information of modern Unicode characters, like emojis (Jacob Champion) § §
Also update from Unicode 5.0 to 14.0.0. There is now an automated way to keep Postgres updated with Unicode releases.
E.41.3.5. Functions
Add multirange input to
range_agg()(Paul Jungwirth) §Add
MIN()andMAX()aggregates for thexid8data type (Ken Kato) §Add regular expression functions for compatibility with other relational systems (Gilles Darold, Tom Lane) §
The new functions are
regexp_count(),regexp_instr(),regexp_like(), andregexp_substr(). Some new optional arguments were also added toregexp_replace().Add the ability to compute the distance between
polygons(Tom Lane) §Add
to_char()format codesof,tzh, andtzm(Nitin Jadhav) §The upper-case equivalents of these were already supported.
When applying
AT TIME ZONEto atime with time zonevalue, use the transaction start time rather than wall clock time to determine whether DST applies (Aleksander Alekseev, Tom Lane) §This allows the conversion to be considered stable rather than volatile, and it saves a kernel call per invocation.
Ignore NULL array elements in
ts_delete()andsetweight()functions with array arguments (Jean-Christophe Arnu) §These functions effectively ignore empty-string array elements (since those could never match a valid lexeme). It seems consistent to let them ignore NULL elements too, instead of failing.
Add support for petabyte units to
pg_size_pretty()andpg_size_bytes()(David Christensen) §Change
pg_event_trigger_ddl_commands()to output references to other sessions' temporary schemas using the actual schema name (Tom Lane) §Previously this function reported all temporary schemas as
pg_temp, but it's misleading to use that for any but the current session's temporary schema.
E.41.3.6. PL/pgSQL
E.41.3.7. libpq
Allow IP address matching against a server certificate's Subject Alternative Name (Jacob Champion) §
Allow
PQsslAttribute()to report the SSL library type without requiring a libpq connection (Jacob Champion) §Change query cancellations sent by the client to use the same TCP settings as normal client connections (Jelte Fennema) §
This allows configured TCP timeouts to apply to query cancel connections.
Prevent libpq event callback failures from forcing an error result (Tom Lane) § §
E.41.3.8. Client Applications
E.41.3.8.1. psql
Improve performance of psql's
\copycommand, by sending data in larger chunks (Heikki Linnakangas) §Add
\dconfigcommand to report server variables (Mark Dilger, Tom Lane) § § §This is similar to the server-side
SHOWcommand, but it can process patterns to show multiple variables conveniently.Add
\getenvcommand to assign the value of an environment variable to a psql variable (Tom Lane) §Add
+option to the\lo_listand\dlcommands to show large-object privileges (Pavel Luzanov) §Add a pager option for the
\watchcommand (Pavel Stehule, Thomas Munro) §This is only supported on Unix and is controlled by the
PSQL_WATCH_PAGERenvironment variable.Make psql include intra-query double-hyphen comments in queries sent to the server (Tom Lane, Greg Nancarrow) § §
Previously such comments were removed from the query before being sent. Double-hyphen comments that are before any query text are not sent, and are not recorded as separate psql history entries.
Adjust psql so that Readline's meta-
#command will insert a double-hyphen comment marker (Tom Lane) §Previously a pound marker was inserted, unless the user had taken the trouble to configure a non-default comment marker.
Make psql output all results when multiple queries are passed to the server at once (Fabien Coelho) §
Previously, only the last query result was displayed. The old behavior can be restored by setting the
SHOW_ALL_RESULTSpsql variable tooff.After an error is detected in
--single-transactionmode, change the finalCOMMITcommand toROLLBACKonly ifON_ERROR_STOPis set (Michael Paquier) §Previously, detection of an error in a
-ccommand or-fscript file would lead to issuingROLLBACKat the end, regardless of the value ofON_ERROR_STOP.Improve psql's tab completion (Shinya Kato, Dagfinn Ilmari Mannsåker, Peter Smith, Koyu Tanigawa, Ken Kato, David Fetter, Haiying Tang, Peter Eisentraut, Álvaro Herrera, Tom Lane, Masahiko Sawada) § § § § § § § § § § § § § § § § § § § §
Limit support of psql's backslash commands to servers running PostgreSQL 9.2 or later (Tom Lane) §
Remove code that was only used when running with an older server. Commands that do not require any version-specific adjustments compared to 9.2 will still work.
E.41.3.8.2. pg_dump
Make pg_dump dump
publicschema ownership changes and security labels (Noah Misch) § §Improve performance of dumping databases with many objects (Tom Lane) § § §
This will also improve the performance of pg_upgrade.
Improve parallel pg_dump's performance for tables with large TOAST tables (Tom Lane) §
Add dump/restore option
--no-table-access-methodto force restore to only use the default table access method (Justin Pryzby) §Limit support of pg_dump and pg_dumpall to servers running PostgreSQL 9.2 or later (Tom Lane) §
E.41.3.9. Server Applications
Add new pg_basebackup option
--targetto control the base backup location (Robert Haas) §The new options are
serverto write the backup locally andblackholeto discard the backup (for testing).Allow pg_basebackup to do server-side gzip, LZ4, and Zstandard compression and client-side LZ4 and Zstandard compression of base backup files (Dipesh Pandit, Jeevan Ladhe) § § §
Client-side
gzipcompression was already supported.Allow pg_basebackup to compress on the server side and decompress on the client side before storage (Dipesh Pandit) §
This is accomplished by specifying compression on the server side and plain output format.
Allow pg_basebackup's
--compressoption to control the compression location (server or client), compression method, and compression options (Michael Paquier, Robert Haas) § § §Add the LZ4 compression method to pg_receivewal (Georgios Kokolatos) § §
This is enabled via
--compress=lz4and requires binaries to be built using--with-lz4.Add additional capabilities to pg_receivewal's
--compressoption (Georgios Kokolatos) §Improve pg_receivewal's ability to restart at the proper WAL location (Ronan Dunklau) §
Previously, pg_receivewal would start based on the WAL file stored in the local archive directory, or at the sending server's current WAL flush location. With this change, if the sending server is running Postgres 15 or later, the local archive directory is empty, and a replication slot is specified, the replication slot's restart point will be used.
Add pg_rewind option
--config-fileto simplify use when server configuration files are stored outside the data directory (Gunnar Bluth) §
E.41.3.9.1. pg_upgrade
Store pg_upgrade's log and temporary files in a subdirectory of the new cluster called
pg_upgrade_output.d(Justin Pryzby) § § §Previously such files were left in the current directory, requiring manual cleanup. Now they are automatically removed on successful completion of pg_upgrade.
Disable default status reporting during pg_upgrade operation if the output is not a terminal (Andres Freund) §
The status reporting output can be enabled for non-tty usage by using
--verbose.Make pg_upgrade report all databases with invalid connection settings (Jeevan Ladhe) §
Previously only the first database with an invalid connection setting was reported.
Make pg_upgrade preserve tablespace and database OIDs, as well as relation relfilenode numbers (Shruthi Gowda, Antonin Houska) § § §
Add a
--no-syncoption to pg_upgrade (Michael Paquier) §This is recommended only for testing.
Limit support of pg_upgrade to old servers running PostgreSQL 9.2 or later (Tom Lane) §
E.41.3.9.2. pg_waldump
Allow pg_waldump output to be filtered by relation file node, block number, fork number, and full page images (David Christensen, Thomas Munro) § §
Make pg_waldump report statistics before an interrupted exit (Bharath Rupireddy) §
For example, issuing a control-C in a terminal running
pg_waldump --stats --followwill report the current statistics before exiting. This does not work on Windows.Improve descriptions of some transaction WAL records reported by pg_waldump (Masahiko Sawada, Michael Paquier) §
Allow pg_waldump to dump information about multiple resource managers (Heikki Linnakangas) §
This is enabled by specifying the
--rmgroption multiple times.
E.41.3.10. Documentation
Add documentation for
pg_encoding_to_char()andpg_char_to_encoding()(Ian Lawrence Barwick) §
E.41.3.11. Source Code
Add support for continuous integration testing using cirrus-ci (Andres Freund, Thomas Munro, Melanie Plageman) §
Add configure option
--with-zstdto enable Zstandard builds (Jeevan Ladhe, Robert Haas, Michael Paquier) §Add an ABI identifier field to the magic block in loadable libraries, allowing non-community PostgreSQL distributions to identify libraries that are not compatible with other builds (Peter Eisentraut) §
An ABI field mismatch will generate an error at load time.
Create a new
pg_type.typcategoryvalue for"char"(Tom Lane) §Some other internal-use-only types have also been assigned to this category.
Add new protocol message
TARGETto specify a newCOPYmethod to be used for base backups (Robert Haas) §pg_basebackup now uses this method.
Add new protocol message
COMPRESSIONandCOMPRESSION_DETAILto specify the compression method and options (Robert Haas) § §Remove server support for old
BASE_BACKUPcommand syntax and base backup protocol (Robert Haas) § §Add support for extensions to set custom backup targets (Robert Haas) §
Allow extensions to define custom WAL resource managers (Jeff Davis) §
Add function
pg_settings_get_flags()to get the flags of server variables (Justin Pryzby) §On Windows, export all the server's global variables using
PGDLLIMPORTmarkers (Robert Haas) §Previously, only specific variables were accessible to extensions on Windows.
Require GNU make version 3.81 or later to build PostgreSQL (Tom Lane) §
Require OpenSSL to build the pgcrypto extension (Peter Eisentraut) §
Require Perl version 5.8.3 or later (Dagfinn Ilmari Mannsåker) §
Require Python version 3.2 or later (Andres Freund) §
E.41.3.12. Additional Modules
Improve amcheck sanity checks for TOAST tables (Mark Dilger) §
Add new module basebackup_to_shell as an example of a custom backup target (Robert Haas) § §
Add new module basic_archive as an example of performing archiving via a library (Nathan Bossart) §
Allow btree_gist indexes on boolean columns (Emre Hasegeli) § § §
These can be used for exclusion constraints.
Fix pageinspect's
page_header()to handle 32-kilobyte page sizes (Quan Zongliang) §Previously, improper negative values could be returned in certain cases.
Add counters for temporary file block I/O to pg_stat_statements (Masahiko Sawada) §
Add JIT counters to pg_stat_statements (Magnus Hagander) §
Add new module pg_walinspect (Bharath Rupireddy) §
This gives SQL-level output similar to pg_waldump.
Indicate the permissive/enforcing state in sepgsql log messages (Dave Page) §
E.41.3.12.1. postgres_fdw
Allow postgres_fdw to push down
CASEexpressions (Alexander Pyhalov) §Add server variable
postgres_fdw.application_nameto control the application name of postgres_fdw connections (Hayato Kuroda) § § §Previously the remote session's
application_namecould only be set on the remote server or via a postgres_fdw connection specification.postgres_fdw.application_namesupports some escape sequences for customization, making it easier to tell such connections apart on the remote server.Allow parallel commit on postgres_fdw servers (Etsuro Fujita) §
This is enabled with the
CREATE SERVERoptionparallel_commit.
E.41.4. Acknowledgments
The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues.
| Abhijit Menon-Sen |
| Adam Brusselback |
| Adam Mackler |
| Adrian Ho |
| Ahsan Hadi |
| Ajin Cherian |
| Alastair McKinley |
| Aleksander Alekseev |
| Ales Zeleny |
| Alex Kingsborough |
| Alex Kozhemyakin |
| Alexander Korotkov |
| Alexander Kukushkin |
| Alexander Lakhin |
| Alexander Nawratil |
| Alexander Pyhalov |
| Alexey Borzov |
| Alexey Ermakov |
| Aliaksandr Kalenik |
| Álvaro Herrera |
| Amit Kapila |
| Amit Khandekar |
| Amit Langote |
| Amul Sul |
| Anastasia Lubennikova |
| Anders Kaseorg |
| Andreas Dijkman |
| Andreas Grob |
| Andreas Seltenreich |
| Andrei Zubkov |
| Andres Freund |
| Andrew Alsup |
| Andrew Bille |
| Andrew Dunstan |
| Andrew Gierth |
| Andrew Kesper |
| Andrey Borodin |
| Andrey Lepikhov |
| Andrey Sokolov |
| Andy Fan |
| Anton Melnikov |
| Anton Voloshin |
| Antonin Houska |
| Arjan van de Ven |
| Arne Roland |
| Arthur Zakirov |
| Ashutosh Bapat |
| Ashutosh Sharma |
| Ashwin Agrawal |
| Asif Rehman |
| Asim Praveen |
| Atsushi Torikoshi |
| Aya Iwata |
| Bauyrzhan Sakhariyev |
| Benoit Lobréau |
| Bernd Dorn |
| Bertrand Drouvot |
| Bharath Rupireddy |
| Björn Harrtell |
| Boris Kolpackov |
| Boris Korzun |
| Brad Nicholson |
| Brar Piening |
| Bruce Momjian |
| Bruno da Silva |
| Bryn Llewellyn |
| Carl Sopchak |
| Cary Huang |
| Chapman Flack |
| Chen Jiaoqian |
| Chris Bandy |
| Chris Lowder |
| Christian Quest |
| Christoph Berg |
| Christoph Heiss |
| Christophe Pettus |
| Christopher Painter-Wakefield |
| Claudio Freire |
| Clemens Zeidler |
| Corey Huinker |
| Dag Lem |
| Dagfinn Ilmari Mannsåker |
| Dan Kubb |
| Daniel Cherniy |
| Daniel Gustafsson |
| Daniel Polski |
| Daniel Vérité |
| Daniel Westermann |
| Daniele Varrazzo |
| Daniil Anisimov |
| Danny Shemesh |
| Darafei Praliaskouski |
| Daria Lepikhova |
| Dave Cramer |
| Dave Page |
| David Christensen |
| David Fetter |
| David G. Johnston |
| David Rowley |
| David Steele |
| David Zhang |
| Dean Rasheed |
| Dian Fay |
| Dilip Kumar |
| Dipesh Pandit |
| Dmitry Dolgov |
| Dmitry Koval |
| Dmitry Marakasov |
| Dominique Devienne |
| Dong Wook |
| Drew DeVault |
| Eduard Català |
| Egor Chindyaskin |
| Egor Rogov |
| Ekaterina Kiryanova |
| Elena Indrupskaya |
| Elvis Pranskevichus |
| Emmanuel Quincerot |
| Emre Hasegeli |
| Eric Mutta |
| Erica Zhang |
| Erik Rijkers |
| Erki Eessaar |
| Etsuro Fujita |
| Euler Taveira |
| Fabien Coelho |
| Fabrice Chapuis |
| Fabrice Fontaine |
| Fabrízio de Royes Mello |
| Feike Steenbergen |
| Filip Gospodinov |
| Florin Irion |
| Floris Van Nee |
| Frédéric Yhuel |
| Gabriela Serventi |
| Gaurab Dey |
| Geoff Winkless |
| Geoffrey Blake |
| Georgios Kokolatos |
| Gilles Darold |
| Greg Nancarrow |
| Greg Rychlewski |
| Greg Sabino Mullane |
| Greg Stark |
| Gregory Smith |
| Guillaume Lelarge |
| Gunnar Bluth |
| Gurjeet Singh |
| Haiyang Wang |
| Haiying Tang |
| Hannu Krosing |
| Hans Buschmann |
| Hayato Kuroda |
| Heath Lord |
| Heikki Linnakangas |
| Herwig Goemans |
| Himanshu Upadhyaya |
| Holly Roberts |
| Hou Zhijie |
| Hubert Lubaczewski |
| Ian Barwick |
| Ian Campbell |
| Ibrar Ahmed |
| Ildus Kurbangaliev |
| Ilya Anfimov |
| Itamar Gafni |
| Jacob Champion |
| Jaime Casanova |
| Jakub Wartak |
| James Coleman |
| James Hilliard |
| James Inform |
| Jan Piotrowski |
| Japin Li |
| Jason Harvey |
| Jason Kim |
| Jean-Christophe Arnu |
| Jeevan Ladhe |
| Jeff Davis |
| Jeff Janes |
| Jehan-Guillaume de Rorthais |
| Jelte Fennema |
| Jeremy Evans |
| Jeremy Schneider |
| Jian Guo |
| Jian He |
| Jimmy Yih |
| Jiri Fejfar |
| Jitka Plesníková |
| Joe Conway |
| Joe Wildish |
| Joel Jacobson |
| Joey Bodoia |
| John Naylor |
| Jonathan Katz |
| Josef Simanek |
| Joseph Koshakow |
| Josh Soref |
| Joshua Brindle |
| Juan José Santamaría Flecha |
| Julien Rouhaud |
| Julien Roze |
| Junwang Zhao |
| Jürgen Purtz |
| Justin Pryzby |
| Ken Kato |
| Kevin Burke |
| Kevin Grittner |
| Kevin Humphreys |
| Kevin McKibbin |
| Kevin Sweet |
| Kevin Zheng |
| Klaudie Willis |
| Konstantin Knizhnik |
| Konstantina Skovola |
| Kosei Masumura |
| Kotaro Kawamoto |
| Koyu Tanigawa |
| Kuntal Ghosh |
| Kyotaro Horiguchi |
| Lars Kanis |
| Lauren Fliksteen |
| Laurent Hasson |
| Laurenz Albe |
| Leslie Lemaire |
| Liam Bowen |
| Lingjie Qiang |
| Liu Huailing |
| Louis Jachiet |
| Lukas Fittl |
| Ma Liangzhu |
| Maciek Sakrejda |
| Magnus Hagander |
| Mahendra Singh Thalor |
| Maksim Milyutin |
| Marc Bachmann |
| Marcin Krupowicz |
| Marcus Gartner |
| Marek Szuba |
| Marina Polyakova |
| Mario Emmenlauer |
| Mark Dilger |
| Mark Murawski |
| Mark Wong |
| Markus Wanner |
| Markus Winand |
| Martijn van Oosterhout |
| Martin Jurca |
| Martin Kalcher |
| Martín Marqués |
| Masahiko Sawada |
| Masahiro Ikeda |
| Masao Fujii |
| Masaya Kawamoto |
| Masayuki Hirose |
| Matthias van de Meent |
| Matthijs van der Vleuten |
| Maxim Orlov |
| Maxim Yablokov |
| Melanie Plageman |
| Michael Banck |
| Michael Harris |
| Michael J. Sullivan |
| Michael Meskes |
| Michael Mühlbeyer |
| Michael Paquier |
| Michael Powers |
| Mike Fiedler |
| Mike Oh |
| Mikhail Kulagin |
| Miles Delahunty |
| Naoki Okano |
| Nathan Bossart |
| Nathan Long |
| Nazir Bilal Yavuz |
| Neha Sharma |
| Neil Chen |
| Nicola Contu |
| Nicolas Lutic |
| Nikhil Benesch |
| Nikhil Shetty |
| Nikhil Sontakke |
| Nikita Glukhov |
| Nikolai Berkoff |
| Nikolay Samokhvalov |
| Nikolay Shaplov |
| Nitin Jadhav |
| Noah Misch |
| Noboru Saito |
| Noriyoshi Shinoda |
| Olaf Bohlen |
| Olly Betts |
| Onder Kalaci |
| Oskar Stenberg |
| Otto Kekalainen |
| Paul Guo |
| Paul Jungwirth |
| Paul Martinez |
| Pavan Deolasee |
| Pavel Borisov |
| Pavel Luzanov |
| Pavel Stehule |
| Peter Eisentraut |
| Peter Geoghegan |
| Peter Slavov |
| Peter Smith |
| Petr Jelínek |
| Phil Florent |
| Phil Krylov |
| Pierre-Aurélien Georges |
| Prabhat Sahu |
| Quan Zongliang |
| Rachel Heaton |
| Rahila Syed |
| Rajakavitha Kodhandapani |
| Rajkumar Raghuwanshi |
| Ranier Vilela |
| Rei Kamigishi |
| Reid Thompson |
| Rémi Lapeyre |
| Renan Soares Lopes |
| Richard Guo |
| Richard Wesley |
| RKN Sai Krishna |
| Robert Haas |
| Robert Treat |
| Roberto Mello |
| Robins Tharakan |
| Roger Mason |
| Roman Zharkov |
| Ronan Dunklau |
| Rui Zhao |
| Ryan Kelly |
| Ryo Matsumura |
| Ryohei Takahashi |
| Sadhuprasad Patro |
| Sait Talha Nisanci |
| Sami Imseih |
| Sandeep Thakkar |
| Sebastian Kemper |
| Sehrope Sarkuni |
| Sergei Kornilov |
| Sergei Shoulbakov |
| Sergey Shinderuk |
| Shay Rojansky |
| Shenhao Wang |
| Shi Yu |
| Shinya Kato |
| Shruthi Gowda |
| Simon Perepelitsa |
| Simon Riggs |
| Sirisha Chamarthi |
| Soumyadeep Chakraborty |
| Stan Hu |
| Stas Kelvich |
| Stefen Hillman |
| Stephen Frost |
| Steve Chavez |
| Sumanta Mukherjee |
| Suraj Khamkar |
| Suraj Kharage |
| Sven Klemm |
| Takamichi Osumi |
| Takayuki Tsunakawa |
| Takeshi Ideriha |
| Tatsuhiro Nakamori |
| Tatsuhito Kasahara |
| Tatsuo Ishii |
| Tatsuro Yamada |
| Teja Mupparti |
| Teodor Sigaev |
| Thibaud Walkowiak |
| Thom Brown |
| Thomas McKay |
| Thomas Munro |
| Tim McNamara |
| Timo Stolz |
| Timur Khanjanov |
| Tom Lane |
| Tomas Barton |
| Tomas Vondra |
| Tony Reix |
| Troy Frericks |
| Tushar Ahuja |
| Victor Wagner |
| Victor Yegorov |
| Vignesh C |
| Vik Fearing |
| Vincas Dargis |
| Vitaly Burovoy |
| Vitaly Voronov |
| Vladimir Sitnikov |
| Wang Ke |
| Wei Sun |
| Wei Wang |
| Whale Song |
| Will Mortensen |
| Wolfgang Walther |
| Yanliang Lei |
| Yaoguang Chen |
| Yogendra Suralkar |
| YoungHwan Joo |
| Yugo Nagata |
| Yukun Wang |
| Yura Sokolov |
| Yusuke Egashira |
| Yuzuko Hosoya |
| Zhang Mingli |
| Zhang Wenjie |
| Zhihong Yu |
| Zhiyong Wu |