E.20. Выпуск 12.3
Дата выпуска: 2020-05-14
В этот выпуск вошли различные исправления, внесённые после версии 12.2. За информацией о нововведениях версии 12 обратитесь к Разделу E.23.
E.20.1. Миграция на версию 12.3
Если используется версия 12.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 12.2, см. также Раздел E.21.
E.20.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, так что теперь параметры системного часового пояса на этой платформе будут восприняты корректно с большей вероятностью.