За несколько недель до выхода Postgres 19 Beta 4 коммиттеры откатили из ветки релиза несколько крупных возможностей, включая GROUP BY ALL, SQL/PGQрасширение SQL для запросов к графам свойств, хранящимся в обычных таблицах и функции интроспекции DDLВозможность получать команды определения объектов базы данных, таких как роли, tablespace и базы данных, через специальные функции.. Часть откатов затронула уже принятый код, а один — 47 коммитов сразу в двух ветках. Параллельно в обсуждениях сообщества возникла тема нехватки ревьюеров: патчи попадают в дерево без содержательного разбора и откатываются уже после того, как в них обнаруживаются ошибки.
Что именно откатили
Три функции для интроспекции DDL — получения команд определения ролей, tablespacesобласть хранения файлов базы данных на диске и баз данных — откатил Andrew Dunstan коммитом db169985c1 12 сентября.
GROUP BY ALL откатили иначе: Tom Lane предложил вернуть функцию в v20, Daniel Gustafsson подготовил откат, сохранив попутные правки документации, а Lane выждал день на случай возражений и запушил с комментарием «Hearing nothing, pushed».
SQL/PGQ — механизм графов свойствпредставление данных в виде вершин и рёбер с метками и свойствами, по которому можно выполнять запросы — откатил Peter Eisentraut коммитом 2b9e1aff4d 7 сентября. Откат размотал 47 коммитов сразу в REL_19_STABLE и master.
Кроме этого, v19 сохраняет per-row fast pathпострочная быстрая проверка внешних ключей без пакетной обработки для проверок внешних ключей, но теряет batching: изменения запушил Langote 10-го числа. Также утрачена возможность синтаксически выполнять MERGE и SPLIT для партиций.
Почему откатили каждый патч
Для GROUP BY ALL Chao Li 29 июня сообщил, что функция уходила в отдельную ветку при разборе группировки запроса, из-за чего пропускалась логика копирования семантики оператора из совпадающего элемента ORDER BY. Запрос с явной группирующей колонкой и ORDER BY a USING operator(pg_catalog.*<) давал две строки, тогда как GROUP BY ALL возвращал одну.
Для SQL/PGQ разработчики обнаружили, что инварианты проверялись только на этапе CREATE. Сценарий: добавить первичный ключ, создать граф свойств, удалить ключ — граф остаётся. Добавить столбец, чтобы счётчики свойств метки совпали, создать граф, удалить столбец — рабочий запрос GRAPH_TABLEконструкция SQL/PGQ, которая выполняет запрос к графу свойств и опирается на согласованность свойств метки с текущей схемой начинает падать. Melanie Plageman объяснила удаление тем, что несколько сообщённых проблем ставят вопросы дизайна и поведения, которые сообщество и авторы патчей ещё не разрешили, и времени на исправление до релиза недостаточно. Ashutosh Bapat отметил, что исправление может потребовать catversion bumpизменение версии системного каталога, после которого существующие данные каталога считаются несовместимыми с новым кодом, поскольку граф свойств, созданный до изменения, будет иметь эти атрибуты, а после — нет.
Что считается неприемлемым после feature freeze
Патч, которому всё ещё требуется catversion bump через четыре месяца после feature freezeмомент, после которого в релиз перестают принимать новые функции, по мнению автора разбора, не должен попадать в v19. Такая необходимость указывает на критический недостаток, который должен был быть обнаружен раньше, и должна была привести к автоматическому откату, как только проблема обнаружилась в середине code freeze. У других отозванных функций истории похожие: критический изъян прошёл первоначальное ревью.
Feature freeze для Postgres 19 состоялся 8 апреля. По странице open items, беты выходили так: Beta 1 — 4 июня, Beta 2 — 16 июля, Beta 3 — 13 августа, Beta 4 — 24 сентября. RC 1 и GA оба помечены как «TBD» через пять месяцев после feature freeze. Для сравнения: Postgres 18 выпустил три беты и сразу перешёл к release candidate. Roadmap при этом всё ещё указывает плановую дату следующего мажорного релиза — октябрь 2026 года.
Как устроен процесс приёма патчей
CommitFest — периодический перерыв в разработке PostgreSQL, посвящённый рецензированию и коммиту патчей, а не новой разработке. CF проводятся, чтобы вся работа для релиза получала относительно быстрый отзыв и не накапливалась к концу цикла. В типичном цикле мажорного релиза проходит пять CommitFest'ов: в июле, сентябре, ноябре, январе и марте. Мартовский — последний, после него наступает feature freeze и начинается бета-период.
Рецензирование открыто для всех, но применить или отклонить патч может только коммиттер, поэтому рецензии обычно лишь дополнительный отзыв. Когда CF заканчивается, всё, что ещё ждёт автора и имеет хотя бы одну рецензию, получает статус Returned with Feedbackпатч возвращён автору с отзывом рецензентов, чтобы тот внёс изменения и прислал его в следующий цикл. Патч считается активнымактивным, если по нему была переписка за последние 30 дней и он не проваливал CI более 21 дня. После feature freeze коммиттеры могут отозвать патч.
Перегрузка ревьюеров
В обсуждении описан случай: патч RI fast-path FKпроверка ссылочной целостности внешних ключей по быстрому пути, построчная, без пакетной обработки закоммитили без ревью, затем откатили из-за ошибок. Noah Misch, единственный ревьюер в списке с реальным контекстом по этому коду, отказался от ревью, сославшись на нехватку времени. Патч никто не взял — ни в тот день, ни на той неделе. Через два дня Langote закоммитил патчи, рассудив, что они исправляют живые баги и лучше раньше, чем позже. Результат — тихая порча внешних ключей из-за ревью, которое никто не успел сделать.
Причину перегрузки автор разбора видит в том, что благодаря AI участники могут отправлять больше патчей за цикл, и каждый патч проходит более исчерпывающую автоматизированную проверку. Число отозванных патчей выросло с 21 до 51 — рост на 62% на фоне падающей частоты коммитов. При этом большинство, если не все, крупные фичи в 19 были написаны, отревьюены и протестированы до того, как AI-инструменты стали доступны или настолько хороши, как сейчас.
Дополнительная проверка угрожает выбросить патчи, которые раньше выжили бы: исторически часть таких багов всплыла бы месяцами позже и была бы исправлена точечным релизом. Обсуждаются два варианта — сдвинуть релиз Postgres 19 дальше или удалить сомнительные патчи, чтобы сохранить обычную каденцию. Haas признал, что нехватка внимания коммиттеров реальна и для него, но возразил, что выпуск необычно багованного релиза, вероятно, контрпродуктивен с точки зрения пропускной способности ревью.
Что это значит для разработчиков
Откаты затрагивают обе ветки — и REL_19_STABLE, и master. Проект прямо предупреждает: во время бета-цикла функции могут меняться несовместимо или удаляться полностью. Код, опирающийся на удалённые функции, перестанет работать после отката.
Открытые вопросы
Из десяти категорий функций, которыми восторгался автор разбора, многие всё ещё в дереве, но некоторые уже удалены: GROUP BY ALL, синтаксические MERGE и SPLIT для партиций, интроспекция DDL ролей, tablespace и баз данных. Сколько ещё функций выживет — нерешённый вопрос. RC 1 и GA не определены. Отдельно упоминается, что Amit Langote закрыл open item 22-го числа, и он оставался закрытым около четырёх дней, после чего был снова открыт.