E.18. Выпуск 15.1
Дата выпуска: 2022-11-10
В этот выпуск вошли различные исправления, внесённые после версии 15.0. За информацией о нововведениях версии 15 обратитесь к Разделу E.19.
E.18.1. Миграция на версию 15.1
Если используется версия 15.X, выгрузка/восстановление базы не требуется.
Однако если вы регулярно создаёте и удаляете таблицы больше 1 ГБ, обратите внимание на первый пункт в списке изменений.
E.18.2. Изменения
Устранение проблемы удаления сегментов больших таблиц, следующих за первым (Том Лейн) §
Вследствие нарушения логики удаления таблиц после этой операции все файлы, кроме первого, оставались на диске в случае удаления временных таблиц и в случае воспроизведения из WAL удаления обычных таблиц. В результате свободное место на диске могло быстро исчезать, если приложения регулярно создавали многогигабайтные временные таблицы.
Оставшиеся файлы временных таблиц удаляются при запуске процесса postmaster, поэтому для освобождения занимаемого ими места достаточно обновления до версии 15.1. Однако если во время использования версии 15.0 база данных отключалась аварийно и непосредственно перед таким отключением могли удаляться большие таблицы, рекомендуется проверить в каталогах базы данных файлы с именами вида
. Если файла с именемNNNN.NN(без суффиксаNNNN.) рядом нет, такие файлы следует удалить вручную.NNИсправление обработки элементов
DEFAULTв предложенииVALUESс несколькими кортежами при добавлении данных в изменяемое представление (Том Лейн) §Следствием исправленного теперь упущения могли быть ошибки «cache lookup failed for type» (ошибка поиска в кеше для типа) или даже аварийный сбой в старых версиях.
Недопущение имени
_RETURNдля всех правил, кроме правилON SELECT(Том Лейн) §Таким образом, задаваемое для представления правило
ON SELECTбудет отличаться от других задаваемых для него правил.Предотвращение сбоя в
EXPLAIN VERBOSEдля запроса, использующегоSEARCH BREADTH FIRSTс константами в качестве начальных значений (Том Лейн) §Запрещение использования команды
MERGEдля секционированной таблицы с секциями, являющимися сторонними таблицами (Альваро Эррера) §Этот сценарий не поддерживается, но раньше сообщение об этом было непонятным.
Корректировка формирования ограничений внешнего ключа для секций при выполнении
ALTER TABLE ATTACH PARTITION(Жеан-Гийом де Рорте, Альваро Эррера) § §Ранее для добавляемой секции могли формироваться некорректные или повторяющиеся ограничения.
Устранение дефекта в планировщике при обращении к расширенной статистике по секционированным таблицам или таблицам с наследованием (Ричард Гуо, Джастин Призби) §
Ранее в некоторых случаях выдавалась ошибка «cache lookup failed for statistics object» (ошибка поиска в кеше для объекта статистики).
Исправление неверного порядка операций WAL при добавлении данных в индексы GIN по быстрому пути (Маттиас ван де Меент, Мингли Чжан) §
О негативном влиянии этого дефекта на работу ядра PostgreSQL неизвестно, но с некоторыми расширениями возникали проблемы.
Исправление ошибок в логическом декодировании при запуске воспроизведения с позиции между началом транзакции и началом подтранзакции (Масахико Савада, Хайато Курода) § §
Устранённые теперь ошибки могли приводить к сбоям проверочных утверждений в отладочных сборках или же к утечкам памяти.
Добавление точек, в которых возможно прерывание при логическом декодировании (Амит Капила, Масахико Савада) § §
Тем самым устраняются проблемы медленного отключения рабочих процессов репликации.
Предотвращение в рабочих процессах репликации попыток реплицировать данные секций в сторонние таблицы (Ши Юй, Том Лейн) §
Хотя сторонние таблицы могут быть секциями секционированных таблиц, реплицировать данные в такие секции в настоящее время нельзя. Ранее при попытке сделать это рабочий процесс логической репликации аварийно прерывался, а теперь он выдаёт ошибку.
Устранение сбоя рабочего процесса репликации в случае синтаксической ошибки в функции (Максим Орлов, Антон Мельников, Масахико Савада, Том Лейн) §
Если в команде
CREATE FUNCTIONилиDOна языке SQL или PL/pgSQL была допущена синтаксическая ошибка, при выполнении этой команды рабочим процессом репликации он завершался аварийно из-за обращения по нулевому указателю или сбоя проверочного утверждения.Предотвращение двойного вызова обработчика завершения в модуле архивирования (Натан Боссарт, Бхарат Рупиредди) §
Добавление в планировщик проверки, предотвращающей обращения к таблице, для которой нет табличного метода доступа (Том Лейн) §
Это предотвращает сбой в некоторых случаях повреждения каталогов, например при использовании представления без правила
ON SELECT.Предотвращение краха процесса postmaster при повреждении общей памяти (Том Лейн) §
Предполагается, что повреждение общей памяти не должно быть критическим для процесса postmaster, он должен штатно перезапустить базу данных, но в одном месте кода были предприняты не все меры для этого.
Исправление сброса однострочного режима в libpq при конвейеризации (Денис Лаксельд) §
Флаг однострочной обработки не сбрасывался в нужный момент, если был активен конвейерный режим.
Исправление кода выхода psql при отмене запроса, заданного в командной строке (Питер Эйзентраут) §
Ранее команда
psql -cсигнализировала об успешном завершении в случае отмены запроса. Теперь она будет возвращать ненулевой код, как и в случае других ошибок.запросОбеспечение возможности кроссплатформенного перемещения табличных пространств в pg_basebackup (Том Лейн) §
Теперь удалённый путь в
--tablespace-mappingможет задаваться как абсолютный путь и в стиле Unix, и в стиле Windows, поскольку ОС исходного сервера и локальной системы могут различаться.Устранение в pg_dump дефекта, из-за которого не выгружались комментарии, связанные с некоторыми ограничениями
CHECK(Том Лейн) §Исправление команды
CREATE DATABASE, позволяющее задатьoidбольше 231 (Том Лейн) §Вследствие устранённого теперь упущения утилита pg_upgrade не могла выполнить обновление, если в исходной инсталляции содержались базы с OID больше указанного значения.
Устранение обращения к освобождённой памяти в pg_stat_statements (Цигуй Чжао) §
Проблема возникала, когда в pg_stat_statements отслеживалась команда
ROLLBACK, переданная по протоколу расширенных запросов. В отладочных сборках при этом гарантированно происходили сбои проверочных утверждений, а в обычных чаще всего никаких заметных негативных последствий не было, но если освобождённая память использовалась снова, это было чревато сохранением мусора в строке запроса.Устранение несовместимостей с LLVM 15 (Томас Манро, Андрес Фройнд) §
Добавление возможности использовать
__sync_lock_test_and_set()для циклических блокировок на любой машине (Том Лейн) §Это упрощает перенос на новую машинную архитектуру, по крайней мере, если вы используете компилятор, поддерживающий эту встроенную в GCC функцию.
Переименование символа
REFвREF_Pво избежание проблем при компиляции в последних версиях macOS (Том Лейн) §Исключение использования функции
sprintf, чтобы во время компиляции не выдавались предупреждения о том, что она устарела (Том Лейн) §Обновление данных часовых поясов до версии tzdata 2022f, включающее изменение правил перехода на летнее время в Чили, Иране, Иордании, Мексике, Палестине, Сирии и на Фиджи, а также корректировку исторических данных для Чили, Крыма, Ирана и Мексики. §
Кроме того, пояс Europe/Kiev был переименован в Europe/Kyiv. Помимо этого, следующие пояса были включены в соседние, более популярные пояса, в которых время было таким же с 1970 г.: Antarctica/Vostok, Asia/Brunei, Asia/Kuala_Lumpur, Atlantic/Reykjavik, Europe/Amsterdam, Europe/Copenhagen, Europe/Luxembourg, Europe/Monaco, Europe/Oslo, Europe/Stockholm, Indian/Christmas, Indian/Cocos, Indian/Kerguelen, Indian/Mahe, Indian/Reunion, Pacific/Chuuk, Pacific/Funafuti, Pacific/Majuro, Pacific/Pohnpei, Pacific/Wake и Pacific/Wallis. (Это косвенно влияет на пояса, ранее включённые в другие: Arctic/Longyearbyen, Atlantic/Jan_Mayen, Iceland, Pacific/Ponape, Pacific/Truk и Pacific/Yap.) Пояса America/Nipigon, America/Rainy_River, America/Thunder_Bay, Europe/Uzhgorod и Europe/Zaporozhye также были включены в соседние, поскольку выяснилось, что заявления об отличиях этих поясов от соседних (после 1970 года) оказались ошибочными. Для всех этих поясов старое название сохранено в качестве альтернативного; фактически используются данные пояса, в который они были включены.
В результате такого включения для включённых поясов теряется история до 1970 г., что может вызвать проблемы в приложениях, рассчитывающих на согласованный вывод
timestamptz. Например, хранимое значение1944-06-01 12:00 UTCранее для часового пояса Europe/Stockholm выводилось как1944-06-01 13:00:00+01, а теперь будет выводиться как1944-06-01 14:00:00+02.В принципе возможно собрать файлы часовых поясов так, чтобы были восстановлены данные старых поясов, но при этом будут добавлены и другие старые (и, как правило, плохо проверенные) данные поясов, что принесёт по сравнению с предыдущей версией больше изменений, чем просто принятие изменений из проекта tzdata. В PostgreSQL было решено включить в поставку рекомендованные данные tzdb, и насколько нам известно, производители большинства операционных системы поступают так же. Тем не менее, если эти изменения приводят к существенным проблемам в вашем приложении, возможным решением будет установка локальной сборки файлов с данными часовых поясов tzdb, полученной с указанием параметров для обратной совместимости (см. параметры
PACKRATDATAиPACKRATLIST).
E.18. Release 15.1
Release date: 2022-11-10
This release contains a variety of fixes from 15.0. For information about new features in major release 15, see Section E.19.
E.18.1. Migration to Version 15.1
A dump/restore is not required for those running 15.X.
However, if you regularly create and drop tables exceeding 1GB, see the first changelog entry below.
E.18.2. Changes
Fix failure to remove non-first segments of large tables (Tom Lane) §
PostgreSQL splits large tables into multiple files (normally with 1GB per file). The logic for dropping a table was broken and would miss removing all but the first such file, in two cases: drops of temporary tables and WAL replay of drops of regular tables. Applications that routinely create multi-gigabyte temporary tables could suffer significant disk space leakage.
Orphaned temporary-table files are removed during postmaster start, so the mere act of updating to 15.1 is sufficient to clear any leaked temporary-table storage. However, if you suffered any database crashes while using 15.0, and there might have been large tables dropped just before such crashes, it's advisable to check the database directories for files named according to the pattern
. If there is no matching file named justNNNN.NN(without theNNNN.suffix), these files should be removed manually.NNFix handling of
DEFAULTtokens that appear in a multi-rowVALUESclause of anINSERTon an updatable view (Tom Lane) §This oversight could lead to “cache lookup failed for type” errors, or in older branches even to crashes.
Disallow rules named
_RETURNthat are notON SELECT(Tom Lane) §This avoids confusion between a view's
ON SELECTrule and any other rules it may have.Avoid failure in
EXPLAIN VERBOSEfor a query usingSEARCH BREADTH FIRSTwith constant initial values (Tom Lane) §Prevent use of
MERGEon a partitioned table with foreign-table partitions (Álvaro Herrera) §The case isn't supported, and previously threw an incomprehensible error.
Fix construction of per-partition foreign key constraints while doing
ALTER TABLE ATTACH PARTITION(Jehan-Guillaume de Rorthais, Álvaro Herrera) § §Previously, incorrect or duplicate constraints could be constructed for the newly-added partition.
Fix planner failure with extended statistics on partitioned or inherited tables (Richard Guo, Justin Pryzby) §
Some cases failed with “cache lookup failed for statistics object”.
Fix mis-ordering of WAL operations in fast insert path for GIN indexes (Matthias van de Meent, Zhang Mingli) §
This mistake is not known to have any negative consequences within core PostgreSQL, but it did cause issues for some extensions.
Fix bugs in logical decoding when replay starts from a point between the beginning of a transaction and the beginning of its subtransaction (Masahiko Sawada, Kuroda Hayato) § §
These errors could lead to assertion failures in debug builds, and otherwise to memory leaks.
Accept interrupts in more places during logical decoding (Amit Kapila, Masahiko Sawada) § §
This ameliorates problems with slow shutdown of replication workers.
Prevent attempts to replicate into a foreign-table partition in replication workers (Shi Yu, Tom Lane) §
Although partitioned tables can have foreign tables as partitions, replicating into such a partition isn't currently supported. The logical replication worker process would crash if it was attempted. Now, an error is thrown.
Avoid crash after function syntax error in replication workers (Maxim Orlov, Anton Melnikov, Masahiko Sawada, Tom Lane) §
If a syntax error occurred in a SQL-language or PL/pgSQL-language
CREATE FUNCTIONorDOcommand executed in a logical replication worker, the worker process would crash with a null pointer dereference or assertion failure.Avoid double call of the shutdown callback of an archiver module (Nathan Bossart, Bharath Rupireddy) §
Add plan-time check for attempted access to a table that has no table access method (Tom Lane) §
This prevents a crash in some catalog-corruption scenarios, for example use of a view whose
ON SELECTrule is missing.Prevent postmaster crash when shared-memory state is corrupted (Tom Lane) §
The postmaster process is supposed to survive and initiate a database restart if shared memory becomes corrupted, but one bit of code was being insufficiently cautious about that.
In libpq, handle single-row mode correctly when pipelining (Denis Laxalde) §
The single-row flag was not reset at the correct time if pipeline mode was also active.
Fix psql's exit status when a command-line query is canceled (Peter Eisentraut) §
psql -cwould exit successfully if the query was canceled. Fix it to exit with nonzero status, as in other error cases.queryAllow cross-platform tablespace relocation in pg_basebackup (Robert Haas) §
Allow the remote path in
--tablespace-mappingto be either a Unix-style or Windows-style absolute path, since the source server could be on a different OS than the local system.Fix pg_dump's failure to dump comments attached to some
CHECKconstraints (Tom Lane) §Fix
CREATE DATABASEto allow itsoidparameter to exceed 231 (Tom Lane) §This oversight prevented pg_upgrade from succeeding when the source installation contained databases with OIDs larger than that.
In pg_stat_statements, fix access to already-freed memory (zhaoqigui) §
This occurred if pg_stat_statements tracked a
ROLLBACKcommand issued via extended query protocol. In debug builds it consistently led to an assertion failure. In production builds there would often be no visible ill effect; but if the freed memory had already been reused, the likely result would be to store garbage for the query string.Fix incompatibilities with LLVM 15 (Thomas Munro, Andres Freund) §
Allow use of
__sync_lock_test_and_set()for spinlocks on any machine (Tom Lane) §This eases porting to new machine architectures, at least if you're using a compiler that supports this GCC builtin function.
Rename symbol
REFtoREF_Pto avoid compile failure on recent macOS (Tom Lane) §Avoid using
sprintf, to avoid compile-time deprecation warnings (Tom Lane) §Update time zone data files to tzdata release 2022f for DST law changes in Chile, Fiji, Iran, Jordan, Mexico, Palestine, and Syria, plus historical corrections for Chile, Crimea, Iran, and Mexico. (Tom Lane) §
Also, the Europe/Kiev zone has been renamed to Europe/Kyiv. Also, the following zones have been merged into nearby, more-populous zones whose clocks have agreed with them since 1970: Antarctica/Vostok, Asia/Brunei, Asia/Kuala_Lumpur, Atlantic/Reykjavik, Europe/Amsterdam, Europe/Copenhagen, Europe/Luxembourg, Europe/Monaco, Europe/Oslo, Europe/Stockholm, Indian/Christmas, Indian/Cocos, Indian/Kerguelen, Indian/Mahe, Indian/Reunion, Pacific/Chuuk, Pacific/Funafuti, Pacific/Majuro, Pacific/Pohnpei, Pacific/Wake and Pacific/Wallis. (This indirectly affects zones that were already links to one of these: Arctic/Longyearbyen, Atlantic/Jan_Mayen, Iceland, Pacific/Ponape, Pacific/Truk, and Pacific/Yap.) America/Nipigon, America/Rainy_River, America/Thunder_Bay, Europe/Uzhgorod, and Europe/Zaporozhye were also merged into nearby zones after discovering that their claimed post-1970 differences from those zones seem to have been errors. In all these cases, the previous zone name remains as an alias; but the actual data is that of the zone that was merged into.
These zone mergers result in loss of pre-1970 timezone history for the merged zones, which may be troublesome for applications expecting consistency of
timestamptzdisplay. As an example, the stored value1944-06-01 12:00 UTCwould previously display as1944-06-01 13:00:00+01if the Europe/Stockholm zone is selected, but now it will read out as1944-06-01 14:00:00+02.It is possible to build the time zone data files with options that will restore the older zone data, but that choice also inserts a lot of other old (and typically poorly-attested) zone data, resulting in more total changes from the previous release than accepting these upstream changes does. PostgreSQL has chosen to ship the tzdb data as-recommended, and so far as we are aware most major operating system distributions are doing likewise. However, if these changes cause significant problems for your application, a possible solution is to install a local build of the time zone data files using tzdb's backwards-compatibility options (see their
PACKRATDATAandPACKRATLISToptions).