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 (Жюльен Руо) §

  • Ускорение планирования запросов, обращающихся к секционированным таблицам (Дэвид Роули) §

    Эффект этого изменения заметен, только когда затрагивается лишь несколько секций из множества.

  • Возможность упорядоченного сканирования секций, что позволяет избежать сортировки ещё в ряде случаев (Дэвид Роули) §

    Ранее наличие в секционированной таблице секции 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 (Джефф Девис) §

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

    Например, теперь поддерживается синтаксис: 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

  • Исправление поведения переменных PL/pgSQL с пометкой CONSTANT (Том Лейн) §

    Ранее переменную можно было использовать в качестве выходного параметра в CALL или переменной refcursor в OPEN, несмотря на её свойство неизменяемости (CONSTANT).

E.41.3.7. libpq

  • Возможность сверить IP-адрес сервера с альтернативным именем субъекта, указанным в сертификате сервера (Джейкоб Чемпион) §

  • Возможность узнать у PQsslAttribute() тип библиотеки SSL, не устанавливая соединение libpq (Джейкоб Чемпион) §

  • Использование при передаче команды отмены запроса тех же параметров TCP, что используются для обычных клиентских подключений (Йелте Феннема) §

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

  • Предотвращение изменения объекта результата при возникновении ошибок в обработчике событий libpq (Том Лейн) §§

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

  • Возможность повторения транзакций в pgbench после ошибок сериализации или взаимоблокировки (Юго Нагата, Марина Полякова) §

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 MERGE command.

  • 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 PUBLIC creation permission on the public schema (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 CREATE permission on the public schema to adopt this new default. For new databases having no need to defend against insider threats, granting CREATE permission will yield the behavior of prior releases.

  • Change the owner of the public schema to be the new pg_database_owner role (Noah Misch) §

    This allows each database's owner to have ownership privileges on the public schema 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 to pg_backup_start()/pg_backup_stop(), and the functions pg_backup_start_time() and pg_is_in_backup() have been removed.

  • Increase hash_mem_multiplier default to 2.0 (Peter Geoghegan) §

    This allows query hash operations to use more work_mem memory than other operations.

  • Remove server-side language plpython2u and generic Python language plpythonu (Andres Freund) §

    Python 2.x is no longer supported. While the original intent of plpythonu was that it could eventually refer to plpython3u, 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 VIEW from 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 123abc would be interpreted as 123 followed by a separate token abc.

  • Adjust JSON numeric literal processing to match the SQL/JSON-standard (Peter Eisentraut) §

    This accepts numeric formats like .1 and 1., and disallows trailing junk after numeric literals, like 1.type().

  • When interval input provides a fractional value for a unit greater than months, round to the nearest month (Bruce Momjian) §

    For example, convert 1.99 years to 2 years, not 1 year 11 months as before.

  • Improve consistency of interval parsing with trailing periods (Tom Lane) §

    Numbers with trailing periods were rejected on some platforms.

  • Mark the interval output function as stable, not immutable, since it depends on IntervalStyle (Tom Lane) §

    This will, for example, cause creation of indexes relying on the text output of interval values to fail.

  • Detect integer overflow in interval justification functions (Joe Koshakow) §

    The affected functions are justify_interval(), justify_hours(), and justify_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 OPTION privilege 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 OPTION privilege.

  • 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 UPDATE and DELETE logical replication operations on tables where the subscription owner does not have SELECT permission on the table (Jeff Davis) §

    UPDATE and DELETE commands typically involve reading the table as well, so require the subscription owner to have table SELECT permission.

  • When EXPLAIN references the session's temporary object schema, refer to it as pg_temp (Amul Sul) §

    Previously the actual schema name was reported, leading to inconsistencies across sessions.

  • Fix pg_statio_all_tables to 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 HOME environment variable to find the user's home directory (Anders Kaseorg) §

    If HOME is 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-snapshots option (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-transaction mode, change the final COMMIT command to ROLLBACK only if ON_ERROR_STOP is 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, and ALTER DATABASE ... REFRESH sets 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 COLLATE clauses.

  • Add system view pg_ident_file_mappings to report pg_ident.conf information (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 DEFAULT partition or a LIST partition 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.

  • Allow CLUSTER on partitioned tables (Justin Pryzby) § §

  • Fix ALTER TRIGGER RENAME on 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 NULL values as not distinct (Peter Eisentraut) §

    Previously NULL entries were always treated as distinct values, but this can now be changed by creating constraints and indexes using UNIQUE NULLS NOT DISTINCT.

  • Allow the ^@ starts-with operator and the starts_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_factor to 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 IN clauses with many constants (David Rowley, James Coleman) §

    Previously the code always sequentially scanned the list of values.

  • Allow SELECT DISTINCT to 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_compression server setting.

  • Add support for writing WAL using direct I/O on macOS (Thomas Munro) §

    This only works if max_wal_senders = 0 and wal_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() and count() (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_checkpoints to on and that of log_autovacuum_min_duration to 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 VERBOSE and 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_command and recovery_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_files predefined role to perform server-side base backups (Dagfinn Ilmari Mannsåker) §

    Previously only superusers could perform such backups.

  • Allow GRANT to grant permissions to change individual server variables via SET and ALTER SYSTEM (Mark Dilger) § §

    The new function has_parameter_privilege() reports on this privilege.

  • Add predefined role pg_checkpoint that allows members to run CHECKPOINT (Jeff Davis) § §

    Previously checkpoints could only be run by superusers.

  • Allow members of the pg_read_all_stats predefined role to access the views pg_backend_memory_contexts and pg_shmem_allocations (Bharath Rupireddy) §

    Previously these views could only be accessed by superusers.

  • Allow GRANT to grant permissions on pg_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_size to report the size of allocated shared memory (Nathan Bossart) § §

  • Add server variable shared_memory_size_in_huge_pages to report the number of huge memory pages required (Nathan Bossart) § §

    This is only supported on Linux.

  • Honor server variable shared_preload_libraries in single-user mode (Jeff Davis) §

    This change supports use of shared_preload_libraries to 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_type be sysv (Thomas Munro) §

    The previous default choice, posix, can result in spurious failures on this platform.

  • Allow postgres -C to properly report runtime-computed values (Nathan Bossart) §

    Previously runtime-computed values data_checksums, wal_segment_size, and data_directory_mode would 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_library can be set to specify a library to be called for archiving.

  • No longer require IDENTIFY_SYSTEM to be run before START_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 PUBLICATION supports a similar syntax. Tables added later to the listed schemas will also be replicated.

  • Allow publication content to be filtered using a WHERE clause (Hou Zhijie, Euler Taveira, Peter Smith, Ajin Cherian, Tomas Vondra, Amit Kapila) § § §

    Rows not satisfying the WHERE clause 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_SLOT option is called TWO_PHASE. pg_recvlogical now supports a new --two-phase option 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(), and pg_ls_replslotdir(). They can be run by members of the predefined pg_monitor role.

  • 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_error and 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_stats to 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_tables system view (Hou Zhijie) §

    In some cases a partition could appear more than once.

E.41.3.3. Utility Commands

  • Add SQL MERGE command to adjust one table to match another (Simon Riggs, Pavan Deolasee, Álvaro Herrera, Amit Langote) §

    This is similar to INSERT ... ON CONFLICT but more batch-oriented.

  • Add support for HEADER option in COPY text 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 DATABASE to set the database OID (Shruthi Gowda, Antonin Houska) §

  • Prevent DROP DATABASE, DROP TABLESPACE, and ALTER DATABASE SET TABLESPACE from occasionally failing during concurrent use on Windows (Thomas Munro) §

  • Allow foreign key ON DELETE SET actions to affect only specified columns (Paul Martinez) §

    Previously, all of the columns in the foreign key were always affected.

  • Allow ALTER TABLE to modify a table's ACCESS METHOD (Justin Pryzby, Jeff Davis) §

  • Properly call object access hooks when ALTER TABLE causes table rewrites (Michael Paquier) §

  • Allow creation of unlogged sequences (Peter Eisentraut) §

  • 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 numeric value 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() and MAX() aggregates for the xid8 data 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(), and regexp_substr(). Some new optional arguments were also added to regexp_replace().

  • Add the ability to compute the distance between polygons (Tom Lane) §

  • Add to_char() format codes of, tzh, and tzm (Nitin Jadhav) §

    The upper-case equivalents of these were already supported.

  • When applying AT TIME ZONE to a time with time zone value, 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() and setweight() 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() and pg_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

  • Fix enforcement of PL/pgSQL variable CONSTANT markings (Tom Lane) §

    Previously, a variable could be used as a CALL output parameter or refcursor OPEN variable despite being marked CONSTANT.

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

  • Allow pgbench to retry after serialization and deadlock failures (Yugo Nagata, Marina Polyakova) §

E.41.3.8.1. psql
  • Improve performance of psql's \copy command, by sending data in larger chunks (Heikki Linnakangas) §

  • Add \dconfig command to report server variables (Mark Dilger, Tom Lane) § § §

    This is similar to the server-side SHOW command, but it can process patterns to show multiple variables conveniently.

  • Add \getenv command to assign the value of an environment variable to a psql variable (Tom Lane) §

  • Add + option to the \lo_list and \dl commands to show large-object privileges (Pavel Luzanov) §

  • Add a pager option for the \watch command (Pavel Stehule, Thomas Munro) §

    This is only supported on Unix and is controlled by the PSQL_WATCH_PAGER environment 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_RESULTS psql variable to off.

  • After an error is detected in --single-transaction mode, change the final COMMIT command to ROLLBACK only if ON_ERROR_STOP is set (Michael Paquier) §

    Previously, detection of an error in a -c command or -f script file would lead to issuing ROLLBACK at the end, regardless of the value of ON_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 public schema 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-method to 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 --target to control the base backup location (Robert Haas) §

    The new options are server to write the backup locally and blackhole to 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 gzip compression 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 --compress option 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=lz4 and requires binaries to be built using --with-lz4.

  • Add additional capabilities to pg_receivewal's --compress option (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-file to 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-sync option 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 --follow will 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 --rmgr option multiple times.

E.41.3.10. Documentation

  • Add documentation for pg_encoding_to_char() and pg_char_to_encoding() (Ian Lawrence Barwick) §

  • Document the ^@ starts-with operator (Tom Lane) §

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-zstd to 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.typcategory value for "char" (Tom Lane) §

    Some other internal-use-only types have also been assigned to this category.

  • Add new protocol message TARGET to specify a new COPY method to be used for base backups (Robert Haas) §

    pg_basebackup now uses this method.

  • Add new protocol message COMPRESSION and COMPRESSION_DETAIL to specify the compression method and options (Robert Haas) § §

  • Remove server support for old BASE_BACKUP command 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 PGDLLIMPORT markers (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

  • Allow amcheck to check sequences (Mark Dilger) §

  • 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 CASE expressions (Alexander Pyhalov) §

  • Add server variable postgres_fdw.application_name to control the application name of postgres_fdw connections (Hayato Kuroda) § § §

    Previously the remote session's application_name could only be set on the remote server or via a postgres_fdw connection specification. postgres_fdw.application_name supports 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 SERVER option parallel_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
FAQ