E.4. Выпуск 18.2#

E.4. Выпуск 18.2

E.4. Выпуск 18.2 #

Дата выпуска:  2026-02-12

Этот выпуск содержит различные исправления по сравнению с 18.1. Информация о новых возможностях в основном выпуске 18 приведена в Раздел E.6.

E.4.1. Миграция на версию 18.2 #

При использовании версии 18.X выгрузка и восстановление базы данных не требуются.

Однако, если вы используете индексы по столбцам типа ltree, их, возможно, потребуется переиндексировать после обновления. Смотрите шестую запись в списке изменений ниже.

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

  • Обеспечена защита от неожиданных размеров oidvector/int2vector (Том Лейн) §

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

    Проект Tantor BE благодарит Алтана Бирлера за сообщение об этой проблеме. (CVE-2026-2003)

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

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

    Проект Tantor BE благодарит Даниэля Фирера, участника zeroday.cloud, за сообщение об этой проблеме. (CVE-2026-2004)

  • Исправлено переполнение буфера в функциях обратного защитного преобразования на базе PGP модуля contrib/pgcrypto (Микаэль Пакье) §

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

    Проект Tantor BE благодарит команду Xint Code, участников zeroday.cloud, за сообщение об этой проблеме. (CVE-2026-2005)

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

    Ранее различные ошибки позволяли злоумышленникам выполнять специально сформированные SQL-запросы, тем самым переполнять строковые буферы, что могло привести к таким серьёзным последствиям, как выполнение произвольного кода. После внесения этих исправлений приложения при обработке строковыми функциями некорректного текста, который был сохранён в базе данных, могут столкнуться с ошибками invalid byte sequence for encoding.

    Проект Tantor BE благодарит Пауля Гесте и Морица Занфта, участников zeroday.cloud, за сообщение об этой проблеме. (CVE-2026-2006)

  • Усилена защита модуля contrib/pg_trgm при переводе строк в нижний регистр (Хейкки Линнакангас) § §

    Устранён риск переполнения буфера, возникавшиго из-за того, что в некоторых локалях перевод строки в нижний регистр мог приводить к увеличению количества символов (не байтов) по сравнению с исходной строкой. Это поведение появилось в версии 18, и соответственно, ошибка наблюдается только в этой версии.

    Проект Tantor BE благодарит Хейкки Линнакангаса за сообщение об этой проблеме. (CVE-2026-2007)

  • Исправлено непоследовательное регистронезависимое сопоставление модуля contrib/ltree (Джефф Дэвис) § §

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

    Теперь всегда используется преобразование регистра основного правила сортировки базы данных. Если база данных не использовала libc в качестве провайдера сортировки и её кодировка не была однобайтовой, потребуется перестроение индексов по столбцам ltree (независимо от индексного метода доступа). Без этого поиск по таким индексам не сможет находить подходящие записи.

  • Добавлено требование совпадения имён ограничений при добавлении ограничения NOT NULL с явным именем командой ALTER TABLE ... ADD CONSTRAINT для столбца, у которого уже есть ограничение NOT NULL. (Альваро Эррера, Шринатх Редди Садипиралла) §

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

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

  • Исправлен механизм перехвата переходной таблицы триггером для запросов с CTE, содержащих команду MERGE (Дин Рашид) §

    Ранее при изменении данных с помощью запросов с CTE, содержащего как MERGE, так и другую DML-операцию для таблицы с триггерами AFTER на уровне оператора, переходные таблицы, перехватываемые триггерам, включали только строки, затронутые другими операциями, но не строки, затронутые MERGE.

  • Исправлена некорректная очистка меток строк, принадлежащих элементам списка отношений, которые не являются отношениями, таким как подзапросы (Дин Рашид) §

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

  • Исправлена ошибка при отсечении всех дочерних таблиц секционированной целевой таблицы, для которой выполняются операции обновления или удаления (Амит Ланготе) §

    Ранее в таких случаях исполнитель мог выводить ошибки could not find junk ctid column, хотя никаких действий не требовалось.

  • Исправлена ошибка вычисления выражения для подзапроса внутри индекса массива (Андрес Фройнд) §

  • Исправлен текстового поиска по подстрокам в при использовании недетерминированных правил сортировки (Лауренц Альбе) §

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

  • Предотвращена возможная ошибка планировщика при наличии в запросе дублирующихся вызовов оконных функций (Мэн Чжан, Дэвид Роули) §

    Путаница при исключении дубликатов таких вызовов могла приводить к ошибкам вида WindowFunc with winref 2 assigned to WindowAgg with winref 1.

  • Исправлена ошибка планировщика при обработке наборов группирования и функций, возвращающих множества (Ричард Гуо) §

    При построении узла плана ProjectSet планировщику не удавалось обнаружить, что подвыражения, включающие выражения группирования, уже были вычислены на предыдущем этапе планирования. Это приводило к неэффективным планам или ошибкам, таким как variable not found in subplan target list.

  • Предотвращена некорректная оптимизация, когда группирующее предложение подзапроса содержало изменчивую или возвращающую множество функцию (Ричард Гуо) §

    Ранее планировщик стремился вынести ограничения запросов, ссылающихся на такой группирующий столбец, в подзапросы, что приводило к некорректному поведению из-за многократного вычисления изменчивой функции или к ошибкам, вызванным введением функции, возвращающей множество в предложения WHERE/HAVING подзапроса.

  • Реализован пропуск переменных-местозаполнителей при поиске статистики по выражению (Ричард Гуо) §

    Это изменение позволяет планировщику находить соответствующую статистику о выражениях, извлечённых из подзапросов или используемых в GROUP BY, что позволило избежать возврата к оценке по умолчанию. (Возможно, любая найденная статистика должна была бы корректироваться с учётом повышенной вероятности значения NULL, но эквивалентное действие для обычных Vars также никогда не выполнялось.) Хотя игнорирование переменных-местозаполнителей при сборе статистики было типичным поведением, изменения в Tantor BE версии 18 сделали переменные-местозаполнители более распространёнными, чем раньше, поэтому было внесено изменение для предотвращения регрессий планов в описанных случаях.

  • Реализован пропуск переменных-местозаполнителей, не меняющих смысл выражений, при сопоставлении выражений с индексами (Ричард Гуо) §

    Поскольку в Tantor BE 18 переменные-местозаполнители используются чаще, чем в предыдущих, некоторые запросы, которые ранее могли использовать индекс, могли не работать. Добавлена логика предотвращает эти негативные последствия.

  • Исправлено преобразование планировщиком предложений OR в условия индексов ScalarArrayOp (Тендер Ван, Том Лейн) §

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

  • Гарантировано сканирование частичных хешированных индексов даже в случаях, когда предикат индекса подразумевал истинность условия WHERE (Том Лейн) §

    Обычно предложение WHERE, подразумеваемое предикатом, игнорировалось, поскольку его проверка бессмысленна — оно должно выполняться для каждой записи индекса. Однако, это могло препятствовать созданию плана сканирования, если индекс требовал наличия предложения WHERE по ведущему ключу индекса, как это делают хеш-индексы. Теперь подразумеваемые предложения не игнорируются при сканировании таких индексов.

  • Запрещена выдача записей WAL для незалогированных BRIN-индексов (Кирилл Решке) §

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

  • Исправлена упорядочивающая функции при параллельном построении индексов GIN (Томаш Вондра) §

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

  • Предотвращено опустошение буфера CLOG, который необходим для обработки непрочитанных сообщений NOTIFY (Джоэл Джейкобсон, Хейкки Линнакангас) § § §

    Это исправление позволяет избежать ошибок could not access status of transaction, когда серверный процесс с задержкой обрабатывал сообщения NOTIFY.

  • Ошибки, возникающие при обработке сообщений NOTIFY, повышены до уровня важности FATAL, то есть с требованием закрытия соединения (Хейкки Линнакангас) §

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

    Кроме того, если соединение простаивает в момент получения NOTIFY, любая ошибка уровня ERROR всё равно была бы повышена до уровня FATAL по причинам, не связанным с данной проблемой. Поэтому для согласованности и чёткого информирования приложения о том, что некоторые уведомления могли быть пропущены, было принято решение делать это во всех случаях.

  • Исправлен учёт выражений группирования при вычислении хеша идентификатора запроса (Цзянь Хи) §

    Ранее два запроса, которые отличались только выражениями в GROUP BY, объединялись модулем contrib/pg_stat_statements или другими расширениями, использующими идентификаторы запросов.

  • Исправлены ошибки при подсчёте изменений командой EXPLAIN ANALYZE MERGE в случае параллельных обновлений (Дин Рашид) §

    Ранее это приводило к некорректному подсчёту кортежей, пропущенных в выводе EXPLAIN, или к сбою проверочного утверждения в сборках с поддержкой проверочных утверждений.

  • Исправлена ошибка в отслеживании цепочки обновлений при блокировке версий кортежа (Джаспер Смит) §

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

  • Исправлена некорректная обработка инкрементальных резервных копий больших таблиц (Роберт Хаас, Олег Ткаченко) §

    Если таблица, размер которой превышал 1 ГБ (или ограничение размера сегмента), была усечена с помощью команды VACUUM между созданием базовой резервной копией и инкрементной резервной копией, то работа приложения pg_combinebackup могла завершиться ошибкой truncation block length in excess of segment size. Из-за этого восстановить таблицу из инкрементальной резервной копии было невозможно.

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

  • Устранено условие гонки при выполнении асинхронного ввода-вывода (Андрес Фройнд) §

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

  • Обеспечена защита от некорректного усечения журнала мультитранзакций после сбоя (Хейкки Линнакангас) §

  • Исправлена возможная ошибка с некорректной обработкой результата функции pg_stat_get_backend_activity() (Чао Ли) §

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

  • Добавлена защита от рекурсивного записи в журнал контекстов памяти (Фудзии Масао) §

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

  • Исправлено использование контекста памяти при повторной инициализации контекста параллельного выполнения (Якуб Вартак, Дживан Чок) §

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

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

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

  • Предотвращение многократной перезаписи CTE, изменяющих данные (Бернис Саути, Дин Рашид) §

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

  • Добавлена возможность повторной попытки инициализации записи реестра DSM (Натан Боссарт) §

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

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

  • Предотвращены ошибки operation not permitted при запросе статуса страниц NUMA с использованием старых версий библиотеки libnuma (Томаш Вондра) §

  • Запрещено восстановление после сбоя при отсутствии записей WAL от позиции наката изменений, указанных в записи контрольной точки (Нитин Ядав) §

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

  • Предотвращено изменение исходного дерева запроса во время ALTER PUBLICATION (Сунил С) §

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

  • Гарантирована передача параметров подключения, указанных в команде CREATE SUBSCRIPTION ... CONNECTION процессу walsender публикующего сервера (Фудзии Масао) §

    Ранее параметр подключения options (если был указан) игнорировался, что, например, препятствовало установке пользовательских значений параметров сервера в сеансе walsender. Предполагалось, что это должно работать, и это действительно работало до рефакторинга в версии Tantor BE 15, который нарушил эту возможность, поэтому было восстановлено прежнее поведение.

  • Предотвращено аннулирование только что созданных или только что синхронизированных слотов репликации (Чжицзе Хоу) § § §

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

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

    Это могло приводить к ошибке cannot build an initial slot snapshot as oldest safe xid follows snapshot's xmin.

  • Зафиксировано добавление записи pg_replication_origin во время начальной синхронизации подписки логической репликации до начала копирования данных (Чжицзе Хоу) §

    Ранее если копирование завершалось неудачно, новая запись pg_replication_origin терялась из-за отката транзакции. Это приводило к несогласованному состоянию в разделяемой памяти.

  • Реализована остановка логической репликации после сбоя применения параллельного рабочего процесса (Чжицзе Хоу) §

    Ранее подписчик мог потерять транзакции.

  • Исправлены рабочие процессы синхронизации слотов логической репликации для корректной обработки сигналов LOCK_TIMEOUT (Чжицзе Хоу) §

    Ранее сигналы об истечении времени ожидания фактически игнорировались.

  • Исправлена возможная ошибка unexpected data beyond EOF во время перезапуска сервера с потоковой репликацией (Антонин Боннефой) §

  • Исправлены сообщения об ошибках в случае несовпадения типов путей SQL/JSON (Цзянь Хи) §

    Ранее могла выводиться ошибка cache lookup failed for type 0 вместо необходимого сообщения о том, что выражение пути имеет неверный тип.

  • Исправлено ошибочное отслеживание положения столбца при разборе границ диапазонных секций (myzhen) §

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

  • Исправлены различные незначительные несоответствия в сообщениях об ошибках (Ман Цзэн, Тяньчэнь Чжан) § § § § §

    Например, в отчёте об ошибке несоответствия номера линии времени в манифесте резервной копии отображался номер начальный линии времени вместо конечный.

  • Исправлена ошибка встраивания функций при JIT-компиляции с использованием LLVM версии 17 или выше (Антонин Боннефой) §

  • Корректировка JIT-кода для работы с LLVM 21 (Холгер Хофштеттер) §

    Предыдущий код не компилировался на устройствах с архитектурой aarch64.

  • Исправлен код для архитектуры AArch64 для работы со старыми системными заголовочными файлами (поколения RHEL7) (Том Лейн) § §

  • Исправлена некорректная проверка configure для функции io_uring_queue_init_mem() (Масахико Савада) §

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

  • Добавлен новый параметр сервера file_extend_method для управления использованием функции posix_fallocate() (Томас Манро) §

    В Tantor BE версии 16 и выше для расширения файлов отношений используется функция posix_fallocate(), если она поддерживается. Однако оказалось, что она плохо взаимодействует с некоторыми файловыми системами: не работало сжатие BTRFS, а в старых версиях ядра Linux система XFS могла выводить ложные ошибки ENOSPC. Для обхода этой проблемы был введён новый параметр сервера. Установка file_extend_method в значение write_zeros приведёт к возврату сервера к старому методу расширения файлов путём добавления блоков нулей.

  • Исправлена ошибка разбора длинных параметров командной строки сервера в исполняемых файлах Solaris, собранных с помощью meson (Том Лейн) §

  • Добавлена поддержка изменений заголовков процессов в GNU/Hurd (Михаэль Банк) §

  • Исправлено дополнение табуляцией в psql для значений опций VACUUM (Юго Нагата) §

  • Запрещен вывод значения %P (статус конвейера) в приглашениях psql при отсутствии соединения с сервером (Чао Ли) §

    Теперь поведение %P аналогично другим спецпоследовательностям из приглашений, значения которых зависят от активности соединения.

  • Исправлена логика pg_dump для сбора значений последовательностей (Натан Боссарт) § §

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

  • Устранен риск некорректного экранирования значений oauth_validator_libraries в pg_dump (ЧанАо Чэнь) §

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

  • Предотвращена ошибка проверочного утверждения в pg_dump в режиме обновления в двоичном формате (Вигнеш Си) §

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

  • Исправлена некорректная обработка ошибок программой pgbench при использовании нескольких команд \syncpipeline в конвейерном режиме (Юго Нагата) §

    Ранее, если после ошибки запроса встречалось несколько команд \syncpipeline, программа pgbench выводила ошибку failed to exit pipeline mode или происходил сбой оценочного утверждения в сборке с поддержкой проверочных утверждений.

  • В утилиту pg_resetwal добавлен вывод нового значения при изменении OldestXID (Хейкки Линнакангас) §

    Все другие изменяемые переменные утилита уже выводила.

  • Для утилиты pg_resetwal добавлена возможность указать значение 0 для xid следующей мультитранзакции или значения UINT32_MAX для следующего смещения мультитранзакций (Максим Орлов) §

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

  • В модуле contrib/amcheck теперь используется корректный снимок при проверках btree-индексов в родительских страницах (Михаил Николаев) § §

    Ранее при проверке индексов, созданных с помощью команды CREATE INDEX CONCURRENTLY, возникали ложные ошибки.

  • Исправлено поведение модуля contrib/amcheck для корректной обработки half-dead страниц btree-индекса (Хейкки Линнакангас) §

    Модуль amcheck ожидал, что такие страницы будет иметь родительские нисходящие ссылки, но они отсутствовали, что приводило к ложному сообщению об ошибке о mismatch between parent key and child high key.

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

    Модуль amcheck мог выводить ложную ошибку о block is not true root.

  • Исправлено чрезмерное выделение памяти при работе модуля contrib/pg_buffercache (Дэвид Гейер) §

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

  • Исправлен редкий случай целочисленного переполнения при оценке избирательности для оператора @@ модулем contrib/intarray (Чао Ли) §

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

  • Исправлена проблема с многобайтным защитным преобразованием в модуле contrib/ltree (Джефф Дэвис) §

    Ранее в функцию lower() могла передаваться неполная многобайтная последовательность, что могло приводить к некорректному поведению.

  • Предотвращен сбой в в работе модуля contrib/pg_stat_statements, когда список IN содержал как константные, так и неконстантные выражения (Сами Имсейх) §

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

    Изменения коснулись только исторических данных для меток времени до 1976 года в Нижней Калифорнии.