E.1. Выпуск 18.6 #

Дата выпуска: 2026-08-13

В этот выпуск вошли различные исправления, внесённые после версии 18.4. За информацией о нововведениях версии 18 обратитесь к Разделу E.6.

Примечание: версия 18.5 не была выпущена из-за регрессии, обнаруженной после сборки.

E.1.1. Миграция на версию 18.6 #

Если используется версия 18.X, выгрузка/восстановление базы не требуется.

Однако после миграции могут потребоваться изменения конфигурации и очистка данных, которые описаны ниже в первых трёх замечаниях по безопасности.

При наличии таблиц с индексами GIN обратитесь к записи о рисках повреждения значений reltuples из истории изменений ниже.

При использовании contrib/btree_gist или contrib/ltree может потребоваться перестроение индексов, созданных этими расширениями; обратитесь к соответствующим записям ниже.

Кроме того, если вы обновляете сервер с более ранней версии, чем 18.2, см. Раздел E.4.

E.1.2. Изменения #

  • Ограничение списка разрешённых модулей вывода логического декодирования с помощью нового параметра конфигурации output_plugin_libraries (Джейкоб Чемпион) § §

    Ранее пользователь репликации мог выбрать любую загружаемую библиотеку для логического декодирования, что создавало различные уязвимости. Чтобы их устранить без нарушения настроек, которые применялись ранее, добавлен белый список разрешённых модулей вывода.

    По умолчанию в параметре конфигурации указываются только модули вывода, входящие в состав PostgreSQL (pgoutput и test_decoding). Если требуются другие модули, их необходимо добавить после обновления сервера. Например:

    output_plugin_libraries = 'pgoutput, test_decoding, my_trusted_decoder'

    Кроме того, теперь при миграции с версий 17 и выше команда pg_upgrade --check будет завершаться ошибкой, если параметр output_plugin_libraries в новом кластере не допускает модули вывода слотов логической репликации, используемые в старом кластере. Перед выполнением pg_upgrade внесите необходимые изменения в параметр конфигурации нового кластера.

    Проект PostgreSQL благодарит Владимира Токарева и Юй Куньпэна за сообщение об этой проблеме. (CVE-2026-6471)

  • Исправление защитного преобразования PGP в модуле contrib/pgcrypto для обнаружения неподдерживаемых шифров (Даниэль Густафссон) § §

    Ранее, если библиотека OpenSSL отклоняла запрашиваемый шифр (например из-за работы в режиме FIPS или если провайдер устаревших алгоритмов не был загружен), модуль pgcrypto не распознавал ошибку и просто применял операцию исключающего «или» (XOR) над незашифрованным блоком и открытым текстом, делая такое «защитное преобразование» тривиально взламываемым. Как правило, это происходило с устаревшими алгоритмами или алгоритмами, несовместимыми с FIPS (cipher-algo=blowfish/bf, twofish, cast5 или 3des).

    Теперь по умолчанию модуль pgcrypto будет возвращать ошибку при попытке расшифровать любые сообщения, которые были затронуты этой проблемой. Для извлечения таких данных в функции pgp_pub_decrypt() и pgp_sym_decrypt() добавлен новый параметр ignore-cipher-failure. Установка ignore-cipher-failure=1 восстановит прежнее поведение, позволяя снять некорректную обёртку шифрования:

    pgp_sym_decrypt(encrypted_column, любой_ключ, 'ignore-cipher-failure=1')

    После того как затронутые сообщения будут обнаружены и освобождены от обёрток, их можно будет повторно зашифровать с использованием современного алгоритма. При этом важно, чтобы поведение OpenSSL не менялось с момента создания некорректных сообщений: если набор неподдерживаемых алгоритмов поменяется, описанный выше подход не сработает. За подробной информацией обратитесь к описанию ignore-cipher-failure.

    Проект PostgreSQL благодарит Шишира Шарму за сообщение об этой проблеме. (CVE-2026-14663)

  • Исправление работы psql для пропуска внутренних данных, следующих в скрипте за командой COPY ... FROM STDIN, даже если команда COPY завершается ошибкой до отправки PGRES_COPY_IN (Том Лейн) § §

    Ранее, если команда COPY завершалась ошибкой при запуске (например, если целевая таблица не существовала), psql не распознавал эту ошибку и читал внутренние данные COPY как SQL-команды. В лучшем случае это приводило к некорректному поведению, а в худшем — создавало риск атаки с SQL-инъекцией. Теперь psql распознаёт синтаксически корректные команды COPY ... FROM STDIN и самостоятельно пропускает данные, если сервер не отвечает статусом PGRES_COPY_IN.

    Хотя это исправление вряд ли затронет производственные SQL-скрипты, тестовые скрипты могут намеренно использовать команды COPY ... FROM STDIN, завершающиеся ошибкой. В таких скриптах потребуется добавить завершающую строку \. после каждой такой команды.

    Проект PostgreSQL благодарит Александра Лахина за сообщение об этой проблеме. (CVE-2026-6464)

  • Добавление перекрёстной проверки типа строки выходных данных портала при выполнении команды EXECUTE или FETCH (Роберт Хаас) §

    Команды EXECUTE и FETCH используют два портала: внешний для самого оператора и внутренний — для выполнения запроса от имени оператора. Ранее можно было добиться расхождения объявленных типов строк этих двух порталов, что приводило к раскрытию содержимого памяти сервера и выполнению произвольного кода.

    Проект PostgreSQL благодарит Бена Морриса (при сотрудничестве с Claude и Anthropic Research) и Питера Гейгана за сообщение об этой проблеме. (CVE-2026-16239)

  • Устранение переполнения буфера при работе с длинными аббревиатурами часовых поясов в to_char() (Том Лейн) §

    Переполнение могло привести к сбою сервера. Также фиксировались уязвимости, вызывающие выполнение произвольного кода.

    Проект PostgreSQL благодарит пользователя Hcamael, Амжада Шахзада, Тань Чжэнь из AntAISecurityLab, Томера Фишмана, Чжэн Юй, Эми Бернетт (при помощи Codex Security компании OpenAI), Рика де Ягера, Хивон Сона, Сильвию Майер, Александра Алексеева и Хиллай Бен-Сассона за сообщение об этой проблеме. (CVE-2026-14669)

  • Устранение риска переполения буфера в функциях match/split с регулярными выражениями (Масахико Савада) §

    Ранее при передаче некорректно зашифрованных данных эти функции могли выполнять запись за пределы буфера преобразования.

    Проект PostgreSQL благодарит Франческо Верарди за сообщение об этой проблеме. (CVE-2026-14664)

  • Ужесточение проверки корректности входных данных в функции ascii() (Микаэль Пакье) §

    Если в функцию попадали некорректно закодированные данные, она могла быть вынуждена прочитать и вернуть несколько лишних байтов данных. В сборках с поддержкой проверочных утверждений также могли срабатывать проверочные утверждения.

    Проект PostgreSQL благодарит пользователя Hcamael за сообщение об этой проблеме. (CVE-2026-18024)

  • Исправление обработки мультидиапазонных типов в функции pg_restore_attribute_stats() (OpenAI Security Research Team, команда исследований вопросов безопасности OpenAI) § §

    Ранее функция pg_restore_attribute_stats() обрабатывала мультидиапазонные типы так же, как и базовые диапазонные типы. Такая логика корректно применялась к гистограмме границ, но не подходила для других статистических данных.

    Проект PostgreSQL благодарит Эми Бернетт за сообщение об этой проблеме. (CVE-2026-16238)

  • Добавление в функцию scalarineqsel() проверки того, что константа имеет ожидаемый тип tid (Том Лейн) §

    Это ожидание справедливо для всех встроенных операторов, которые используют эту функцию оценки. Ранее злонамеренно сконструированный оператор, не соответсвующий этому требованию, мог привести к сбою или раскрытию содержимого памяти сервера.

    Проект PostgreSQL благодарит пользователя Hcamael за сообщение об этой проблеме. (CVE-2026-14668)

  • Усиление защиты кода для типов tsvector и tsquery от слишком длинных значений (как отдельных лексем, так и общей длины вектора/запроса) (Том Лейн) § §

    Описанные ограничения применялись не во всех путях выполнения кода.

    Проект PostgreSQL благодарит Юйхан У, Чжэньпэн Лина, Чжэнь Юй и пользователя Hcamael за сообщение об этих проблемах. (CVE-2026-14662)

  • Исправление мест кода, где ошибочно предполагалось, что количество аргументов функции не превышает FUNC_MAX_ARGS (Том Лейн) § §

    Фактическое ограничение сервера на количество аргументов агрегатной функции составляет FUNC_MAX_ARGS - 1, однако анализатор запросов не применял это ограничение, что создавало угрозу для последующих уровней.

    Проект PostgreSQL благодарит Чжэн Юй, пользователя ylwangtju и Масахико Савада за сообщение об этих проблемах. (CVE-2026-14679)

  • Запрет на вызов функций, которые принимают или возвращают тип internal, из SQL (Том Лейн) § §

    Существующие меры защиты от подобного поведения оказались недостаточными, поэтому были добавлены более явные проверки.

    Проект PostgreSQL благодарит Эми Бернетт (при помощи Codex Security компании OpenAI) за сообщение об этой проблеме. (CVE-2026-14680)

  • Сохранение владельца объектов расширенной статистики при перестройке с помощью команды ALTER TABLE (Масахико Савада) §

    Ранее роль, выполнявшая команду ALTER TABLE, становилась владельцем таких объектов, но это было некорректно.

    Проект PostgreSQL благодарит Ноя Миша за сообщение об этой проблеме. (CVE-2026-6469)

  • Заключение имени поля в кавычки при необходимости во время разбора вызова функции EXTRACT() (Натан Боссарт) §

    В качестве имени поля в EXTRACT() анализатор принимает любые строковые литералы, причём проверки пока не происходит. Если вызов хранится и разбирается, например при выгрузке с pg_dump, тело строки использовалось без изменений, что могло привести к SQL-инъекции.

    Проект PostgreSQL благодарит Бена Морриса за сообщение об этой проблеме. (CVE-2026-15741)

  • Добавление проверок права USAGE для типов данных, где такие проверки ранее отсутствовали (Натан Боссарт) § § §

    Проверка не проводилась ни командой CREATE TYPE AS RANGE, ни ALTER TABLE OF, ни командами, которые создают хранимые выражения. Эти недоработки позволяли ролям без права USAGE всё же создавать объекты, зависящие от типа, что впоследствии могло помешать владельцу типа изменить его.

    Проект PostgreSQL благодарит Цзинчжоу Фу за сообщение об этой проблеме. (CVE-2026-6470)

  • Аннулирование кешируемых планов, зависящих от роли, после её изменения (Илья Староверов, Синъя Като, Натан Боссарт) §

    Изменения членства роли, атрибутов роли и владельца базы данных могут повлиять на ожидаемое поведение политик безопасности на уровне строк, но ранее при этом продолжали использоваться кешированные планы, соответствующие старому состоянию.

    Проект PostgreSQL благодарит Илью Староверова и Синъю Като за сообщение об этой проблеме. (CVE-2026-14666)

  • Отклонение запроса GSSEncRequest после прямого подключения по SSL (Микаэль Пакье) §

    После установления подключения с TLS-шифрованием сервер всё ещё мог принять запрос для шифрования GSSAPI. Если оно оказывалось успешным, подключение продолжалось с использованием TLS-шифрования, но выглядело как подключение GSS для правил pg_hba. Таким образом, политика pg_hba, предназначенная для запрета TLS, не применялась корректно.

    Проект PostgreSQL благодарит p4p3r за сообщение об этой проблеме. (CVE-2026-14681)

  • Реализация более праводподобных имитационных секретов для аутентификации SCRAM (Натан Боссарт) §

    Если выполняется попытка входа по SCRAM для роли, которая не существует или не имеет SCRAM-секрета, генерируется имитационный секрет и процедура аутентификации выполняется в любом случае, чтобы не раскрывать эти факты злоумышленнику. Однако имитационный секрет создавался с фиксированным количеством итераций, что само по себе может быть заметным расхождением в ответных данных. Вместо этого теперь используется параметр конфигурации scram_iterations, чтобы имитационный секрет был более похож на реальный секрет, используемый в установке.

    Проект PostgreSQL благодарит Радима Марека за сообщение об этой проблеме. (CVE-2026-14672)

  • Исправление записей за пределами выделенной памяти в приложениях ecpg, которые вызывались некорректными данными типа bytea, полученными от сервера (Микаэль Пакье) §

    В ecpg без проверки предполагалось, что любое значение типа bytea должно начинаться с \x. Повреждённый или вредоносный сервер мог отправить строку короче 2 байт, что приводило к повреждению памяти в приложении.

    Проект PostgreSQL благодарит ylwangtju за сообщение об этой проблеме. (CVE-2026-16241)

  • Запрет раскрытия обратных кавычек в аргументе psql-команды \unrestrict (Натан Боссарт) §

    Из-за этого упущения в исправлении CVE-2025-8714 злоумышленник мог внеднять команды оболочки в текстовый вывод дампа, который применяется во время восстановления на компьютере с psql. Именно этот сценарий и предполагалось предотвратить при исправлении CVE-2025-8714.

    Проект PostgreSQL благодарит Лукаса Вельгуса, Филипа Януша и Даниэля Беккера за сообщение об этой проблеме. (CVE-2026-18408)

  • Удаление допущения pg_dump, что столбец pg_proc.protrftypes не может иметь более FUNC_MAX_ARGS вхождений (Том Лейн) §

    Поскольку в столбце могут быть вхождения как для входных, так и для выходных аргументов, целесообразно, чтобы длина этого массива могла превышать значение FUNC_MAX_ARGS (которое ограничивает только входные аргументы). Даже в противном случае pg_dump не может допускать, что сервер был собран с таким же значением FUNC_MAX_ARGS, которое уже установлено. Переполнение памяти приведёт к её повреждению в pg_dump.

    Проект PostgreSQL благодарит Масахико Савада за сообщение об этой проблеме. (CVE-2026-19385)

  • Усиление PL/Perl для защиты от «связанных» массивов и хешей Perl (Том Лейн) §

    Связанный объект, поведение которого отличается от поведения обычного объекта, может приводить к перезаписи памяти или некорректному массиву результатов, что может вызывать проблемы в будущем.

    Проект PostgreSQL благодарит Hcamael за сообщение об этой проблеме. (CVE-2026-14670)

  • Устранение случаев целочисленного переполнения при вычислении объёма выделяемой памяти в PL/Perl и PL/Tcl (Хейкки Линнакангас) §

    Проблема аналогична CVE-2026-6473, но обнаружена в другой части кода. Исправление также аналогичное.

    Проект PostgreSQL благодарит Tulya Project (Team Dhiutsa, Bitecope Technologies Private Ltd) за сообщение об этой проблеме. (CVE-2026-14677)

  • Обеспечение в функциях contrib/amcheck ограничения search_path до выполнения выражений индексов (Ной Миш) §

    Поскольку amcheck выполняет такие выражения индексов как владелец их таблиц, вызывающая сторона потенциально может подменить зависимые от search_path функции, чтобы выполнить произвольный код как владелец таблицы. По умолчанию это не является уязвимостью, поскольку вызывать функции amcheck можно только суперпользователям. Однако если такое право появляется у другого пользователя, это создаёт гораздо более серьёзную проблему, чем описано в документации.

    Проект PostgreSQL благодарит Юэлинь Ван и Джейкоба Брейзила за сообщение об этой проблеме. (CVE-2026-14673)

  • Устранение случаев целочисленного переполнения в функциях levenshtein() и levenshtein_less_equal() модуля contrib/fuzzystrmatch (Натан Боссарт) §

    Передача больших значений стоимости этим функциям могла приводить к целочисленным переполнениям, что приводило к бессмысленным результатам и в некоторых случаях даже могло стать причиной выхода за пределы выделенной памяти.

    Проект PostgreSQL благодарит Бена Морриса (при сотрудничестве с Claude и Anthropic Research) за сообщение об этой проблеме. (CVE-2026-15742)

  • Устранение переполнения буфера в модуле contrib/pg_stat_statements (Альваро Эррера) §

    Ранее в ходе нормализации запроса некорректно определялся объём пространства, который потребуется нормализованной строке.

    Проект PostgreSQL благодарит Саджиба Лохани (при помощи TrendAI Zero Day Initiative) и Юэлинь Ван за сообщение об этой проблеме. (CVE-2026-14676)

  • Исправление ошибки с типами данных в функции picksplit для индексов GiST модуля contrib/pg_trgm (Хейкки Линнакангас) §

    Ошибка приводила к чтению за пределами буфера, из-за чего, как правило, принимались некорректные решения о разделении страниц. В крайних случаях происходил сбой.

    Проект PostgreSQL благодарит Мехмета Д. Инса за сообщение об этой проблеме. (CVE-2026-14678)

  • Удаление кеша планов в contrib/refint (Аюш Тивари) §

    Такое поведение кеширования содержит несколько серьёзных ошибок, в частности, функция check_foreign_key() встраивает новые значения ключа в свои каскадные UPDATE-запросы, из-за чего кешированный план повторно использует изначально заданные значения, а не те значения ключа, которые должны использоваться. Простейшее решение — удалить этот механизм.

    Проект PostgreSQL благодарит пользователя Hcamael за сообщение об этой проблеме. (CVE-2026-14671)

  • Обеспечение корректного обновления значения pg_class.reltuples таблицы при параллельном построении индексов GIN (Ян Нидзвецки, Томаш Вондра) §

    Параллельный рабочий процесс мог сообщать неинициализированное значение для количества обрабатываемых строк, что приводило к ошибочному значению reltuples, вплоть до Infinity и NaN. Из-за таких значений операции автоочистки и автоанализа в дальнейшем могли быть не выполнены для этой таблицы. В таких случаях требуется корректировка значений вручную. Чтобы сбросить reltuples до корректного значения, нужно выполнить команду ANALYZE или создать другой индекс. При наличии таблиц с индексами GIN рекомендуется сначала проверить корректность значений reltuples. Для этого используйте такой запрос:

    SELECT DISTINCT t.oid::regclass, t.reltuples
    FROM pg_class t
      JOIN pg_index i ON t.oid = i.indrelid
      JOIN pg_class ic ON i.indexrelid = ic.oid
    WHERE t.relhasindex AND ic.relam = 2742;
  • Корректировка обработки операций асинхронного чтения при повторном сканировании асинхронного узла плана Append (Александр Коротков, Глеб Кашкин, Эцуро Фудзита) §

    Когда верхний узел плана повторно сканирует Append до того, как будет прочитан весь вывод Append, необходимо отменить все незавершённые запросы к внешним серверам (например, через postgres_fdw). В случаях, когда параметры подплана изменялись или он удалялся в ходе отсечения секций при следующем сканировании, эта логика работала некорректно. Это могло приводить к некорректным результатам запроса, зацикливанию или сбою проверочных утверждений.

  • Исправление ошибки при отсечении секций для таблиц с диапазонным секционированием (Дэвид Роули) §

    В некоторых случаях секция по умолчанию (DEFAULT) пропускалась, когда не должна была, что приводило к отсутствию строк в результатах запроса.

  • Корректное обновление состояния обёртки сторонних данных в узле плана ModifyTable после отсечения результирующих отношений (Аюш Тивари, Рафия Сабих) § §

    Ранее, если в ходе отсечения секций во время выполнения обнаруживалось, что некоторые секции целевой секционированной таблицы сканировать не нужно и в таблице содержатся секции сторонних таблиц, возникал риск сбоя или некорректного поведения.

  • Исправление логики параллельного обновления для команды UPDATE с предложением RETURNING OLD, выполняемой в таблице с триггером BEFORE UPDATE (Дин Рашид) §

    Если целевая строка была одновременно обновлена, то на уровне изоляции READ COMMITTED значения OLD в предложении RETURNING должны отражать обновлённую строку. Однако при наличии триггера возвращались устаревшие значения (хотя и сам триггер, и результирующая строка видели корректные значения).

  • Устранение проблемы с производительностью хеш-соединений при наличии нескольких ключей соединения и большого количества значений NULL (Дэвид Роули) §

    Кортежи с NULL-ключами не должны вставляться в хеш-таблицу, так как они никогда не совпадут ни с какими другими кортежами. Ранее, если в непоследнем столбце соединения оказывалось значение NULL, происходило значительное раздувание хеш-таблицы при большом количестве значений NULL во входных данных.

  • Исправление разбора OLD/NEW в скобках в выражениях RETURNING (Марко Груич) §

    Ранее выражения типа (old).colname и (old).* обрабатывались некорректно и фактически преобразовывались в ссылки на NEW.

  • Исправление проверок планировщика на допустимость NULL и строгость для выражений значение IN (массив) (Аюш Тивари) §

    Эти проверки должны проходить успешно только в случае, если массив-операнд заведомо непустой. Ранее это условие не учитывалось и применялись некорректные оптимизации. В результате при пустом массиве можно было получить некорректный ответ на запрос.

  • Исправление некорректной логики удаления соединений (Матеус Алькантара, Ричард Гуо) § §

    В особых случаях существовал риск того, что возвращаемое значение константы с обнуляемой стороны внешнего соединения не преобразовывалось в NULL, хотя должно было.

  • Добавление более тщательной очистки PlaceHolderVars при удалении соединения (Ричард Гуо, Арне Роланд) § §

    Этим исправлением устраняются различные пограничные случаи, которые могли приводить к срабатыванию проверок утверждений или некорректным планам запросов.

  • Добавление недостающих проверок хешируемости данных типа-контейнера (массивов, составных типов и диапазонов) в сравнениях на равенство (Андрей Лепихов, Том Лейн) §

    Перед принятием решения об использовании хешированного плана запроса планировщик должен проверять хешируемость данных типа-контейнера. В некоторых случаях этот шаг пропускался, что приводило к ошибкам «could not identify a hash function» (не удалось найти функцию хеширования).

  • Предотвращение проталкивания (pushing down) предложения WHERE, минуя шаг группировки с другим правилом равенства (Ричард Гуо) §

    Тест на группирующий столбец, к которому применяется недетерминированное правило сортировки, можно протолкнуть, только если он является сравнением, использующим то же самое правило сортировки. В противном случае в фильтр могли попасть некоторые строки, которые бы объединились в ходе группировки.

  • Исправление некорректной оптимизации оконных функций COUNT с предложением EXCLUDE или без ORDER BY (Ченпэн Ян, Дэвид Роули) §

    Такие оконные функции ошибочно считались монотонными, что могло приводить к ошибочным ответам.

  • Устранение ошибки «cache lookup failed for collation 0» (ошибка поиска правила сортировки 0 в кеше) при поиске планировщиком статистики по столбцу типа "char" (Фэн У) §

  • Исправление поведения команды ALTER COLUMN ... DROP EXPRESSION, чтобы она выполнялась при наличии нескольких уровней секционирования (Альберто Пиай) §

  • Исправление подключения секций индексов, которые являются ограничениями-исключениями (Япинь Ли) §

    Ранее происходили сбои при выгрузке и восстановлении ограничений-исключений в секционированных таблицах.

  • Запрет на установку параметра NO INHERIT для ограничений NOT NULL в секционированных таблицах при выполнении ALTER CONSTRAINT (Андреас Карлссон) §

    Ограничение NOT NULL в секционированных таблицах должно наследоваться всеми секциями, поэтому оно не должно быть помечено как NO INHERIT. Это требование соблюдалось при создании ограничения, однако пропускалось при выполнении ALTER TABLE ... ALTER CONSTRAINT.

  • Запрет на переименование правил в _RETURN (Том Лейн) §

    Это имя закреплено за правилами ON SELECT для представлений, однако ранее команда ALTER RULE позволяла переименовывать другие правила в _RETURN, что впоследствии приводило к проблемам.

  • Добавление недостающего снятия блокировки при назначении членства в роли в команде DROP OWNED BY (Джефф Девис) §

    Ранее выводилось предупреждение, после чего блокировка на операцию назначения членства в роли сохранялась до завершения транзакции.

  • Устранение сбоя EXPLAIN при обратном разборе (deparsing) агрегатных функций SQL/JSON (Ричард Гуо) §

    Некоторые структуры планов приводили к ошибкам «invalid JsonConstructorExpr underlying node type» (некорретный тип нижележащего узла в JsonConstructorExpr ).

  • Исправление использования REINDEX CONCURRENTLY с отложенным ограничением уникальности (Нитин Мотиани) §

    Копия переходного индекса, создаваемая в ходе REINDEX CONCURRENTLY, некорректно помечалась как обеспечивающая немедленную уникальность, что приводило к ложным сообщениям о нарушении ограничения.

  • Исправление логики сопоставления LIKE с недетерминированными правилами сортировки при обработке обратных косых черт (Нитин Мотиани, Том Лейн) § §

    С недетермированными правилами сортировки оператор LIKE некорректно обрабатывал экранирующие обратные косые черты (\\), игнорируя их. Ошибки также возникали с обратной косой чертой перед обычными символами. В этом случае она должна была игнорироваться, но этого не происходило. В результате выполнялся поиск точного соответствия вместо применения недермированного правила сортировки.

  • Исправление оптимизации шаблонов LIKE/регулярных выражений для поиска точных соответсвий при сканировании индекса (Йелте Феннема-Нио) §

    Рефакторинг оператора LIKE с недетерминированными правилами сортировки случайно нарушил оптимизацию для преобразования шаблонов LIKE или регулярных выражений для поиска точных соответсвий в условие равенства индексов, когда правило сортировки индекса не совпадало с правилом сортировки выражения. Это также приводило к замедлению команды psql \d имя_таблицы.

  • Исправление сопоставления локализованных наименований месяцев/дней в функции to_date() (Хейкки Линнакангас) § §

    Логика сопоставления срабатывала некорректно в случаях, когда при смене регистра менялась длина строки в байтах.

  • Исправление правил приведения регистра для конечной сигмы в греческом языке (Джефф Девис) §

    Если перед сигмой стоят символы, которые игнорируются при приведении регистра, она не считается финальной. Это правило работает только для встроенной локали pg_unicode_fast.

  • Исправление некорректной рекомпозиции в NFC для хангыля U+11A7 (TBASE) в корейском языке (Диего Фриас, Микаэль Пакье) §

    Этот символ обрабатывался как слог с T, которым на самом деле он не является, что приводило к его игнорированию в ходе нормализации.

  • Устранение возможного усечения выходных лексем в словарях synonym, нечувствительных к регистрам (Джефф Девис) §

    Ранее, если приведение к нижнему регистру увеличивало длину лексемы в байтах, при выводе она некорректно усекалась до исходной длины.

  • Добавление защиты от усечения символов UTF-8 при смене регистров (Джефф Девис) §

  • Исправление опечатки в коде функции hash_record_extended() (Ман Цзэн) §

    Из-за ошибки в коде функции не удавалось инициализировать второй аргумент isnull, передаваемый FunctionCallInvoke(). Это никак не влияло на существующие встроенные функции расширенного хеширования, которые не проверяют это значение. Однако могла нарушиться работа хеш-функций, поставляемых расширениями, если они проверяют PG_ARGISNULL(1).

  • Устранение сбоя функции pg_get_publication_tables() при параллельном удалении публикуемой таблицы (Бхарат Рупиредди) §

  • Предотвращение сбоя функции satisfies_hash_partition() с VARIADIC NULL (Роберт Хаас) §

  • Более чёткий и согласованный вывод ошибок при некорректных значениях веса в функции tsvector_filter() и родственных функциях (Юан Янг) §

    В частности, теперь символы веса не из набора ASCII выводятся в восьмеричном формате (\nnn) так же, как их бы вывела функция charout(). Это устраняет риск возникновения ошибки из-за некорректной кодировки.

  • Запрет на использование значений сдвига метки времени, при котором метка оказывается вне допустимого диапазона, в функции uuidv7() (Баджи Шейк) §

    Значение сдвига не должно быть большим, чтобы метка времени не выходила за пределы диапазона, допустимого для v7 UUID. Ранее генерировались «мусорные» значения UUID.

  • Исправление некорректной обработки узлов простраства имён в функции xpath() (Микаэль Пакье) § §

    Это исправление позволяет избежать неожиданного вывода ошибки «could not copy node» (не удалось скопировать узел).

  • Исправление метода .decimal jsonpath, чтобы при некорректной точности или масштабе он не вызывал критическую ошибку (Юэн Янг) § §

    В немом режиме такие ошибки, связанные с некорректными значениями точности и масштаба, должны игнорироваться, однако этого не происходило.

  • Устранение сбоя NULL-указателя, когда у IS JSON или подобных конструкций аргумент относится к строковой категории, но не имеет приведения к типу text (Аюш Тивари) §

    В ядре PostgreSQL таких типов данных нет, но проблема встречается в некоторых расширениях.

  • Обеспечение приведения значений SQL/JSON ON EMPTY / ON ERROR DEFAULT к корректному модификатору типа (Юан Янг) §

    Например, заявленные значения точности и масштаба целевого столбца numeric не применялись к значению по умолчанию.

  • Предотвращение зависимого от устройства поведения при делении минимально возможного значения money на -1 (Андрей Рачицкий) §

  • Устранение сбоя из-за нехватки памяти при добавлении новой записи в кеш для словаря текстового поиска (Том Лейн) §

  • Исправление ошибок, связанных с безопасным доступом к памяти, при обработке некорректных файлов словарей Ispell и Hunspell (Андрей Рачицкий) §

  • Предотвращение доступа к временным таблицам других сеансов (Джим Джонс, Даниил Давыдов, Александр Коротков) § §

    В некоторых случаях доступ не блокировался, что приводило к некорректным (несогласованным) результатам без вывода ошибок.

  • Устранение ошибок «no empty local buffer available» (нет пустого локального буфера) при доступе к временным таблицам (Мелани Плейгман) §

    Теперь количество локальных буферов, которые может использовать механизм потокового чтения, ограничено. Ранее при большом значении effective_io_concurrency один поток мог использовать все буферы, что приводило к сбою.

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

    Ранее обработка баз данных непреднамеренно выполнялась, начиная с самой низкой оценки и заканчивая самой высокой, хотя логика должна быть обратной.

  • Восстановление полноценного использования пула общих буферов в аварийном режиме VACUUM при зацикливании (Мелани Плейгман) § §

    Стандартная операция VACUUM ограничена использованием лишь нескольких общих буферов, чтобы избежать слишком сильного влияния на другие процессы. Однако в аварийном режиме необходимо высвободить идентификаторы транзакций как можно скорее, поэтому ограничение должно быть снято, чтобы процесс очистки выполнялся быстрее. Этот механизм был случайно сломан в ходе рефакторинга в версии 18. Теперь он восстановлен.

  • Устранение утечек памяти в параллельных рабочих процессах очистки (Баджи Шейк) §

    Отчёты по выполнению параллельных рабочих процессов приводили к утечке около 1 КБ за отчёт. Объём утечки рос по мере активности рабочего процесса.

  • Учёт отмены запросов и задержки очистки при очистке дерева идентификаторов индексов GIN (Пол Ким, Александр Коротков) §

    Дерево идентификаторов для общего значения может быть большим, поэтому отсутствие такого учёта могло позволять процессу очистки работать долгое время, прежде чем он заметит прерывание.

  • Устранение риска некорректного декодирования индексных кортежей в ходе сканирований только по индексу GiST и SP-GiST (Питер Гейган (Peter Geoghegan) §

    Эта ошибка могла приводить к выдаче повреждённых данных из плана сканирования только по индексу. Единственный затронутый базовый класс операторов — GiST range_ops. Ошибка могла произойти только, если диапазонный столбец не был первым столбцом индекса.

  • Обеспечение своевременного добавления последнего нового блока таблицы при её массовом расширении в карту свободного пространства (Цзинтан Чжан) §

    В результате ошибки со сдвигом на один при расширении таблицы сразу на несколько блоков последний блок не помечался в карте как свободный. Эта ошибка исправлялась в ходе очистки, но до этого блок не использовался.

  • Устранение риска двойного освобождения или зацикливания операции восстановления при очистке ресурсов в момент прерывания транзакции (Том Лейн) §

  • Возможность создания одного каталога несколькими параллельными процессами (Эндрю Дунстан, Том Лейн) §

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

  • Предотвращение возникновения недействительных зависимостей за счёт разделяемой блокировки объектов, от которых зависят другие объекты (Бертран Друво) § §

    Если установлена разделяемая блокировка, при любой попытке удалить объект с зависимостями будет возникать конфликт, что позволяет устранить условие гонки, которое раньше возникало. Например, в одном сеансе удаляется схема (которая для этого сеанса пустая), а параллельно в другом сеансе происходит создание функции в этой схеме. Ранее обе транзакции могли зафиксировать изменения, после чего оставалось некорректное определение функции. Теперь одна из транзакций прервётся ошибкой.

  • Устранение условия гонки при обнаружении конфликтов в режиме изоляции SERIALIZABLE (Питер Гейган) §

    При проверке изначально пустого индекса-В-дерева конфликты могли не обнаруживаться, что приводило к сбоям сериализуемости, поскольку некорректно допускалась фиксация конфликтующих транзакций.

  • Устранение условия гонки в коде ProcSignalBarrier (Масахико Савада) §

    Ошибка могла привести к зависанию процессов, как правило, после вывода «still waiting for backend with PID nnnn to accept ProcSignalBarrier» (продолжается ожидание получения сигнала ProcSignalBarrier обслуживающим процессом с PID nnnn).

  • Устранение условий гонки, когда процессы, принадлежащие к одной группе блокировки, выходили одновременно (Влад Лесин) § §

    Ранее мог произойти аварийный сбой сервера с ошибками, такими как «latch already owned» (блокировка уже занята). Эта проблема не была характерна для обычных параллельных запросов, поскольку лидер не выходил до тех пор, пока не завершатся все рабочие процессы, однако встречалась в некоторых расширениях.

  • Запись в WAL операций очистки битов карт видимости (Мелани Плейгман, Андрес Фройнд) § § §

    Ранее операции очистки карт видимости игнорировались процессом создания сводок WAL, что могло привести к некорректному инкрементальному резервному копированию. Также при необходимости в журнал не записывались образы полных страниц карт видимости, из-за чего нельзя было обнаружить разрывы при записи страниц. Это могло привести к некорректному поведению, например некорректным результатам сканирований только индекса.

  • Предотвращение зависания процесса создания сводок WAL при переключении линии времени (Роберт Хаас) § §

  • Устранение условия гонки при выборе линии времени в ходе логического декодирования при повышении резервного узла (Бертран Друво) § §

    Ранее мог происходить сбой логического декодирования на резервном узле с ошибкой «requested WAL segment has already been removed» (запрошенный сегмент WAL уже удалён). Повторная попытка завершалась успехом. Проблема не была постоянной, но создавала риски для устойчивости.

  • Предотвращение вывода полной строки подключения приёмником WAL при перемещениях по линии времени (Чао Ли) §

    Представление pg_stat_wal_receiver должно выводить обработанную строку подключения без чувствительной информации. Однако при повторном использовании существующего процесса-приёмника WAL временно выводилась строка целиком.

  • Применение проверок времени выполнения, а не только проверочных утверждений, для подтверждения корректного количества столбцов в кортежах, полученных в ходе логической репликации (Варик Матевосян) §

    Вредоносная или повреждённая публикующая сторона могла отправить некорректное количество столбцов. Несмотря на то, что сценарий с серьёзными последствиями такого поведения не был найден, дополнительные меры предосторожности считаются необходимыми.

  • Исправление экранирования строковых параметров в конструируемых командах репликации (Том Лейн) §

    В различных местах, где генерируются команды репликации, некорректно выполнялось экранирование имён слотов репликации и других параметров, которые необходимо добавлять в эти команды. Это могло приводить к непредвиденным синтаксическим ошибкам в них. В теории, специально сформированное имя слота репликации могло бы привести к SQL-инъекции. Однако на практике подобный сценарий представляется крайне маловероятным, поскольку операции репликации могут вызываться только пользователями с широкими правами, и у них нет причин использовать имя слота из ненадёжного источника.

  • Исправление логического декодирования пустых подготовленных транзакций (Масахико Савада) §

    Подготовленная транзакция, которая не вызывала декодируемых изменений, могла привести к отправке команды COMMIT/ROLLBACK PREPARED в плагин вывода без предшествующей команды PREPARE. Для встроенного подписчика это нарушает репликацию, и в других плагинах это, вероятно, тоже вызовет ошибку.

  • Исправление повреждения нежурналируемых последовательностей после повышения резервного узла (Фудзии Масао) §

    Ранее, если нежурналируемая последовательность создавалась на главном сервере и реплицировалась на резерный сервер, при обращении к этой последовательности после повышения резервного сервера могла возникать ошибка «bad magic number in sequence» (некорректное «магическое» число в последовательности) или подобные ошибки.

  • Устранение ошибки переподключения каскадного резервного сервера после переключения на восстановление из архива (Марко Ненчарини) §

    Каскадный резервный сервер мог не подключиться к вышестоящему серверу с ошибкой «requested starting point ... is ahead of the WAL flush position» («запрошенная начальная точка ... впереди позиции сброшенных данных журнала») после переключения на восстановление из архива.

  • Запрет принимать подключения в режиме горячего резерва, пока не будет достигнуто согласованное состояние базы данных при воспроизведении WAL (Никхил Сонтакке) §

  • Устранена попытка очистить pg_database.dathasloginevt локально на резервном сервере (Аюш Тивари) §

    Очистка событийного триггера пыталась выполнить это действие на резервных серверах также, как и на главном сервере. Однако, на резервном сервере это невозможно, и в этом нет необходимости, потому что воспроизведение изменений баз данных на главном вскоре устранит проблему.

  • Устранение условия гонки при удалении устаревших слотов репликации (Сюнэн Чжоу) §

    Некорректная разблокировка и сообщение в журнале могли возникнуть, если другой сеанс немедленно переиспользовал запись удалённого слота в разделяемой памяти.

  • Устранено условие гонки при удалении эфемерных слотов репликации (Хоу Чжицзе) §

    Код освобождения слота выполнял некоторые дополнительные обновления в записи слота репликации в разделяемой памяти после освобождения слота. Это небезопасно, так как другой сеанс мог немедленно переиспользовать запись удалённого слота в разделяемой памяти. В случае эфемерного слота эти обновления пропускаются.

  • Устранение проблемы неактуальных записей о прогрессе во время синхронизации таблиц в логической репликации (Синъя Като) §

    Ранее представление pg_stat_progress_copy на подписчике продолжало показывать исходную операцию COPY как активную даже после завершения копирования данных. Неактуальная запись оставалась видимой до момента синхронизации с публикующим сервером.

  • Очистка прогресса базового копирования при ошибке резервного копирования (Чао Ли) § §

    Ранее представление pg_stat_progress_basebackup продолжало показывать неактуальную запись о прогрессе выполнения после ошибки вплоть до отключения клиента репликации. Обычно pg_basebackup отключается немедленно, но другие клиенты могут этого не делать.

  • Исправление потенциальной ошибки PANIC, возникающей при конкурентном удалении записей pgstats при включённом track_functions (Сами Имсейх, Микаэль Пакье) § § §

  • Очистка повреждённой локальной записи pgstats после неудачной попытки выделить место для соответствующей записи в разделяемой хеш-таблице (Ниалл Ньюман) §

    Без такой очистки возникало обращение по нулевому указателю при следующем использовании локальной записи.

  • Предотвращение записи некорректной статистики операций ввода-вывода после сбоя чтения или записи (Бертран Друво) §

  • Устранение сбоя обращения по нулевому указателю в PL/Perl при работе с некорректным объектом типа PostgreSQL::InServer::ARRAY (Син Го) §

  • Добавление в PL/Python корректной проверки ошибок при работе с объектами последовательностей и сопоставлений (Ричард Гуо) §

    Ранее повреждённый объект или необработанное исключение могли вызвать сбой обращения по нулевому указателю.

  • Обеспечение в libpq полной выгрузки всех ожидающих байтов из буфера расшифровки SSL или GSS во время выполнения функции pqReadData() (Джейкоб Чемпион) § § § §

    Это позволяет избежать пограничных случаев, когда libpq или вызывающее его приложение ожидают поступления дополнительных данных через сокет, хотя на самом деле все данные уже получены.

  • Улучшение обработки ситуаций нехватки памяти в libpq (Антонин Боннефой) §

  • Исправление трассировки libpq для корректного вывода сообщений BackendKeyData и CancelRequest нового формата (Антонин Боннефой) §

  • Обеспечение возможности для libpq принимать сообщения ParameterDescription, превышающие 30000 байт (Нин Сун) §

    Ранее данный тип сообщения не относился к тем, которые, согласно эвристике проверки корректности libpq, могли быть длинными. Это ограничение приводило к сбою при выполнении подготовленных запросов с более чем 7498 параметрами, что маловероятно, но поддерживается.

  • Устранение сбоя нулевого указателя в компиляторе ecpg (Жеан-Гийом де Рорте) §

    ecpg выдавал ошибку при обработке секции DECLARE, в которой объединение было вложено в структуру.

  • Введение запрета на использование нескольких элементов заголовка в операторах GET/SET DESCRIPTOR в ecpg (Масаси Камура) §

    Ранее с точки зрения грамматики подобный синтаксис допускался, но это приводило к генерации неисправного кода C. Внесены изменения в грамматику и документацию: теперь разрешается только один элемент заголовка.

  • Исправление проблем отложенных ошибок в конвейерном режиме psql (Микаэль Пакье) §

    Клиент psql мог зависнуть или завершиться сбоем проверочного утверждения в ситуациях, когда сервер отвечает ошибкой на сообщение Sync, например, при нарушении отложенного ограничения.

  • Синхронизация ширины строк в расширенном выровненном формате вывода psql (Павел Стехуле) §

    Когда строки данных таблицы уже, чем строки заголовков записей, ширина строк данных увеличивается до ширины заголовков, чтобы вывод выглядел аккуратно.

  • Установление ограничения на максимальное значение специальной переменной WATCH_INTERVAL в psql (Свен Клемм, Даниэль Густафссон) §

    При передаче слишком большого значения psql выдавал ошибку, но все равно применял изменение параметра.

  • Исправление проверки прав клиентом psql для показа размеров баз данных при вызове \l+ (Кристоф Берг) §

    Базовая функция сервера разрешает пользователям с правом pg_read_all_stats видеть размеры всех баз данных, даже если у них нет права CONNECT. Однако psql не учитывал это и не вызывал функцию, если у пользователя отсутствовало право CONNECT.

  • Исправление дополнения табуляцией psql для \df с учётом процедур (Эрик Виндхольд) §

  • Исправление ошибки безопасности потоков pgbench (Фудзии Масао) §

    При запуске pgbench в многопоточном режиме с параметром --verbose-errors разные потоки могли пытаться использовать один и тот же буфер для создания сообщений об ошибках, что приводило к повреждению вывода журнала.

  • Устранён риск бесконечного цикла в случае, если исходный файл короче ожидаемого, в pg_combinebackup (Питер Эйзентраут) §

  • Исправление очистки объектов публикующего сервера после ошибок в работе pg_createsubscriber (Ниша Мунд) §

    При сбое pg_createsubscriber после создания объектов логической репликации он должен удалять публикацию и слот репликации, созданные на публикующем сервере. В случае некоторых ошибок этого не происходило.

  • Использование групповых прав на чтение исходного кластера для файлов вывода pg_recvlogical (Фудзии Масао) §

    В документации было описано такое поведение pg_recvlogical, но в действительности утилита никогда не включала групповой доступ на чтение.

  • Исправление несогласованного поведения pg_restore с параметрами --statistics или --statistics-only (Чао Ли, Микаэль Пакье) § §

    При использовании совместно с другими параметрами выборочного восстановления, такими как --schema, эти параметры не восстанавливали ожидаемые объекты, в отличие от pg_dump с аналогичными параметрами.

  • Исправление поведения команды --missing-stats-only утилиты vacuumdb — теперь она игнорирует индексы секционированных выражений (Баджи Шайк) §

    Ранее vacuumdb всегда пытался выполнить ANALYZE для секционированной таблицы. Это не давало никакого результата, так как статистика никогда не создаётся для секционированных индексов, а только для их дочерних индексов.

  • Исправление ошибки, из-за которой не сообщалось о повреждении флага allequalimage в метастранице btree в расширении fc (Чао Ли) §

  • Исправление утечки памяти на время выполнения запроса при проверке GIN-индекса в расширении contrib/amcheck (Кирилл Решке) §

  • Исправление обработки данных типа varlena с короткими заголовками в расширении contrib/amcheck (Андрей Бородин) §

    Эта ошибка могла приводить к избыточной работе при проверке btree-индекса, но, по-видимому, не имела более серьёзных последствий.

  • Исправление обработки значений NaN в классах операторов для типов float4 и float8 в расширении contrib/btree_gist (Билл Ким, Том Лейн) §

    Сравнения, а также функции penalty и distance в GiST, не учитывали значения NaN и выдавали неверный результат при их обработке. После установки этого обновления рекомендуется выполнить переиндексацию btree_gist на столбцах с плавающей точкой, если существует вероятность наличия в них значений NaN.

  • Исправление сортировки записей типов bit/varbit при построении GiST-индекса в расширении contrib/btree_gist (Том Лейн) §

    Значения битовых типов сортировались так, как если бы они были типа bytea. Это не приводило к заметным ошибкам, но делало индекс неэффективным из-за различий в представлении данных. После установки этого обновления рекомендуется выполнить переиндексацию btree_gist на битовых столбцах.

  • Исправление поиска с использованием оператора неравенства в расширении contrib/btree_gist (Аюш Тивари) §

    Для типов данных переменной длины код сканирования внутренних страниц индекса использовал неверную функцию сравнения, что приводило к неверным результатам и потенциальным сбоям.

  • Обеспечение приоритета параметра use_scram_passthrough для сопоставления пользователей над соответствующим параметром для внешнего сервера в расширениях contrib/dblink и contrib/postgres_fdw (Матеус Алькантара) § §

    Ранее приоритет был обратным, что не согласуется с поведением других параметров внешних таблиц.

  • Запрет использования параметра use_scram_passthrough в обёртках сторонних данных расширения contrib/dblink (Матеус Алькантара)

    Этот параметр имеет смысл только для внешних серверов и сопоставлений пользователей, однако dblink ошибочно позволял указывать её и на уровне FDW (и затем игнорировал её).

  • Исправление неконтролируемой рекурсии и циклов в расширениях contrib/hstore_plperl, contrib/jsonb_plperl и contrib/jsonb_plpython (Александр Алексеев) § §

    Предотвращение переполнения стека при работе с глубоко вложенными значениями типа jsonb, а также обеспечение возможности прерывания бесконечного цикла, возникающего при попытке разыменования циклических цепочек ссылок на объекты Perl.

  • Исправление утечки статистики catcache в расширении contrib/intarray (Ман Цзэн) §

    Это упущение приводило к предупреждениям вида «resource was not closed: cache pg_statistic».

  • Исправление целочисленного переполнения при сравнениях в contrib/ltree (Аюш Тивари) §

    Значения типа ltree, содержащие более 14 653 меток, приводили к неверным результатам сравнения из-за целочисленного переполнения. Если в индексе btree присутствуют такие значения, он, вероятно, повреждён и должен быть переиндексирован после установки этого обновления.

  • Устранение сбоя в contrib/pgcrypto, вызванного двойным освобождением памяти при ошибке во время работы с объектом OSSLCipher (Юэлинь Ван) §

  • Исправление выхода за границы массива в рабочем процессе autoprewarm расширения contrib/pg_prewarm (Матеус Алькантара) §

    Код пытался получить значение за пределами массива, что могло привести к ошибке сегментации.

  • Устранение переполнения массива при вызове функций heap_force_kill и heap_force_freeze расширения contrib/pg_surgery (Микаэль Пакье) §

    Попытка изменить TID, номер смещения которого равен MaxHeapTuplesPerPage, приводила к записи на один байт за пределы выделенного массива, что могло вызвать аварийное завершение работы сервера.

  • Устранение бесконечного цикла при передаче массивов TID, содержащих более 64 тысяч элементов, в contrib/pg_surgery (Андрей Рачицкий )§

  • Исключение обращений по нулевому указателю функции check_foreign_key() расширения contrib/refint (Аюш Тивари) §

    При каскадном обновлении использование NULL в значении целевого столбца вызывало сбой. Эта проблема возникла как недочёт при исправлении уязвимости CVE-2026-6637, однако и предыдущая реализация не была полностью корректной.

  • Исправление вывода сегментов с индикатором достоверности ~ в модуле contrib/seg (Эван Янг) §

    Из-за опечатки функция seg_out() не выводила индикатор достоверности ~, прикреплённый к верхней границе сегмента. Более того, если у нижней границы был индикатор ~, а у верхней — нет, верхняя граница вообще не выводилась, что некорректно преобразовывало значение в открытый интервал.

  • Устранение сбоя при работе с узлами пространств имён в функции xpath_nodeset() модуля contrib/xml2 (Андрей Чёрный, Микаэль Пакье) §

  • Поддержка сборки PostgreSQL с OpenSSL 4 (Даниэль Густафссон) §

  • Обновление данных часовых поясов до версии tzdata 2026c (Том Лейн) §

    С ноября 2026 года в Альберте (Америка/Эдмонтон) время весь год будет определяться часовым поясом UTC-06 (постоянный переход на летнее время). В этом выпуске предполагается, что для обозначения часового пояса будет использоваться аббревиатура CST. Есть вероятность, что сокращение изменится, но пока неясно, как будет выглядеть новая аббревиатура.

    Марокко (Африка/Касабланка) перейдёт на постоянное время UTC+00 без перехода на летнее время с 20 сентября 2026 года.

FAQ