PostgreSQL 17: изменения в ядре
В этом разделе представлены изменения ядра PostgreSQL 17, включенные в СУБД Pangolin версии 7.1.0.
Миграция на версию 17
Версия 17 содержит ряд изменений, способных нарушить совместимость с предыдущими релизами. Ниже перечислены ключевые аспекты, на которые следует обратить внимание:
Изменение | Описание |
Использование функциями безопасного пути поиска ( | Это изменение помогает предотвратить небезопасный доступ при выполнении операций по обслуживанию базы данных: |
Ограничение использования | Кроме того, теперь запрещается многократное использование пустых единиц измерения в значениях типа |
Удаление серверной переменной | Эта переменная позволяла процессу |
Изменение обработки статуса суперпользователя для начального пользователя сеанса командой | Теперь поведение команды зависит от наличия статуса суперпользователя у пользователя в момент выполнения команды |
Удаление функциональности симуляции поддержки пользователей на уровне отдельных БД (Натан Боссарт) § | Эта функциональность ( |
Удаление дополнительного модуля adminpack (Даниэль Густафссон) § | Ранее этот модуль использовался инструментом pgAdmin III, поддержка которого закончилась |
Удаление значения | Это значение было эквивалентно |
Изменение в обработке границ файлов двумя функциями, связанными с именами файлов WAL (Кетаро Хоригути, Андрес Фройнд, Брюс Момджян) § | Раньше функции |
Удаление ставшей ненужной серверной переменной | |
Удаление столбца | |
Изменение меток для вывода режимов блокирования в модуле | |
Удаление | Эти столбцы считаются избыточными по отношению к аналогичным столбцам в представлении |
Переименование столбцов статистики времени ввода-вывода, связанного с чтением и записью блоков данных, в представлении pg_stat_statements (Назир Билал Явуз) § | Столбец |
Отображение цели сбора статистики по умолчанию как | |
Переименование | |
Переименование столбцов | |
Переименование столбцов SLRU в системном представлении | Кроме того, изменились и имена столбцов, которые принимает функция |
Изменения в версии 17
Оптимизатор
Изменение | Описание |
Возможность для оптимизатора улучшать планы с CTE с учетом статистики и порядка сортировки столбцов, из которых выводятся строки в ранних частях запроса (Цзянь Гуо, Ричард Гуо, Том Лейн) § § | |
Улучшение оптимизации запросов с условиями | Теперь оптимизатор удаляет ограничение |
Возможность отсекать секции при использовании условий | |
Улучшение оптимизации запросов с использованием операторов включения в диапазон | |
Возможность преобразования коррелирующих подзапросов | |
Улучшение оптимизации запросов с предложением | |
Увеличение числа случаев, в которых можно запускать узлы запросов в параллельном режиме (Том Лейн) § | |
Возможность упорядочивать столбцы | Это поведение отключается серверной переменной |
Возможность запросов с | |
Корректировка вычисления количества сортируемых строк в планах MergeAppend (Александр Кузьменков) § | |
Использование индексов GiST и SP-GiST для инкрементальной сортировки (Мирослав Бендик) § | Это улучшение особенно полезно в запросах с |
Добавление столбцов в представление |
Индексы
Изменение | Описание |
Более эффективная обработка индексами B-tree запросов множества значений, таких как значения, указанные в предложениях | |
Создание индексов BRIN с использованием параллельных исполнителей (Томаш Вондра, Маттиас ван де Меент) § |
Общая производительность
Изменение | Описание |
Более эффективное удаление и заморозка кортежей в процессе | Теперь в процессе очистки генерируется меньше трафика WAL |
Более эффективное хранение ссылок на кортежи процессом очистки (Масахико Савада, Джон Нейлор) § § § § | Кроме того, для процесса очистки удалено скрытое ограничение памяти в 1 ГБ, ранее действовавшее даже при повышенных значениях |
Оптимизация очистки отношений без индексов (Мелани Плейгман) § | |
Увеличение значения по умолчанию до 2 МБ для | |
Улучшение производительности при проверке ролей с членством во множестве ролей (Натан Боссарт) § | |
Улучшение производительности записи в WAL в условиях высокой конкуренции за ресурсы (Бхарат Рупиредди) § | |
Улучшение производительности при передаче клиенту больших блоков данных (Мелих Мутлу) § | |
Возможность объединять операции чтения данных файловой системы с помощью |
Мониторинг
Изменение | Описание |
Новое системное представление | В это представление были перенесены некоторые столбцы из |
Улучшение управления сбросом статистики (Атсуши Торикоши, Бхарат Рупиредди) § § § | Теперь функции |
Добавление в журнал сообщений, связанных с восстановлением WAL из резервных копий (Андрес Фройнд) § | |
Добавление строки журнала | |
Добавление сообщений журнала о получении и освобождении слотов репликации процессами | Чтобы включить запись таких сообщений, используется серверная переменная |
Добавление системного представления | Оно предоставляет описание событий ожидания, которые отображаются в |
Добавление событий ожидания для задержек контрольных точек (Томас Манро) § | |
Возможность отслеживать обработку индексов в процессе очистки (Сами Имсейх) § | Эту информацию можно найти в столбцах |
Права
Изменение | Описание |
Предоставление права на выполнение операций по обслуживанию БД (Натан Боссарт) § | Для этого можно выдать право |
Возможность для ролей с членством в роли |
Конфигурация
Изменение | Описание |
Добавление системной переменной | |
Возможность использовать | Это также можно делать с помощью |
Добавление серверной переменной | |
Добавление платформонезависимого провайдера правил сортировки builtin (Джефф Девис) § § § § | Провайдер поддерживает правила сортировки C и C.UTF-8 |
Добавление серверной переменной | Используется, когда для |
Добавление серверной переменной, отключающей событийные триггеры (Даниэль Густафссон) § | Переменная |
Возможность регулировать размеры SLRU-кешей (Андрей Бородин, Дилип Кумар, Альваро Эррера) § | Добавлены серверные переменные |
Потоковая репликация и восстановление
Изменение | Описание |
Поддержка инкрементального резервного копирования файловой системы (Роберт Хаас, Якуб Вартак, Томаш Вондра) § § | Для создания инкрементальных резервных копий используется новый ключ |
Возможность создания файлов сводок WAL (Роберт Хаас, Натан Боссарт, Хуберт Любачевски) § § § § | Эти файлы содержат информацию о номерах блоков, измененных в определенном диапазоне LSN, которые используются при инкрементальном резервном копировании. Для настройки функциональности добавлены серверные переменные |
Добавление системного идентификатора в файлы манифестов копий файловой системы (Амул Сул) § | Это полезно для обнаружения попыток использования неверных журналов WAL |
Указание значения параметра строки подключения | |
Добавление столбца | |
Добавление столбца | |
Добавление функции | |
Добавление свойства |
Логическая репликация
Изменение | Описание |
Добавление приложения | |
Возможность миграции рабочих слотов и подписок логической репликации | Теперь репликация может продолжаться сразу после миграции. Поддерживается для кластеров PostgreSQL, начиная с версии 17 |
Автоматическое переключение слотов логической репликации при обработке отказа (Хоу Чжицзе, Швета Малик, Аджин Чериан) § | Для включения функциональности предназначен необязательный пятый аргумент функции |
Добавление серверной переменной | |
Возможность управления поведением при обработке отказа логической репликации в командах | |
Возможность использования хеш-индексов на стороне подписчика для применения изменений логической репликации (Хайато Курода) § | Ранее для этой цели могли использоваться только индексы B-tree |
Улучшение производительности логического декодирования для случаев с множеством подтранзакций (Масахико Савада) § | |
Реализация перезапуска рабочих процессов, применяющих изменения логической репликации, если у владельца подписки отозваны права суперпользователя (Вигнеш Си) § | При этом требуется повторная аутентификация |
Добавление параметра | С этим параметром сообщения гарантированно сохраняются |
Указание физических резервных серверов, которые должны быть синхронизированы перед тем, как данные станут видимыми для подписчиков (Хоу Чжицзе, Швета Малик) § § | Серверы указываются в новой переменной |
Добавление столбца с типом рабочего процесса в |
Служебные команды
Изменение | Описание |
Добавление нового параметра | По умолчанию поведение осталось прежним: |
Добавление нового параметра | |
Вывод количества пропущенных строк при обработке командой | Эта информация выводится в столбце системного представления |
Возможность указывать, что все значения в столбцах в команде | |
Поддержка столбцов идентификации для секционированных таблиц (Ашутош Бапат) § | |
Поддержка ограничений-исключений для секционированных таблиц (Пол А. Юнгвирт) § | Чтобы ограничения-исключения работали корректно для секционированных таблиц, они должны сравнивать части ключей секционирования на равенство, при этом другие столбцы могут использовать специфичные для ограничений-исключений сравнения |
Добавление более понятного метода использования | Добавлен синтаксис |
Возможность изменять выражение для генерируемых столбцов с помощью | Для этого используется команда |
Возможность указывать метод доступа для секционированных таблиц (Джастин Призби, Соумйадип Чакраборти, Микаэль Пакье) § § | |
Добавление значения | |
Поддержка событийных триггеров, срабатывающих при установлении соединения с БД (Константин Книжник, Михаил Грибков) § | |
Поддержка событийных триггеров для | |
Поддержка использования синтаксиса в скобках для параметров |
EXPLAIN
Изменение | Описание |
Возможность выводить информацию об использовании памяти оптимизатором в | Вывести эту информацию можно при помощи параметра |
Добавление в | |
Возможность для | |
Улучшение отображения узлов SubPlan и выходных параметров в | |
Отображение информации |
Типы данных
Изменение | Описание |
Поддержка значений | |
Возможность использовать тип ENUM, добавленный посредством | Ранее такой сценарий не допускался |
MERGE
Изменение | Описание |
Возможность модифицировать изменяемые представления командой | |
Добавление | Условие |
Возможность использовать предложение | Новая функция |
Функции
Изменение | Описание |
Добавление функции | Эта функция может использоваться в предложении |
Добавление функций-конструкторов SQL/JSON: | |
Добавление функций запросов SQL/JSON: | |
Добавление методов | Добавлены следующие методы |
Добавление спецификаторов формата часового пояса для | TZ принимает аббревиатуры часовых поясов или числовые смещения, а |
Возможность указывать часовой пояс сеанса как | Это полезно для преобразования временных меток с добавлением или удалением информации о часовом поясе, без явного указания часового пояса в формате строки |
Добавление функций | |
Добавление функций, генерирующих случайные числа в заданном диапазоне (Дин Рашид) § | Добавлены функции |
Добавление функций для преобразования целых чисел в строковые представления в двоичной и восьмеричной системах (Эрик Радман, Натан Боссарт) § | Добавлены функции |
Добавление функций, связанных с информацией о Unicode (Джефф Девис) § | Функция |
Добавление функции | |
Добавление функции | |
Добавление функции | |
Добавление функции | Если значение хранится не в виде TOAST, функция возвращает |
PL/PGSQL
Изменение | Описание |
Возможность в PL/pgSQL использовать спецификации | |
Возможность в PL/pgSQL использовать спецификацию |
libpq
Изменение | Описание |
Добавление функции для изменения паролей ролям в libpq (Джо Конвей) § | Добавлена функция |
Добавление функций закрытия порталов и подготовленных операторов (Йелте Феннема-Нио) § | Добавлены следующие функции: |
Добавление в libpq API, который позволяет отправлять как блокирующие, так и неблокирующие запросы на отмену с возможностью шифрования, если оно уже используется в соединении (Йелте Феннема-Нио) § | Ранее поддерживались только блокирующие запросы на отмену без засекречивания |
Добавление в libpq функции | |
Добавление в libpq функции | Эта функция подобна |
Добавление в libpq функции | |
Возможность устанавливать TLS-соединения без предварительного согласования (Грег Старк, Хейкки Линнакангас, Питер Эйзентраут, Микаэль Пакье, Даниэль Густафссон) § § § § § § § § | Чтобы включить эту функциональность, используется параметр |
psql
Изменение | Описание |
Более наглядное отображение пустых прав и прав по умолчанию в выводе | Команда |
Корректная обработка указания | Ранее в таких командах указание |
Возможность остановить команду psql \watch после получения минимального количества строк (Грег Сабино Маллейн) § | Для этого используется параметр |
Возможность прерывать попытки подключения | |
Поддержка | |
Улучшение дополнения табуляцией в |
Серверные приложения
Изменение | Описание |
Добавление приложения | |
Возможность восстанавливать большие объекты | Если в базе данных много больших объектов, это нововведение поможет избежать ограничения на размер транзакции. Кроме того, восстановление можно выполнять параллельно |
Добавление в | |
Поддержка включения/исключения объектов через файл приложениями | Для этого используется ключ |
Добавление ключа | Параметр добавлен в следующие приложения: |
Добавление в | Это нововведение позволяет сохранить преимущества работы с порциями транзакций, одновременно предотвращая проблемы, связанные с большими блоками транзакций |
Изменение параметра режима отладки в pgbench с | Ключ |
Добавление в | |
Добавление в | |
Поддержка удаления файлов истории резервного копирования для | Для этого используется ключ |
Добавление нескольких длинных ключей в | Добавлены следующие ключи: |
Возможность для | Это нововведение особенно полезно для пулов соединений, учитывающих имена баз данных |
Добавление в | Ключ поддерживается в ОС Linux и FreeBSD |
Возможность для | |
Возможность для | Для этого предназначен новый ключ |
Исходный код
Изменение | Описание |
Прекращение поддержки OpenSSL 1.0.1 (Микаэль Пакье) § | |
Прохождение тестов в режиме OpenSSL FIPS (Питер Эйзентраут) § § | |
Использование инструкций CPU AVX-512 для подсчета битов (Пол Амонсон, Натан Боссарт, Антс Аасма) § § | |
Требование версии LLVM 10 или выше (Томас Манро) § | |
Использование внутренних инструкций CRC для 64-битных процессоров LoongArch (Сюйдун Ян) § | |
Прекращение поддержки AIX (Хейкки Линнакангас) § | |
Удаление параметра сборки PostgreSQL, специфичного для Microsoft Visual Studio (Микаэль Пакье) § | Теперь в среде Visual Studio возможна сборка только с Meson |
Удаление параметра | Предполагается, что на всех платформах есть необходимая поддержка потоков |
Удаление параметра | Теперь указать компилятор можно только в переменной среды CC |
Исключение получения данных с завершающим нулем функциями для пользовательских типов данных (Дэвид Роули) § | |
Добавление инкрементального анализатора JSON для работы с огромными документами JSON (Эндрю Дунстан) § | |
Преобразование верхнеуровневого файла | |
Удаление ставшего ненужным верхнеуровневого файла | |
Удаление параметра make | |
Добавление поддержки make для разделяемых библиотек Android (Питер Эйзентраут) § | |
Добавление внутренней поддержки точек внедрения (Микаэль Пакье) § § § § | Точки внедрения используются для отладки сервера. Их поддержка должна быть включена во время компиляции |
Добавление реестра сегментов динамической разделяемой памяти (Натан Боссарт) § | Теперь разделяемые библиотеки, не загруженные при запуске сервера, могут координировать использование динамической разделяемой памяти |
Исправление | |
Улучшение документации по использованию |
Дополнительные модули
Изменение | Описание |
Возможность проталкивать запросы | Обертки сторонних данных и методы нестандартного сканирования необходимо адаптировать для поддержки этого изменения |
Возможность проталкивать подзапросы | |
Увеличение значения по умолчанию для стоимости кортежей от оберток сторонних данных (Дэвид Роули, Умайр Шахид) § § | Это значение используется оптимизатором |
Возможность прерывать операции, выполняемые с помощью | |
Возможность создания хеш-индексов по столбцам | Теперь также возможно соединение и агрегирование по хешу по столбцам |
Возможность включать пробелы и кавычки в правила преобразования символов в unaccent (Микаэль Пакье) § | Изменен синтаксис файла |
Возможность для | |
Прохождение тестов | |
Прохождение тестов | |
Удаление некоторых неиспользуемых макросов SPI (Бхарат Рупиредди) § | |
Возможность для | Эта возможность была добавлена для |
Добавление в | Это полезно при тестировании |
pg_stat_statements
Изменение | Описание |
Замена параметров | |
Замена имен точек сохранения, хранящихся в | Это значительно сокращает объем данных, записываемых командами |
Замена GID двухфазной фиксации, хранящихся в | Это значительно сокращает объем данных, записываемых командами |
Отслеживание команды | Имена, используемые в |
Добавление в | Добавлены столбцы |
Добавление информации | |
Добавление необязательного четвертого аргумента ( | По умолчанию значение этого аргумента — |
Добавление в |
Изменения в версии 17.1
Изменение | Описание |
Пометка кешированных планов как зависимых от выполняющих их ролей, когда защита на уровне строк (RLS) применяется для ссылки на таблицу не на верхнем уровне (Натан Боссарт) § | Если общее табличное выражение (CTE), подзапрос, подссылка, представление с контекстом безопасности вызывающего или проекция приведения в запросе ссылались на таблицу с политикой защиты на уровне строк, результирующий план не помечался как потенциально зависимый от выполняющей его роли. Это могло приводить к тому, что последующие запросы в том же сеансе выполнялись с некорректным планом, а скрытые строки возвращались или возвращаемые скрывались |
Библиотека libpq теперь игнорирует сообщения об ошибках, получаемые во время согласования протоколов SSL или GSS (Джейкоб Чемпион) § | Злоумышленники могут подменять реальное выходное сообщение сервера об ошибке, получаемое до того, как завершено согласование криптографического протокола. Это может приводить к различным угрозам безопасности, например, злоумышленник может подменить результат запроса, а невнимательный пользователь спутает его с реальным результатом. Лучше всего игнорировать такие сообщения об ошибках и доверять только сообщениям libpq о сбое соединения |
Запрет на изменение переменных окружения доверенным кодом PL/Perl (Эндрю Дунстан, Ной Миш) § § § | Возможность изменять переменные окружения процессов, такие как |
Исправление обновлений состояния каталога для ограничений внешнего ключа при присоединении или отсоединении секций таблицы (Жеан-Гийом де Рорте, Альваро Эррера) § § | Если целевая таблица секционирована, для ссылающейся таблицы, которая является отдельной, а не секцией, необходимы другие записи каталога. Команды Это можно исправить, выполнив команду Используйте запрос ниже, чтобы выявить нарушенные ограничения и подготовить команды для создания таких ограничений заново: Поскольку один или несколько этапов выполнения команды ADD CONSTRAINT могут завершиться ошибкой, сохраните вывод запроса в файл и попробуйте заново повторить каждый этап |
Исправление теста для локали | При использовании libc как провайдера локали по умолчанию, тест, проверяющий использование локали |
Запрет использования соединений или группировки с учетом секционирования, если сортировка в запросе для столбца ключа не соответствует сортировке ключа секционирования (Цзянь Хи, Веббо Хан) § § | Такие планы ранее могли приводить к некорректным результатам |
Предотвращение сбоя планировщика после преобразования теста | Эта проблема обычно вызывала такие ошибки, как «variable not found in subplan target lists» (переменная не найдена в целевых списках подплана) |
Предотвращение возможного сбоя планировщика во время встраивания SQL-функции, аргументы которой содержат определенные связанные с массивами конструкции (Том Лейн, Натан Боссарт) § | |
Исправление возможных некорректных выводов или ошибки планировщика «wrong varnullingrels» (неправильные varnullingrels) для операций | |
Исправление возможной ошибки «could not find pathkey item to sort» (не удалось найти элемент ключей пути для сортировки), когда необходима сортировка вывода запроса с оператором | |
Исправление сканирования индекса-B-tree для ScalarArrayOp в особых случаях (Питер Гейган) § | Вывод мог быть некорректным, когда прокручиваемые курсоры с планом такого вида прокручивались до начальной точки и снова прокручивались вперед |
Исправление сбоя проверочного утверждения или сбивающего с толку сообщения об ошибке выполнения команды | |
Исправление проверки параметров | Некоторые некорректные варианты использования теперь запрещены, как и должно было быть |
Исправление сбоя сервера в случаях, когда вызов json_objectagg() содержит изменчивую функцию (Амит Ланготе) § | |
Исправление выявления асимметричных данных во время параллельного соединения по хешу (Томас Манро) § | После пересекционирования внутренней стороны соединения по хешу из-за слишком большого количества накопленных кортежей в одной секции проверялось, что все кортежи секции попадали в одну и ту же дочернюю секцию. Так предполагалось, что у всех кортежей одно хеш-значение и последующее пересекционирование не может привнести улучшений. В некоторых случаях эта проверка не работала, из-за чего выполнялось бессмысленное многократное пересекционирование, что в итоге приводило к ошибке исчерпания ресурсов |
Предотвращение сбоев, когда командой | |
Предотвращение повторных поисков классов операторов и сравнений во время создания нового индекса для секционированной таблицы (Том Лейн) § | Исправление вызвано главным образом тем, что иногда поиск выполнялся с ограничением |
Добавление недостающей зависимости указанного в | Удаление метода доступа должно было быть запрещено при существовании зависимой от него таблицы, но было возможно, что вызывало странное поведение. Обратите внимание, что это исправление решает проблему только для секционированных таблиц, созданных после обновления |
Запрет использования имен локалей, содержащих не ASCII-символы (Томас Манро) § | Проблема возникала только в Windows, поскольку такие имена локалей больше нигде не используются. Основная сложность заключается в том, что неясно в какой кодировке они представлены (так как используемая кодировка определена в самой локали). Из-за этого недоразумения в последних выпусках PostgreSQL в библиотеке времени выполнения могли случаться прерывания операций. |
Устранение условий гонки при фиксации сериализуемой транзакции (Хейкки Линнакангас) § | Некорректная обработка недавно зафиксированной транзакции могла приводить к сбою проверочного утверждения или ошибке «could not access status of transaction» (не удалось получить состояние транзакции) |
Устранение условий гонки при выполнении команды | Параллельное выполнение нескольких команд PREPARE TRANSACTION могло приводить к тому, что команда COMMIT PREPARED не удаляла файл состояния двухфазной фиксации на диске для завершенной транзакции. Мгновенно к негативным последствиям это не приводило, однако при последующем восстановлении после сбоя могла возникать ошибка «could not access status of transaction» (не удалось получить состояние транзакции), что требовало ручного удаления потерянного файла для восстановления службы |
Предотвращение некорректного обращения к памяти после пропуска нерабочего индекса TOAST во время выполнения команды | Список, отслеживающий подлежащие перестройке индексы, некорректно обновлялся в этом месте кода, что могло приводить сбоям проверочных утверждений или отказам в будущем |
Исправление возможных потерь обновлений каталога «на месте» (Ной Миш) § § § § § § § | При обычном обновлении строк новая версия строки записывается, чтобы сохранить возможность отката транзакции. Однако при обновлении некоторых системных каталогов транзакции намеренно не затрагиваются, и в таком случае строка обновляется на месте. Данное исправление устраняет условия гонки, которые могли приводить к потере обновлений на месте. Одним из примеров была потеря того, что для |
Сброс кеша каталогов в конце процесса восстановления (Ной Миш) § | Таким образом предотвращаются сценарии, при которых обновления каталога на месте могли быть потеряны из-за использования устаревших данных из кеша каталога |
Предотвращение параллельного выполнения запросов при сдерживании прерываний (Франческо Деграсси, Ной Миш, Том Лейн) § § | С этой ситуацией невозможно было столкнуться во время обычной работы, но можно было воспроизвести при помощи тестовых сценариев, например использовав SQL-функцию в качестве опорной для B-tree (что слишком медленно для промышленной эксплуатации). При успешном воспроизведении возникала ситуация бесконечного ожидания |
Игнорирование еще не определенных порталов в представлении | Определенный пользователем код, исследующий это представление, мог вызываться при настройке нового курсора. Если это случалось, происходило обращение по нулевому указателю. Проблема решена определением представления так, чтобы исключать курсоры, которые еще не полностью настроены |
Предотвращение ошибки «unexpected | |
Уменьшение потребления памяти при логическом декодировании (Масахико Савада) § | Теперь используется блок по умолчанию меньшего размера для хранения данных кортежей, получаемых во время логического декодирования. Таким образом снижается потеря памяти, которая, как сообщается, была существенной, возникала во время длительных транзакций и даже приводила к сбоям из-за нехватки памяти |
Исправление поведения стабильных функций, вызываемых из списка аргументов оператора | Как и до исправления в предыдущем квартальном выпуске, таким функциям ранее передавался неправильный снимок, в результате чего они получали устаревшие значения строк, которые уже изменились с момента начала внешней транзакции |
Разбор параметра подключения | В используемом коде запрещались завершающие пробелы в значении параметра, в отличие от других случаев. Это оказалось проблемой, например, в использовании ecpg |
Исправление чтения за пределами выборки при разборе некорректных даты и времени в ecpglib (Брюс Момджян, Павел Некрасов) § | Ранее было возможно попытаться считать расположение непосредственно перед началом константного массива. Однако практические следствия этой ошибки незначительны |
Исправление команд описания | Выполнение команд, при которых отображается список управления доступом (ACL), завершалось ошибкой на очень старых версиях сервера PostgreSQL из-за использования функции, отсутствующей в этих версиях |
Предотвращение зависания в | Вместо этого такой интервал будет обрабатываться как равный нулю (без задержки между выполнениями) |
Устранение неспособности найти пароль репликации в | Утилитам |
Отображение ошибки в | |
Запрет на создание имен файлов с двумя косыми чертами в | Проблем в работе это не вызывало, однако в сообщениях об ошибках дублировались косые черты, что могло сбивать с толку |
Предотвращение попытки перестройки индексов временных таблиц, индексов в vacuumdb и при параллельной перестройке индексов с помощью reindexdb (Вайбхав С, Микаэль Пакье, Фудзии Масао, Натан Боссарт) § § § | Перестройка индексов временных таблиц других сеансов невозможна, но проверка на пропуск отсутствовала в некоторых местах кода, что вело к нежелательным сбоям |
Исправление некорректного кода, генерируемого LLVM, на платформах ARM64 (Томас Манро, Антонин Боннефой) § | При использовании JIT-компиляции на платформах ARM генерируемый код не поддерживал расстояния перемещения больше 32 бит, из-за чего он мог размещаться неудачно и вызывать сбои сервера в системах с большим объемом памяти |
Исправление нескольких случаев, в которых допускалось, что время начала процесса (представленное | На платформах, где тип |
Обновление данных часовых поясов до версии tzdata 2024b (Том Лейн) § § | В этом выпуске tzdata изменяются старые имена часовых поясов, совместимые с System V, теперь они дублируют соответствующие географические зоны. Например, |
Изменения в версии 17.2
Изменение | Описание |
Устранение сбоя ABI для расширений, работающих со структурой | Предыдущие корректирующие выпуски непреднамеренно нарушили бинарную совместимость с |
Восстановление функциональности команды | Исправление для CVE-2024-10978 случайно привело к тому, что параметры для |
Устранение случаев, в которых значение | Ранее перезапуск логической репликации иногда мог приводить к повторному вычислению точки перезапуска слота как более старого значения, чем было объявлено ранее в |
Предотвращение удаления нужных файлов WAL во время выполнения | Раньше в некоторых случаях утилита pg_rewind могла удалить важные файлы WAL из восстановленного пониженного ведущего узла. В частности, это происходило, если эти файлы были помечены для архивации (то есть для них были созданы файлы |
Устранение условий гонки, связанных с удалением записей общих статистик (Кетаро Хоригути, Микаэль Пакье) § | Эти условия могли приводить к потере статистических данных, сбоям проверочных утверждений или ошибкам вида «can only drop stats once» (статистику можно удалить только один раз) |
Подсчет количества сканирований индексов | |
Устранение сбоя при проверке изменений параметров классов операторов индекса (Александр Коротков) § | Некоторые формы |
Предотвращение сбоев проверочных утверждений, вызванных отключенными подграфами NFA при разборе регулярных выражений (Том Лейн) § | Эта ошибка не имела видимых последствий в сборках без проверочных утверждений |
Изменения в версии 17.3
Изменение | Описание |
Усиление PQescapeString и родственных функций для защиты от некорректно закодированных входных строк (Андрес Фройнд, Ной Миш) § § § § § § | Функции с обработкой экранирования, предоставляемые libpq, теперь полностью проверяют допустимость кодировки входных данных. При обнаружении недопустимых символов выдается ошибка, если это возможно. Для функций, не возвращающих ошибки, выходная строка корректируется, чтобы гарантировать, что сервер распознает недопустимую кодировку, и при промежуточной обработке ошибочный байт не будут принят за одинарную кавычку, обратную косую черту и так далее |
Восстановление автоматического усечения имен баз данных и пользователей в запросах на подключение (Натан Боссарт) § | Это отменяет изменение версии 17, которое вызывало проблемы у некоторых пользователей. Имена, превышающие допустимую длину, должны усекаться с учетом кодировки, но на данный момент было возвращено прежнее поведение слепого усечения на |
Исключение параллельных рабочих процессов из проверок и ограничений прав подключения (Том Лейн) § | Теперь при запуске параллельного рабочего процесса не проверяются привилегии |
Удаление суффикса «Lock» из имен событий ожидания LWLock (Бертран Друво) § | В результате реорганизации кода имена событий, связанных с блокировкой, непреднамеренно стали отображаться в представлении |
Устранение возможной ошибки при сканировании индекса B-tree с условием ScalarArrayOp ( | |
Исправление возможной проблемы с повторным использованием устаревших результатов в оконных агрегатных функциях (Дэвид Роули) § | Оконная агрегатная функция с ограничивающим условием выполнения и результатом типа, передаваемого по ссылке, могла ошибочно возвращать результат из предыдущей секции вместо выполнения нового вычисления |
Поддержка синхронизации | Ранее процесс мог попытаться получить доступ к уже удаленным данным. Одним из известных последствий являлись временные ошибки типа «could not access status of transaction» (не удалось получить состояние транзакции) |
Устранение условий гонки, которые могли привести к ошибке при добавлении новой записи каталога в список кеша каталога (Хейкки Линнакангас) § | Это могло приводить, например, к тому, что в текущем сеансе не могла использоваться только что созданная функция |
Предотвращение возможного повреждения каталога при очистке системного каталога одновременно с его изменением (Ной Миш) § § | |
Устранение повреждения данных при возникновении ошибки во время усечения отношений (Томас Манро) § § § | Файловые операции, необходимые для усечения отношений, могли завершиться ошибкой, оставив несогласованное состояние на диске (например, фактически восстанавливая удаленные данные). Это невозможно предотвратить полностью, но теперь ошибки такого рода получили уровень |
Предотвращение запуска контрольных точек во время усечения отношений (Роберт Хаас) § | Это позволяет избежать условий гонки, при которых измененный файл мог не сохраниться на диске до завершения контрольной точки, что создавало риск повреждения данных, если вскоре после этого происходил сбой операционной системы |
Исключение возможной потери изменений | |
Исправление передачи некорректных значений | В некоторых случаях битовая карта |
Исключение отсоединения секции, если у нее есть собственное ограничение внешнего ключа, ссылающееся на секционированную таблицу (Амул Сул) § | В обычных случаях внешние ключи определяются на верхнем уровне секционированной таблицы. Ранее, если один из ключей определялся на уровне секции и ссылался на секционированную таблицу, при отсоединении такой секции соответствующие записи |
Исправление функции | |
Исправление обработки кодов формата | Ранее, если непосредственно перед |
Реализация проверки заключения имен переменных в двойные кавычки при разборе предложения | |
Реализация проверки заключения имен пространств имен XML в двойные кавычки при разборе выражения | |
Добавление параметра | |
Исправление планирования предварительно отсортированных операций | Эта ошибка могла приводить к сортировке данных с использованием неправильного оператора сортировки, что могло иметь различные последствия: от отсутствия видимых проблем до аварийных сбоев |
Исключение объединения операций | Ранее правила сортировки игнорировались при принятии решения о том, безопасно ли объединять шаги |
Предотвращение ошибок планировщика вида «wrong varnullingrels» (неправильные varnullingrel) после «подтягивания» подзапроса, который находится под внешним соединением (Том Лейн) § § | |
Игнорирование маркировки отношений для обнуления при поиске статистики (Ричард Гуо) § | Это упущение могло приводить к невозможности использования соответствующей статистики по выражениям или к ошибкам вида «corrupt MVNDistinct entry» (поврежденная запись MVNDistinct) |
Исправление обработки пропущенных выражений в логике отсечения секций (Том Лейн) § | Это упущение могло приводить к ошибкам вида «unrecognized node type» (нераспознанный тип узла) и потенциально к другим проблемам при выполнении запросов к секционированным таблицам |
Выделение собственного слота для рабочего процесса | Это было упущено при добавлении рабочего процесса |
Снятие ограничения размера таблиц | Это позволяет избежать ошибок типа «invalid DSA memory alloc request size» (недопустимый запрошенный размер разделяемой памяти DSA). Такая ситуация могла возникнуть, например, в транзакциях, обрабатывающих несколько миллионов таблиц |
Предотвращение возможного целочисленного переполнения в функции | Поскольку результат используется только в статистических целях, последствия этой ошибки были в основном косметическими |
Исправление вычисления количества сегментов SLRU (Юрий Соколов) § | Ошибка приводила к использованию меньшего количества сегментов, чем предполагалось, что увеличивало конкуренцию, но не вызывало функциональные сбои |
Исключение поведения, при котором уже установленная блокировка процесса мешала процессу | Чрезвычайно большая нагрузка на серверы, запускающие и завершающие работу процессов, могла помешать процессу |
Предотвращение зацикливания резервных серверов потоковой репликации при чтении записей WAL, переходящих на другую страницу (Кетаро Хоригути, Александр Кукушкин) § | Это могло произойти, если запись продолжалась на странице, которую необходимо было прочитать из другого источника WAL |
Устранение непреднамеренного повышения уровня ошибок | Это исключает некоторые маловероятные случаи, которые могли привести к ошибкам вида « |
Исключение случаев, в которых оператор семейства операторов или опорная процедура могли стать недействительными (Том Лейн) § § | В некоторых случаях тип данных мог быть удален, а ссылки на его OID по-прежнему оставались в |
Устранение множественных утечек памяти в выводе логического декодирования (Вигнеш Си, Масахико Савада, Боюй Янг) § § § | |
Устранение небольшой утечки памяти при изменении параметра | |
Предотвращение сбоя в случаях, когда фоновый процесс пытается проверить новое значение | |
Предотвращение целочисленного переполнения при проверке условия | Транзакция, которая создавала очень большое отношение, могла по ошибке решить обеспечить надежность путем копирования отношения в WAL вместо того, чтобы синхронизировать его с помощью |
Исключение небезопасного порядка операций во время поиска в кеше (Ной Миш) § | Единственным известным последствием такого порядка было обычно безобидное предупреждение «you don't own a lock of type |
Предотвращение потенциального использования освобожденной памяти при параллельной очистке (Валлимахараджан Г, Джон Нейлор) § | Эта ошибка не имела последствий в стандартных сборках, но теоретически представляла опасность |
Устранение возможных ошибок вида «failed to resolve name» (не удалось разрешить имя) при использовании JIT на старых платформах ARM (Томас Манро) § | Они могли появляться из-за несоответствия значения по умолчанию для |
Устранение сбоев проверочных утверждений в запросах | |
Предотвращение сбоев проверочных утверждений при разборе правил в случаях, когда конечный запрос содержит операции с множествами (Ман Цзэн, Том Лейн) § | |
Предотвращение сбоев проверочных утверждений в особых случаях при запуске параллельных запросов (Том Лейн) § | |
Устранение сбоев проверочных утверждений во время завершения работы при записи файла статистики (Микаэль Пакье) § | |
Устранение предупреждений valgrind, связанных с кодом хеширования строк (Джон Нейлор) § | |
Предотвращение в функции | Если функция равенства изменяла или удаляла объект, для которого передан указатель на чтение-запись, могли возникать ошибки, если функция |
Обеспечение применения предварительной обработки выражения к значению по умолчанию | Если целевой столбец типа домен, планировщик должен добавлять шаг приведения к типу домен, а не просто константу |
Предотвращение потери данных при начале массовой записи в слой отношений, который уже содержит данные (Маттиас ван де Меент) § | Любые существующие данные обнулялись. В PostgreSQL это не представляло проблемы, но могло проявляться в некоторых расширениях |
Предотвращение сбоя в случаях, когда серверный процесс пытался выполнить перебор по общему префиксному дереву, которое он не создавал (Масахико Савада) § | В ядре PostgreSQL нет кода, вызывавшего такой сбой, однако он мог оказаться в расширениях |
Устранение утечек памяти в PL/Python (Мэт Арье, Том Лейн) § | Многократное использование |
Исправление PL/Tcl для корректной компиляции с Tcl 9 (Питер Эйзентраут) § | |
Исключение в препроцессоре ecpg возможной некорректной обработки курсоров, ссылающихся на переменные вне текущей области (Том Лейн) § | |
Корректная выдача предупреждений в ecpg об отсутствии поддержки | Ранее предупреждение не выдавалось из-за опечатки |
Обеспечение корректной обработки имен путей к файлам, закодированных в SJIS, в | У некоторых двухбайтовых символов в SJIS второй байт равнозначен обратному слешу в ASCII ( |
Добавление в | |
Исключение использования неправильной версии | Эта ошибка могла приводить к неправильному поведению при использовании параметра |
Исправление некорректного выполнения некоторых вложенных конструкций | Команда |
Исправление возможного некорректного отображения сообщений о прогрессе выполнения во время инициализации таблицы в | |
Повышение устойчивости | Поскольку |
Устранение возможного сбоя в | |
Устранение утечки памяти в | Утечка происходила во время каждой операции распаковки, поэтому она была наиболее заметна в выгрузках, содержащих много таблиц или больших объектов |
Исправление | |
Использование соответствующих SQL-стандарту тел функций в объявлениях SQL-функций расширения | Это изменение позволяет разрешать ссылки на |
Обнаружение несоответствия версий между SQL-объявлениями | Ранее такое несоответствие могло привести к сбою при вызове |
Многократное повторение запроса на отмену удаленного запроса в | Это изменение устраняет условия гонки, при которых попытка отменить только что отправленный запрос происходила до того, как удаленный сервер начинал его обработку, в результате чего первоначальный запрос на отмену игнорировался |
Изменение проверок конфигурации, определяющих переключатели компилятора, необходимые для доступа к инструкциям ARM CRC (Том Лейн) § | На платформах ARM, где базовый процессор не поддерживает инструкции CRC, необходимо использовать переключатель |
Исправление системы сборки meson для поддержки старых библиотек OpenSSL в Windows (Дарек Слюсарчик) § | Добавление поддержки имен устаревших библиотек |
Обеспечение экспорта всех функций libcommon и libpgport в сборках Windows с использованием meson (Владлен Пополитов, Хейкки Линнакангас) § § | Это исправляет ошибки сборки вида «unresolved external symbol» (неразрешенный внешний символ) для расширений |
Исправление процесса конфигурации meson для корректного определения заголовочного файла OSSP | |
Установка | Это соответствует поведению системы сборки на основе make и старой системы сборки MSVC |
Установка | Это соответствует поведению системы сборки на основе make |
Обновление данных часовых поясов до версии tzdata 2025a, включающее изменение правил перехода на летнее время в Парагвае, а также корректировку исторических данных для Филиппин (Том Лейн) § |
Изменения в версии 17.4
Изменение | Описание |
Улучшение поведения функций с обработкой экранирования libpq (Андрес Фройнд, Том Лейн) § § § | Изменения, внесенные для CVE-2025-1094, имели одно серьезное упущение: функции |
Изменения в версии 17.5
Изменение | Описание |
Исправление некорректной обработки приведений типов в ключах выражений конструкторов JSON (Амит Ланготе) § | |
Исправление ошибочных выводов об ограничениях столбцов | В некоторых случаях планировщик отбрасывал условие запроса |
Недопущение некорректных оптимизаций на основе проверок | |
Исправление некорректной оценки размера таблицы с низким фактором заполнения (Томаш Вондра) § | Когда планировщик оценивал количество строк в таблице, которая еще никогда не анализировалась, он учитывал значение фактора заполнения, но не гарантировал как минимум одну строку на страницу. Поэтому низкое значение фактора заполнения могло приводить к необоснованно низкой оценке |
Исправление обработки возможных изменений параметра | |
Исправление чрезмерного выделения памяти для структур SpecialJoinInfo на этапе планирования запроса (Ричард Гуо) § | Это приводило к сбоям во время планирования запроса при включенной возможности соединения таблиц с учетом секционирования |
Устранение сбоя при логической репликации, если для секционированной таблицы подписчика создан индекс BRIN (Том Лейн) § | |
Исправление порядка операций в функции | Теперь гарантируется, что перед вызовом обработчика |
Предотвращение сбоя проверочного утверждения во время параллельной очистки, если для параметра конфигурации | |
Исправление планирования параллельного перестроения индексов утилитой | Предыдущая реализация не позволяла достичь ожидаемого уровня параллельности |
Запрет подтягивать условия ограничений из подзапросов в модуле | Это исправление позволяет предотвратить возникавшую в редких случаях ошибку «unexpected expression in subquery output» (непредвиденное выражение в результате подзапроса) |
Исправление ошибки сборки, возникавшей при наличии старой версии файла | |
Исправление маркировки данных отдельных буферов потоков чтения для Valgrind (Томас Манро) § | Это исправление не влияет на код ядра выпущенных версий PostgreSQL, однако расширения, использующие данные отдельных буферов, могли сталкиваться с ложными ошибками во время тестирования под Valgrind |
Устранение предупреждений Valgrind, связанных с кодом хеширования строк (Джон Нейлор) § |