E.48. Выпуск 12.3
Дата выпуска: 2020-05-14
В этот выпуск вошли различные исправления, внесённые после версии 12.2. За информацией о нововведениях версии 12 обратитесь к Разделу E.51.
E.48.1. Миграция на версию 12.3
Если используется версия 12.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 12.2, см. также Раздел E.49.
E.48.2. Изменения
Устранение возможности сбоя при использовании генерируемых столбцов (Дэвид Роули)
В ситуации, когда значение генерируемого столбца (
GENERATED
) является точной копией другого столбца таблицы (и имеет тип, передаваемый по ссылке), существовала возможность вызвать сбой сервера или вставить в таблицу испорченные данные. Хотя просто дублировать в выраженииGENERATED
другой столбец не имеет большого смысла, такая ситуация могла возникать с функцией, возвращающей входные данные без изменений.Улучшение обработки наследования генерируемых столбцов (Питер Эйзентраут)
Когда столбец таблицы наследуется в результате выполнения
CREATE TABLE ... INHERITS
, никакие изменения свойств генерирования родительского столбца не должны допускаться; при этом дочерний столбец может стать генерируемым (получить свойствоGENERATED
), если его родитель генерируемым не является.Исправление обращения к столбцам при выполнении
CREATE TABLE LIKE INCLUDING GENERATED
(Питер Эйзентраут)Команда
CREATE TABLE ... LIKE
не могла скопировать выражениеGENERATED
, ссылающееся на столбец, физически следующий за генерируемым.Распространение действия
ALTER TABLE ... SET STORAGE
на индексы (Питер Эйзентраут)Для столбцов в индексах (кроме индексов по выражениям) при создании индекса всегда копировалось свойство
attstorage
из столбца в таблице. Теперь это свойство для согласованности будет меняться для них при выполнении командыALTER TABLE ... SET STORAGE
.Сохранение свойства
indisclustered
у индексов, перезаписываемых командойALTER TABLE
(Амит Ланготе, Джастин Призби)Ранее команда
ALTER TABLE
теряла информацию о том, для какого индекса выполнялась командаCLUSTER
.Сохранение свойства идентификации реплики у индексов, перезаписываемых командой
ALTER TABLE
(Цюань Цзунлян, Питер Эйзентраут)Сохранение свойства
indisclustered
у индексов, перестраиваемых командойREINDEX CONCURRENTLY
(Джастин Призби)Блокирование объектов на более ранней стадии выполнения
DROP OWNED BY
(Альваро Эррера)Это позволяет исключить ошибки в условиях гонки, когда какие-либо из удаляемых объектов параллельно удаляются в другом сеансе.
Исправление обработки ошибок при выполнении
CREATE ROLE ... IN ROLE
(Эндрю Гирт)В некоторых случаях при ошибке вместо надлежащего сообщения выдавалось «unexpected node type» (неожиданный тип узла) или что-то подобное.
Удаление из таблицы, отсоединяемой от секционированной родительской таблицы, всех триггеров, ранее скопированных в неё из последней (Джастин Призби)
Устранение сбоя при попытке применить
COLLATE
к типу, не поддерживающему правила сортировки, в выражении границы секции (Дмитрий Долгов)Проверка совпадения семантики уникальных индексов в секционированных таблицах с семантикой равенства для ключа секционирования (Гуаньчэн Ло)
Проблема была возможна только при необычном определении равенства в классах операторов, используемых индексами, но в принципе несоответствия не должны допускаться, и это следует проверить.
Предоставление всем членам роли
pg_read_all_stats
доступа ко всем статистическим представлениям, согласно ожиданиям (Магнус Хагандер)Нижележащие функции представлений
pg_stat_progress_*
ранее не считали эту роль имеющей соответствующие полномочия.Устранение падения производительности при обращении к представлению
information_schema
.triggers
(Том Лейн)В результате исправления представление было переопределено так, чтобы внешнее предложение
WHERE
, ограничивающее имя таблицы, могло передаваться ниже, благодаря чему все вычисления теперь могут производиться только для триггеров, относящихся к избранных таблицам, а не для вообще всех триггеров в базе. В базе, где создано множество триггеров, это изменение позволяет значительно ускорить запросы к этому представлению. До 11 версии этого падения производительности не наблюдалось, поэтому можно считать это нововведённым дефектом. Если для кого-то это является серьёзной проблемой, её можно устранить, заменив определение представления (или, возможно, просто удалив и пересоздав всю схемуinformation_schema
).Устранение падения производительности при выявлении переполнения и антипереполнения в числах с плавающей точкой (Эмре Хасегели)
В результате предыдущей реорганизации кода проверка
isinf()
стала вызываться лишний раз в некоторых часто выполняемых местах кода.Исправление в полнотекстовом поиске обработки отрицания для результата поиска фразы (Том Лейн)
Запросы вида
!(foo<->bar)
не могли найти нужные строки, когда применялся поиск по индексу GiST или GIN.Исправление полнотекстового поиска в ситуациях, когда в поисковой фразе оказывается элемент, задающий и искомый префикс, и вес (Том Лейн)
Улучшение выбора выдержек из документа в функции
ts_headline()
при обработке фразовых запросов (Том Лейн)Устранение ошибок в обработке
gin_fuzzy_search_limit
(Аде Хэйуорд, Том Лейн)При небольшом значении
gin_fuzzy_search_limit
выполнение запросов могло неожиданно замедляться из-за непреднамеренного многократного сканирования одной и той же страницы индекса. В другом месте кода желаемая фильтрация не применялась вовсе, в результате чего могло возвращаться слишком много значений.Добавление в набор форматов, допустимых для типа
circle
, формата «(
», который должен приниматься согласно документации (Дэвид Чжан)x
,y
),r
Доработка функций
get_bit()
иset_bit()
для поддержки строкbytea
длиннее 256 МБ (Мувад Ли)Так как аргумент, задающий номер бита, имеет тип
int4
, с помощью этих функций нельзя обращаться к битам за пределами первых 256 мегабайт значенияbytea
. В 13 версии тип аргумента будет расширен доint8
, а тем временем в текущей версии обеспечена поддержка этими функциями больших значенийbytea
в обозначенном пределе.Игнорирование ошибок «файл не найден» в
pg_ls_waldir()
и родственных функциях (Том Лейн)Это устраняет сбой в условиях гонки, когда файл удаляется между моментом, когда мы получили запись о нём в каталоге, и моментом, когда мы пытаемся получить дополнительную информацию о нём, вызывая
stat()
.Устранение возможной утечки открытого дескриптора каталога в
pg_ls_dir()
,pg_timezone_names()
,pg_tablespace_databases()
и родственных функциях (Джастин Призби)Исправление разрешения типов в полиморфных функциях, чтобы фактический тип результата
anyarray
выводился из входного типа, если на вход поступает толькоanyrange
(Том Лейн)Исправление серверной логики установления соединения в случае, когда подключение GSSAPI отвергается из-за отсутствия поддержки со стороны сервера, а клиент затем пытается использовать SSL (Эндрю Гирт)
Ранее в такой ситуации выдавалось некорректное сообщение «unsupported frontend protocol» (неподдерживаемый протокол клиентского приложения).
Устранение утечки памяти в коде шифрования GSSAPI (Том Лейн)
И сервер, и клиент, использующий libpq, могли допускать утечку в объёме, равном объёму всех данных, передаваемых во время сеанса с шифрованием GSSAPI.
Устранение утечки памяти на время выполнения запроса в возвращающей множество функции, вызываемой в предложении
FROM
(Андрес Фройнд)Ликвидация потери хеш-таблиц в подплане с хешированием при многократном выполнении подплана (Андреас Карлссон, Том Лейн)
При достаточно большом количестве повторений такого подплана объём потерянной памяти мог оказаться весьма заметным.
Улучшение в планировщике обработки фиктивных приведений доменов (Том Лейн)
Исправлена ситуация, когда приведение доменов фактически не производилось, но при этом сохранялось в выражениях.
Устранение возможности сбоя при прерывании команды
REINDEX
сигналом завершения сеанса (Том Лейн)Предотвращение отображения мусорных данных при выводе статистики таблицы соединения по хешу в
EXPLAIN
(Константин Книжник, Том Лейн, Томас Манро)Исправление расчёта длительности этапов в процедуре усечения кучи при выполнении
VACUUM VERBOSE
(Тацухито Касахара)Устранение потенциальной недооценки числа удалённых страниц индексов-B-деревьев в выводе
VACUUM VERBOSE
(Питер Гейган)Исправление обработки старейшей удалённой страницы в индексе-B-дереве (Питер Гейган)
В результате ошибки могли приниматься неправильные решения о пропуске очистки индекса при выполнении
VACUUM
, хотя по всей видимости для пользователей этот дефект никак не проявлялся.Обеспечение передачи состояний ожидания TimelineHistoryRead и TimelineHistoryWrite во всех местах в коде, где читаются и записываются файлы истории линий времени (Масахиро Икеда)
Предотвращение повторного добавления «waiting» (ожидание) в заголовок процесса, выводимый PS (Масахико Савада)
Устранение условий гонки, возникавших, когда
ANALYZE
заменяет в каталоге кортеж с данными расширенной статистики (Дин Рашид)Удаление непродуманного пропуска «избыточной» операции очистки в целях предотвращения зацикливания (Микаэль Пакье)
Тем самым устраняется некорректное поведение в особом случае, когда процедура автоочистки могла зацикливаться на одном задании, пытаясь запустить, а затем пропустить его.
Безусловное удаление из внутренних кортежей B-дерева дополнительно включённых в индекс столбцов (Питер Гейган)
Из-за допущенной ошибки в редких случаях индекс мог занимать лишнее место, но в остальном она была безвредна.
Исправление ситуации с нерабочими индексами TOAST, которые могли оставаться после неудачного выполнения
REINDEX CONCURRENTLY
(Жюльен Руо)Обеспечение корректных зависимостей индексов в случае прерывания
REINDEX CONCURRENTLY
(Микаэль Пакье)Ранее в таких случаях старый индекс мог остаться вовсе без связей в
pg_depend
, и поэтому, например, он мог не удалиться при удалении его таблицы.Предотвращение сбоя при попытке обратиться в процедуре автоочистки к только что удалённой временной схеме (Том Лейн)
Сбой был возможен только в случае удаления временной схемы суперпользователем, что практикуется нечасто, но всё же должно обрабатываться корректно.
Предотвращение преждевременного перерабатывания сегментов WAL во время восстановления после сбоя (Жеан-Гийом де Рорте)
Сегменты WAL, которые становились готовыми к архивации в ходе процедуры восстановления, могли перерабатываться, не попадая в архив.
Отказ от сканирования неактуальных линий времени в ходе восстановления архива (Кётаро Хоригути)
Теперь не будут производиться многократные попытки считать несуществующие файлы WAL из архивного хранилища, что важно при низкоскоростном подключении к архиву.
Удаление ненужной проверки, сигнализирующей об ошибке «subtransaction logged without previous top-level txn record» (записи подтранзакции в журнале не предшествует запись транзакции верхнего уровня) (Арсений Шер, Амит Капила)
Ситуация, которая ранее считалась недопустимой, могла сложиться на вполне законных основаниях, поэтому данную проверку следует удалить.
Устранение сбоя при копировании слота репликации, возможного вследствие преждевременного удаления данных WAL (Масахико Савада, Арсений Шер)
Обеспечение снятия блокировки
io_in_progress_lock
для слота репликации при обработке нештатных ситуаций (Паван Деоласи)Ранее блокировка снималась не всегда, вследствие чего процесс walsender мог зависнуть в ожидании.
Обеспечение корректной обработки значений генерируемых столбцов при изменениях, происходящих при логической репликации (Питер Эйзентраут)
Устранение условий гонки при управлении синхронными ведомыми серверами (Том Лейн)
В процессе применения изменений параметра
synchronous_standby_names
существовало окно, в котором могли быть приняты неверные решения об освобождении транзакций, ожидающих синхронной фиксации. Подобные неверные решения могли приниматься и тогда, когда после завершения процесса walsender он сразу же заменялся другим.Добавление значений SQLSTATE в формируемые отчёты об ошибках в нескольких местах (Масахико Савада)
Реализация в PL/pgSQL надёжного метода пресечения попытки выполнить функцию событийного триггера как обычную функцию (Том Лейн)
Устранение утечки памяти в libpq при использовании режима
sslmode=verify-full
(Роман Пешкуров)При проверке сертификата на стадии установления соединения была возможна утечка памяти. Это могло стать серьёзной проблемой, если клиентский процесс в своём жизненном цикле устанавливал много подключений к базе данных.
Обработка в ecpg аргумента «
-
» как означающего «читать с stdin» на всех платформах (Том Лейн)Устранение краха в psql при попытке восстановить прерванное подключение (Микаэль Пакье)
Добавление дополнения табуляцией имени файла для команды psql
\gx
(Вик Фиринг)Добавление в pg_dump поддержки конструкции
ALTER ... DEPENDS ON EXTENSION
(Альваро Эррера)Ранее программа pg_dump игнорировала зависимости, добавленные таким образом, вследствие чего они терялись после выгрузки/восстановления или выполнения pg_upgrade.
Исправление в pg_dump выгрузки комментариев к объектам политики RLS (Том Лейн)
Перенос в выгрузке pg_dump восстановления событийных триггеров на финальный этап (Фабрицио де Ройес Мелло, Хамид Ахтар, Том Лейн)
Это снижает риск нежелательного влияния событийных триггеров на восстановление других объектов.
Исправление в pg_basebackup ошибки в логике формирования файлов tar (Роберт Хаас)
В некоторых случаях в конец файла добавлялся неполный блок, состоящий из нулей. Хотя для многих распространённых версий tar это не проблема, это не соответствует спецификации формата файла в POSIX.
Исключение подкаталогов табличных пространств, относящихся к другим версиям PostgreSQL, из проверки pg_checksums (Михаэль Банк, Бернд Хелмле)
Такие подкаталоги на самом деле не имеют отношения к текущему кластеру баз данных, поэтому их проверять не следует.
Исключение временных копий
pg_internal.init
из проверки утилиты pg_checksums и связанных программ (Микаэль Пакье)Исправление обработки кавычек в значениях параметров
--encoding
,--lc-ctype
и--lc-collate
утилиты createdb (Микаэль Пакье)Устранение краха при попытке вызвать функцию
lo_manage()
изcontrib/lo
как обычную функцию, а не в качестве триггера (Том Лейн)Защита от переполнения полей длины в типах
ltree
иlquery
модуляcontrib/ltree
(Никита Глухов)Реализация обходного решения проблемы в функции
bt_metap()
модуляcontrib/pageinspect
, возникавшей со значением oldest_xact, превышающим 2^31-1 (Питер Гейган)Некоторые идентификаторы транзакций теперь будут отображаться как отрицательные числа, что не вполне корректно, но лучше, чем ошибка. В 13 версии соответствующий выходной аргумент будет расширен до
int8
, и тогда проблема будет решена полностью.Устранение утечки ссылки на кеш в
contrib/sepgsql
(Майкл Ло)Недопущение преждевременного создания файла журнала postmaster при выполнении
pg_ctl start
в Windows (Александр Лахин)После ранее внесённых исправлений этот файл мог быть создан с такими правами доступа, которые не позволяли писать в него процессу postmaster.
Исправление обработки имён локалей в стиле Unix на платформе Windows (Хуан Хосе Сантамария Флеча)
Включение в Windows режима совместимости с консолью VT100 в программах, поддерживающих цвета
PG_COLOR
(Хуан Хосе Сантамария Флеча)Без этого функциональность цветного вывода фактически не работала.
Отказ от использования дополнительных скобок в вызовах
ereport()
(Андрес Фройнд, Том Лейн)Использование pkg-config для определения расположения libxml2 в процедуре configure (Хью Макмастер, Том Лейн, Питер Эйзентраут)
Если утилита pkg-config отсутствует или не имеет информации о libxml2, мы будем использовать xml2-config, как и прежде.
Это изменение может нарушить процедуры сборки PostgreSQL, в которых для использования нестандартной версии libxml2 путь к нужной версии xml2-config добавляется в
PATH
. Теперь вместо этого нужно указать путь к нужному xml2-config в переменной окруженияXML2_CONFIG
. Этот метод будет работать и с новыми, и со старыми версиями PostgreSQL.Исправление зависимостей в файлах Makefile для libpq и ecpg (Дагфинн Ильмари Маннсакер)
Исправление в сборках MSVC манипуляции с путём к Python с учётом того, что он может содержать пробелы (Виктор Вагнер)
Исправление в сборках MSVC определения версии Visual Studio во избежание зависимости от языковых настроек (Эндрю Дунстан)
Использование в сборках MSVC ключа
-Wno-deprecated
с bison версии новее 3.0, как уже делается в сборках для отличных от Windows ОС (Эндрю Дунстан)Обновление данных часовых поясов до версии tzdata 2020a, включающее изменение правил перехода на летнее время в Марокко и канадском Юконе, а также корректировку исторических данных для Шанхая.
Часовой пояс America/Godthab был переименован в America/Nuuk в соответствии с принятым сейчас названием; старое обозначение сохранено для совместимости в виде ссылки.
Также был актуализирован список известных initdb часовых поясов в Windows, так что теперь параметры системного часового пояса на этой платформе будут восприняты корректно с большей вероятностью.