E.29. Выпуск 15.3
Дата выпуска: 2023-05-11
В этот выпуск вошли различные исправления, внесённые после версии 15.2. За информацией о нововведениях версии 15 обратитесь к Разделу E.32.
E.29.1. Миграция на версию 15.3
Если используется версия 15.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 15.1, см. Раздел E.31.
E.29.2. Изменения
- Устранение уязвимости команды - CREATE SCHEMAпри внесении изменений в- search_path(Александр Лахин) § §- В команде - CREATE SCHEMAобъекты в текущем- search_path, а также объекты в новой схеме были видны даже внутри вызываемой функции или скрипта, пытающихся задать безопасный- search_path. Это потенциально позволяло любому пользователю, имеющему разрешение на создание схемы, перехватить права функции, определяющей контекст безопасности, или скрипта расширения.- Проект PostgreSQL благодарит Александра Лахина за сообщение об этой проблеме. (CVE-2023-2454) 
- Исправление применения политик защиты на уровне строк после встраивания функции, возвращающей множества (Стивен Фрост, Том Лейн) § - Если функция языка SQL, возвращающая множество, обращалась к таблице с политиками защиты на уровне строк и могла быть встроена в вызывающий запрос, эти политики защиты не применялись должным образом в некоторых случаях переиспользования кешированного плана другой ролью. При этом пользователь мог видеть или изменять строки, которые должны были быть невидимыми. - Проект PostgreSQL благодарит Вольфганга Вальтера за сообщение об этой проблеме. (CVE-2023-2455) 
- Устранение потенциального повреждения шаблонной (исходной) базы данных после выполнения команды - CREATE DATABASEс параметром- STRATEGY WAL_LOG(Натан Боссарт, Рё Мацумура) §- Некорректная обработка буфера могла приводить к потере более поздних изменений каталога - pg_classшаблона.
- Устранение утечки памяти и ненужных операций чтения с диска во время выполнения команды - CREATE DATABASEс параметром- STRATEGY WAL_LOG(Андрес Фройнд) §
- Предотвращение сбоев при выполнении - CREATE SCHEMAбез указания имени новой схемы (Микаэль Пакье) §- В соответствии со стандартом SQL допускается написание - CREATE SCHEMA AUTHORIZATION, при этом именем схемы становится- имя_владельца- имя_владельца. Однако в некоторых местах кода требовалось наличие имени схемы, что приводило к сбою.
- Устранение различных сбоев планировщика при выполнении команды - MERGE(Том Лейн) § §- Планирование могло прерваться такой ошибкой, как «variable not found in subplan target list» (переменная не найдена в целевом списке подплана) или «PlaceHolderVar found where not expected» (PlaceHolderVar найдена не там, где ожидалось). 
- Исправление подсчёта количества строк, выводимого командой - MERGE, для некоторых особых случаев (Дин Рашид) § §- При подсчёте количества строк, указанного в метке команды, учитывались строки, которые фактически не были изменены из-за того, что триггер - BEFORE ROWвозвращал NULL. Для согласованности с поведением простых команд- UPDATE/- DELETE, теперь такие строки не учитываются. Кроме того, строка не учитывается дважды при её перемещении командой- MERGEв другую секцию секционированной таблицы.
- Устранение проблем команды - MERGEпри параллельных обновлениях (Дин Рашид, Альваро Эррера) § §- Ранее команда - MERGEмогла выполняться некорректно в некоторых случаях изменения или удаления строки, перед этим изменённой параллельной транзакцией. Это проявлялось в виде сбоя, неправильного выполнения слияния или невыполнения операции.
- Добавлена поддержка декомпиляции команд - MERGE(Альваро Эррера) §- При появлении команды - MERGEтакая поддержка не была добавлена, но она необходима для- MERGEв функциях SQL нового стиля.
- Исправление включения/отключения триггеров, связанных с внешними ключами в секционированных таблицах (Том Лейн) § - Команда - ALTER TABLE ... ENABLE/DISABLE TRIGGERзавершалась ошибкой при применении к триггерам обеспечения целостности внешнего ключа секционированной таблицы, поскольку она пыталась найти «клонированные» триггеры для секций по имени, а у таких триггеров не бывает одинаковых имён. Теперь вместо этого поиск ведётся по OID родительского триггера.
- Запрет изменения составных типов, хранящихся в индексах (Том Лейн) - В команде - ALTER TYPEзапрещено использовать несовместимые на двоичном уровне изменения составных типов, хранящихся в каких-либо столбцах таблицы. (Возможно, когда-нибудь это будет разрешено, но пока этого не произошло; последствия блокировок перезаписи множества таблиц пугают.) Ранее не была замечена возможность, что индекс может содержать составной тип, которого нет в таблице этого индекса.
- Запрет использования системных столбцов как элементов внешних ключей (Том Лейн) § - С тех пор, как системный столбец OID был удалён, использование системных столбцов в качестве элементов внешних ключей не предполагается и в разных местах кода не поддерживается. Поэтому теперь такое использование запрещается, чтобы не исправлять поведение для всех случаев. 
- Запрет копирования строк дочерних таблиц при выполнении команды - COPY TOдля таблицы с включённой защитой на уровне строк (Антонин Хоуска) §- В документации ясно указано, что - COPY TOкопирует строки только из указанной таблицы, а не её дочерних таблиц. Однако если для таблицы была включена защита на уровне строк, это не работало.
- Предотвращение возможных сбоев при передаче пустого массива функциям - array_position()и- array_positions()(Том Лейн)
- Исправление возможного чтения за пределами выборки данных функцией - to_char()(Том Лейн) §- В особом случае это могло приводить к краху сервера. 
- Исправление выхода за границу буфера в функции - translate()(Даниил Анисимов) §- При использовании возможности удаления функция могла читать из входной строки на один байт больше, чем нужно, что создавало небольшой риск сбоя. 
- Настройка логики классификации символов, связанной с текстовым поиском, для правильного определения, является ли - Cтекущей локалью (Джефф Дэвис)- Это упущение могло привести к некорректному поведению кода, когда основное правило сортировки использовало ICU. 
- Предотвращение возможного сбоя при вводе пустого значения для типа - interval(Том Лейн) §
- Возвращение возможности использовать экспоненциальную запись для полей значений - intervalв формате ISO 8601 (Том Лейн)- Ввод интервалов в виде - P0.1e10D, не разрешён официально по ISO 8601, но допускался задолго до версии 15, поэтому сейчас вновь разрешён к использованию.
- Исправление объявления курсора для ошибок разбора в строковых константах JSON (Том Лейн) § - В большинстве случаев, когда в строковом литерале внутри значения JSON обнаруживалась синтаксическая ошибка, не удавалось правильно установить курсор ошибки. В результате выдавалось бесполезное сообщение об ошибке (указывающее на фрагмент перед строкой, а не на фактическую проблемную зону), а в версии 14 и выше даже мог происходить сбой. 
- Устранение повреждения данных, вызванного превышением значения переменной - vacuum_defer_cleanup_ageтекущего 64-битного XID (Андрес Фройнд) §- В версии 14 и выше при нестандартных значениях - vacuum_defer_cleanup_ageXID горизонта очистки мог оказаться слишком большим, что приводило к удалению ещё живых строк при очистке. В версиях 12 и 13 эта проблема затрагивала только индексы GiST, что могло приводить к досрочной перезаписи страниц индекса.
- Исправление ошибки анализатора запроса, из-за которой в особых случаях могли не обнаруживаться неправильно вложенные агрегатные функции (Том Лейн) § - В результате данного упущения мог возникать сбой исполнителя при запросах, которые должны были быть отклонены как недопустимые. 
- Устранение повреждения структуры данных при разборе параметров - SEQUENCE NAME(Дэвид Роули) §- Если событийный триггер перехватывал повреждённое дерево запроса, могли возникать проблемы. 
- Корректное обновление характеристик безопасности распараллеливания узлов плана при перемещении инициализирующих планов с одного узла на другой (Том Лейн) § - В результате данного упущения планировщик мог выдавать ошибки «subplan was not initialized» (подплан не был инициализирован). 
- Устранение сбоев переменных PlaceHolderVars в коде расширенной статистики (Том Лейн) - Использование расширенной статистики по типам зависимости могло приводить к сбою из-за ошибки «PlaceHolderVar found where not expected» (PlaceHolderVar найдена не там, где ожидалось). 
- Исправление неверных тестов на предмет проверки, может ли предложение qual, применённое к подзапросу, быть преобразовано в ограничивающее условие оконной агрегатной функции внутри подзапроса (Дэвид Роули) § - Наличие подплана в таком предложении могло приводить к сбоям проверочных утверждений или неправильным ответам, как и в некоторых других особых случаях. 
- Отключение оптимизации обратного перехода для оконных агрегатных функций, когда вызов содержит вложенные операторы SELECT (Дэвид Роули) § - Для данной оптимизации необходимо, чтобы выражения аргументов агрегатной функции возвращали повторяющиеся результаты, что может не выполняться для вложенного SELECT. 
- Исправление ошибок при выполнении вложенных конструкций - ARRAY[](Александр Лахин, Том Лейн) §- Теперь корректно выявляется переполнение общего объёма, необходимого для массива результатов, что позволяет устранить возможный сбой из-за выделения недостаточного объёма для вывода. Кроме того, обеспечивается обнуление любого дополняющего пробела в результирующем массиве; хотя оставлять в нём мусор, как правило, безвредно, позднее это могло приводить к непредсказуемому поведению. 
- Предотвращение сбоя при изменении поля в столбце массива доменного типа, созданного поверх составного типа (Дмитрий Долгов) § 
- Исправление логики отсечения секций для секционирования по логическим столбцам (Дэвид Роули) § - Отсечение с таким условием, как - boolcol IS NOT TRUE, выполнялось неправильно, что могло приводить к тому, что строки, в которых- boolcolравен NULL, не возвращались. Кроме того, обрабатывался неправильно довольно редкий случай секционирования при- NOT boolcol.
- Устранение условий гонки при очистке по порциям во время параллельного хеш-соединения (Томас Манро, Мелани Плейгман) § - При неудачном выборе времени и - parallel_leader_participation=- off(не являющимся значением по умолчанию) был возможен сбой.
- Повторное вычисление столбцов - GENERATEDпосле проверки EvalPlanQual (Том Лейн) §- В режиме изоляции - READ COMMITTEDмогло потребоваться повторное применение результатов изменения строки к её более новой версии, чем первоначально обнаруженная запросом. В таком случае любые столбцы- GENERATEDтеперь вычисляются повторно, если они зависят от столбцов, изменённых параллельно.
- Устранение утечки памяти при выполнении плана Memoize (Дэвид Роули) § 
- Устранение утечки памяти в счётчике ссылок буфера при массовом добавлении данных в стороннюю таблицу, включённую в дерево секционирования (Александр Пыхалов) § 
- Восстановлена возможность указания значений параметров - vacuum_cost_delayс долями миллисекунд (Томас Манро) §
- Отключение балансировки задержки очистки по стоимости, если параметр - vacuum_cost_delayв таблице для каждого отношения равен нулю (Масахико Савада)- Балансировка задержки должна отключаться каждый раз, когда автоочистка обрабатывает таблицу с параметром - vacuum_cost_delay, заданным для каждого отношения, но это было реализовано только для положительных значений, не включая ноль.
- Устранение сбоев в особых случаях при добавлении столбцов в конец представления (Том Лейн) § 
- Исправление ошибки, редко возникавшей во вложенных планах MULTIEXPR_SUBLINK при изменении секционированных таблиц (Том Лейн) § - Использование синтаксиса - INSERT ... ON CONFLICT DO UPDATE SET (c1, ...) = (SELECT ...)с секционированной целевой таблицей могло приводить к ошибке, если какая-либо дочерняя таблица отличалась от родительской (например, имела другой физический порядок столбцов). Обычно это проявлялось как ошибка при проверке согласованности в исполнителе; но также был возможен сбой или некорректное изменение данных.
- Исправление обработки маркеров - DEFAULTв многострочном запросе- INSERT ... VALUESк представлению с правилом- DO ALSO INSERT ... SELECT(Дин Рашид) §- Такие случаи обычно заканчивались ошибками «unrecognized node type» (нераспознанный тип узла) или сбоями проверочных утверждений. 
- Поддержка ссылок на - OLDи- NEWв подзапросах внутри действий правил (Дин Рашид, Том Лейн) §- Такие ссылки на самом деле являются ссылками - LATERAL, но если подзапрос не был явно помечен как- LATERAL, это могло вызывать крах сервера. При необходимости это выполняется неявно.
- Обеспечение написания правильного псевдонима целевой таблицы при декомпиляции правила или тела SQL-функции, содержащего - INSERT/- UPDATE/- DELETEвнутри- WITH(Том Лейн) §
- Устранение ошибок в оптимизации - SERIALIZABLE READ ONLY(Томас Манро) § §- Транзакции, уже помеченные как «обречённые», запутывали оптимизацию безопасных снимков для транзакций - SERIALIZABLE READ ONLY. В некоторых случаях оптимизация необоснованно пропускалась. В других случаях происходил сбой проверочного утверждения (но в сборках без проверочных утверждений проблем не наблюдалось).
- Предотвращение утечки слотов обработчика кеша в модуле логического декодирования - pgoutput(Ши Юй) §- Несколько циклов запуска и отключения модуля в течение одного сеанса в конечном итоге могли приводить к ошибке «out of relcache_callback_list slots» (нет свободных слотов relcache_callback_list). 
- Исключение ненужных вызовов пользовательских функций проверки для параметров класса операторов индекса (Александр Коротков) § - Это изменение исправляет поведение в некоторых случаях, когда возникала непредвиденная ошибка. 
- Исключение ненужной работы при сканировании составного индекса BRIN с несколькими ключами сканирования (Томаш Вондра) § - При решении о соответствии диапазона в существующем коде учитывался только последний ключ сканирования, поэтому обычно сканировался больший фрагмент индекса, чем необходимо. 
- Исправление обработки маски сети в классе операторов BRIN inet_minmax_multi_ops (Томаш Вондра) - Эта ошибка вызывала сбой проверочного утверждения в сборках с поддержкой проверочных утверждений, но в основном была безвредна в производственных сборках. 
- Исправление обращения к недействительному указателю при построении индекса GiST с буферизацией (Александр Лахин) § - Эта ошибка должна быть безобидной в обычных сборках, поскольку получаемое значение не является критичным; но потенциально она могла приводить к краху сервера. 
- Игнорирование удалённых столбцов и генерируемых столбцов во время логической репликации действий изменения или удаления (Ондер Каладжи, Ши Юй) § § - Ранее репликация с параметром - REPLICA IDENTITY FULLзавершалась ошибкой, если таблица содержала такие столбцы.
- Исправление имени события ожидания в вводе-выводе буфера SLRU для времени фиксации транзакции (Александр Лахин) § - Это событие ожидания согласно документации называлось - CommitTsBuffer, но в коде оно было указано как- CommitTSBuffer. Код был изменён для соответствия документации, поскольку так он согласуется с именами других событий ожидания.
- Возвращение сообщения о событии ожидания - SLRUFlushSync(Томас Манро) §- Выдача сообщений об этом типе ожидания была случайно удалена при реорганизации кода. 
- Устранение возможного антипереполнения при расчёте количества сохраняемых сегментов WAL (Кётаро Хоригути) § - Это могло приводить к неправильному учёту - wal_keep_size.
- Устранение накладных расходов по вызову startup_progress_timeout_handler() в режиме ожидания (Бхарат Рупиредди) § - В режиме ожидания фактически не сообщалось о ходе восстановления, но всё равно тратились ресурсы на отслеживание этого процесса. 
- Поддержка сертификатов RSA-PSS со связыванием каналов SCRAM-SHA-256 (Джейкоб Чемпион, Хейкки Линнакангас) § - Для этой функциональности требуется сборка с OpenSSL 1.1.1 или выше. Она влияет как на сервер, так и на libpq. 
- Устранение условий гонки при отслеживании идентификатора процесса в Windows (Томас Манро) § § - Операционная система могла повторно использовать PID до того, как управляющий процесс postmaster обнаруживал, что этот дочерний процесс исчез. Это могло приводить к отслеживанию более чем одного дочернего процесса с одним и тем же PID, что вызывало путаницу. 
- Исправление работы функции - list_copy_head()с пустым списком (Дэвид Роули) §- О негативном влиянии этого дефекта на работу ядра PostgreSQL неизвестно, но с некоторыми расширениями возникали проблемы. 
- Добавление недостающих кодов состояния в - SPI_result_code_string()(Дин Рашид) §
- Исправление ошибочных пометок Valgrind для - AllocSetRealloc()(Карина Лицкевич) §- В особом случае при уменьшении размера большого (>8КБ) непрерывного блока памяти, выделенного через palloc, сборка под контролем Valgrind могла неправильно отметить состояние памяти, освобождённой от порции, что могло приводить к неверным результатам во время тестирования Valgrind. 
- Устранение сбоя проверочного утверждения при выполнении - MERGEдля секционированной таблицы с включённой защитой на уровне строк (Дин Рашид) §
- Предотвращение сбоя проверочного утверждения при декодировании сообщения логической репликации транзакций (Томаш Вондра) § 
- Недопущение зависимости от локали при обработке спецсимволов регулярных выражений (Джефф Дэвис) § - Использование обратной косой черты, за которой следовал символ не из кодировки ASCII, иногда могло приводить к сбою проверочного утверждения в зависимости от текущей локали. 
- Недопущение создания пустых записей WAL в - log_newpage_range(), когда последние несколько страниц в указанном диапазоне пусты (Маттиас ван де Меент) §- Не совсем ясно, возможно ли это на практике в выпущенных версиях, но если это так, то мог происходить сбой проверочного утверждения. 
- Устранение утечки памяти во время существования сеанса в блоках plpgsql - DO, в которых используются выражения приведения типа (Аджит Авекар, Том Лейн) §
- Уточнение проверки размерности массива при преобразовании структур списка Perl в многомерные массивы SQL (Том Лейн) § - plperl мог вести себя неправильно при несогласованной вложенности списков, когда данные представляли собой не прямоугольный массив значений. В таких случаях теперь возникает ошибка, но раньше они могли приводить к сбою или возвращался мусор. 
- Уточнение проверки размерности массива при преобразовании структур списка Python в многомерные массивы SQL (Том Лейн) § § - plpython мог вести себя неправильно при работе с пустыми вложенными списками или несогласованной вложенности таких списков, когда данные представляли собой не прямоугольный массив значений. В первом случае должен был выдаваться пустой массив, а во втором — ошибка. Однако в некоторых случаях происходил сбой, а в других выводился неожиданный результат. 
- Исправление раскрутки стека исключений в plpython (Син Го) § - В редких случаях ошибок очистка стека исключений PG_TRY могла не происходить, что могло приводить к сбою, если другая ошибка возникала до того, как поднимался следующий уровень стека. 
- Исправление непоследовательной обработки ошибок GSS-шифрования в функции - PQconnectPoll()расширения libpq (Микаэль Пакье)- Если для параметра - gssencmodeустановлено значение- require, соединение не помечалось как разорванное после сбоя инициализации GSS. Теперь работа немедленно прекращается, как это уже давно было сделано для аналогичного случая с шифрованием TLS.
- Предупреждение возможного повреждения данных в программах ecpg, собранных с параметром - -C ORACLE(Кётаро Хоригути)- При вызове функции - ecpg_get_data()с нулевым значением- varcharsizeона могла записать завершающий нулевой символ в последний байт предыдущего поля, усекая данные в этом поле.
- Внесение исправлений в код pg_dump для последующего успешного восстановления секционированных таблиц с хеш-секционированием по столбцу типа-перечисления (Том Лейн) § - Поскольку хеш-коды для значений типа-перечисления зависят от OID, присвоенных перечислению, они обычно отличаются после выгрузки и восстановления, а это означает, что строки часто оказываются не в той секции, где они были изначально. Пользователи могут изменить это поведение, указав параметр - --load-via-partition-root; но поскольку без него шансов на успех почти нет, pg_dump теперь автоматически применяет его к таким таблицам.- Кроме того, исправлено поведение pg_restore, чтобы исключить попытки выполнить команду - TRUNCATEдля целевых таблиц перед восстановлением данных в них при использовании- --load-via-partition-root. Это позволяет избежать взаимоблокировок и потери данных.
- Правильное обнаружение файлов, недоступных для поиска в Windows (Хуан Хосе Сантамария Флеча, Микаэль Пакье, Даниэль Ватцингер) § § - Эта ошибка приводила к неправильному поведению, когда расширение pg_dump писало канал ввода-вывода или pg_restore читало его. 
- Подготовка всех команд в конвейере перед его запуском в режиме «prepared» расширения pgbench (Альваро Эррера) § - Это позволяет избежать сбоя, когда скрипт pgbench пытается запустить сериализуемую транзакцию внутри конвейера. 
- Корректная обработка кортежей, имеющих нулевой xmin или xmax, в коде - contrib/amcheckдля проверки кучи (Роберт Хаас) § §
- Правильная обработка XID, появившихся до эпохи 0, в - contrib/amcheck(Андрес Фройнд) §- В случае ошибки мы можем видеть «зацикленный» 32-битный XID, который предшествует эпохе первого XID. Преобразование такого значения в 64-битную форму приводило к получению значения в далёком будущем, и, следовательно, к неправильным отчётам. В таких случаях для корректной работы теперь возвращается FirstNormalFullTransactionId. 
- Корректное определение сбоя в - contrib/basebackup_to_shellпри открытии канала (Роберт Хаас) §
- Предотвращение сбоев в - contrib/hstore_plpython, если преобразуемое значение Python не является сопоставлением (Дмитрий Долгов, Том Лейн)- В таких случаях должна была возникать ошибка, но в Python 3 некоторые API изменились таким образом, что проверка работала неправильно и приводила к сбою. 
- Требование использования значений, кратных 4, для параметра - siglenиндекса GiST в столбце- ltree(Александр Коротков) §- Другие значения приводили к несогласованному обращению к содержимому индекса, что безвредно на оборудовании, совместимом с Intel, но могло приводить к сбою на некоторых других архитектурах. 
- Добавление защиты от неправильного ввода для функции - gist_page_items()в- contrib/pageinspect(Дмитрий Коваль) §
- Исправление неправильного поведения в - contrib/pg_trgmв случае, когда условие регулярного выражения не удовлетворяется (Том Лейн) §- Регулярное выражение, такое как - $foo, является допустимым, но невыполнимым; компилятор регулярных выражений распознаёт это и создаёт пустую диаграмму НКА. Попытка оптимизировать такую диаграмму для сканирования индекса GIN или GiST в pg_trgm приводила к выходу за границу рабочего массива, что могло вызывать сбои.
- Исправление обработки спецпоследовательностей в параметре - application_nameв- contrib/postgres_fdw(Кётаро Хоригути, Микаэль Пакье) §- Выполнение кода для их развёртывания могло завершаться ошибкой, если он выполнялся в фоновом процессе, например, во время автоматического анализа сторонней таблицы. 
- Ограничение использования памяти функцией - pg_get_wal_records_info()в- contrib/pg_walinspect(Бхарат Рупиредди) §
- Использование параметра - --strip-unneededпри удалении лишнего из статических библиотек GNU-совместимым расширением strip (Том Лейн)- Ранее процедура - make install-stripиспользовала в этом случае параметр- -x. Это изменение позволяет избежать неправильного поведения llvm-strip, а также немного сокращает вывод.
- Удаление рекомендаций выполнить автоматическую загрузку файлов DTD для сборки документации и полное отключение такой возможности (Александр Алексеев, Питер Эйзентраут, Том Лейн) § - Теперь нет возможности собирать документацию SGML, не установив файлы DTD DocBook локально. Раньше xsltproc мог загружать эти файлы на лету с sourceforge.net; но sourceforge.net сейчас разрешает доступ только по HTTPS, а ни одна версия xsltproc этого не поддерживает. Поэтому части документации, предполагающие, что это возможно или полезно, были удалены, и вместо этого в рецепты сборки был добавлен параметр xsltproc - --nonet.
- Использование подходящего расположения для временного каталога - portlockпри проведении TAP-тестов в сборках PGXS (Питер Эйзентраут)- Теперь этот каталог создаётся в - tmp_checkв каталоге сборки. Раньше сборки с PGXS пытались создавать его в каталоге установки, который не обязательно был доступен для записи.
- Обновление данных часовых поясов до версии tzdata 2023c, включающее изменение правил перехода на летнее время в Египте, Гренландии, Марокко и Палестине. § - Для обозначения московского времени в часовых поясах Europe/Kirov и Europe/Volgograd теперь вместо числовых аббревиатур используются аббревиатуры MSK/MSD для согласованности с другими часовыми поясами, использующими московское время. Кроме того, часовой пояс America/Yellowknife теперь идентичен America/Edmonton; это отражается на некоторых временных метках до 1948 года в данной зоне.