E.43. Выпуск 10.7
Дата выпуска: 2019-02-14
В этот выпуск вошли различные исправления, внесённые после версии 10.6. За информацией о нововведениях версии 10 обратитесь к Разделу E.50.
E.43.1. Миграция на версию 10.7
Если используется версия 10.X, выгрузка/восстановление базы не требуется.
Если вы обновляете сервер с более ранней версии, чем 10.6, см. также Раздел E.44.
E.43.2. Изменения
Во избежание повреждения данных вместо повторения вызова
fsync()
при ошибке теперь выполняется аварийный останов (Крейг Рингер, Томас Манро)В ряде популярных операционных систем ядро сбрасывает буферы данных, не имея возможности сохранить их на диске, и выдаёт ошибку в
fsync()
. При этом повторный вызовfsync()
будет успешным, но на самом деле данные уже потеряны, так что продолжение работы сервера чревато повреждением базы. В случае же аварийного останова мы можем воспроизвести данные из WAL, где в такой ситуации может остаться единственная копия данных. Хотя это, определённо, неэффективное и не очень красивое поведение, других вариантов нет, а подобные ситуации, к счастью, крайне редки.Для управления этим поведением был добавлен новый параметр сервера data_sync_retry; если вы уверены, что ядро вашей ОС не теряет незаписанные буферы данных при описанном сценарии, вы можете задать для
data_sync_retry
значениеon
и восстановить прежнее поведение.Отныне в документацию каждой версии включаются только замечания к выпускам, относящимся к данной основной версии, а не к выпускам данной и всех предшествующих версий, как было раньше (Том Лейн)
Дублирование информации, присущее прежней схеме, вышло за допустимые рамки. Теперь мы не дублируем замечания к выпускам в каждой версии, но планируем поддерживать их полный архив на сайте нашего проекта.
Обеспечение контроля ограничений
NOT NULL
в секциях секционированной таблицы (Альваро Эррера, Амит Ланготе)Использование безопасного уровня блокировки таблицы при отсоединении секции (Альваро Эррера)
Ранее блокировка была недостаточно сильной и позволяла параллельно производить с таблицей DDL-операции, что могло привести к нежелательным результатам.
Устранение проблем с применением
ON COMMIT DROP
иON COMMIT DELETE ROWS
к секционированным таблицам и таблицам с потомками в иерархии наследования (Микаэль Пакье)Недопущение выполнения
COPY FREEZE
с секционированными таблицами (Дэвид Роули)Принципиально данный режим должен поддерживаться, но реализация может потребовать слишком сложных изменений, переносить которые в ранние версии рискованно.
Предупреждение возможных взаимоблокировок при попытке блокирования множества страниц в буфере (Нишант Фну)
Предупреждение взаимоблокировки процесса очистки GIN с параллельными операциями добавления в индекс (Александр Коротков, Андрей Бородин, Питер Гейган)
Вследствие этого изменения пришлось частично отказаться от оптимизации, добавленной в версии 10.0 с целью сократить число индексных страниц, блокируемых при удалении страницы списка идентификаторов GIN. Было обнаружено, что она приводит к взаимоблокировкам, так что мы отключили её на время разбирательства.
Недопущение взаимоблокировки запросов на сервере горячего резерва с воспроизведением операций удаления страниц индекса GIN (Александр Коротков)
Устранение возможности сбоев при логической репликации в случае использования индексов с выражениями или предикатами (Питер Эйзентраут)
Исключение бесполезного и дорогостоящего логического декодирования данных TOAST при перезаписи таблицы (Томаш Вондра)
Исправление логики остановки подмножества передатчиков WAL при включении синхронной репликации (Пол Гуо, Микаэль Пакье)
Устранение возможности сохранения некорректного значения идентификатора реплики в записи WAL об удалении кортежа (Стас Кельвич)
Предотвращение некорректного применения оптимизации с пропуском WAL во время выполнения
COPY
в представление или стороннюю таблицу (Амит Ланготе, Микаэль Пакье)Повышение приоритета файлов истории WAL по отношению к другим файлам данных WAL при выборе архиватором очередных файлов для архивации (Дэвид Стил)
Устранение возможности сбоя в
UPDATE
с множественнымSET
и вложеннымSELECT
в качестве источника данных (Том Лейн)Устранение сбоя в случае, когда libxml2 возвращает null вместо сообщения об ошибке (Серхио Конде Гомес)
Устранение ложных ошибок разбора, связанных с группировкой, которые были вызваны несогласованной обработкой присваиваний с правилами сортировки (Эндрю Гирт)
В некоторых случаях выражения, которые должны были считаться совместными, не считались таковыми, если они включали операции с типами данных, поддерживающими правила сортировки.
Вместо презумпции герметичности функции сравнения, которую вызывают функции
LEAST()
илиGREATEST()
, реализована соответствующая проверка (Том Лейн)Собственно утечку информации из функций сравнения btree обычно сложно организовать, но в принципе это возможно.
Исправление некорректного планирования запросов с вложенными циклами над и под узлом Gather в плане (Том Лейн)
Если на обоих уровнях вложенного цикла требовалось передать одну и ту же переменную в правую сторону, мог быть построен некорректный план.
Исправлено некорректное планирование запросов, в которых подзапрос LATERAL должен выполняться при сканировании сторонней таблицы (Том Лейн)
Исправлена ошибка при оценке стоимости соединения слиянием, проявляющаяся в особом случае (Том Лейн)
Планировщик мог предпочесть соединение слиянием, когда диапазон внешнего ключа был намного меньше диапазона внутреннего ключа, даже при наличии множества повторяющихся ключей с внутренней стороны, а это плохой выбор.
Предотвращение увеличения времени планирования порядка O(N^2) с запросами, содержащими тысячи индексируемых выражений (Том Лейн)
Улучшение обработки параллельно изменяемых строк в ходе
ANALYZE
(Джефф Джейнс, Том Лейн)Ранее строки, удаляемые текущими транзакциями, исключались из выборки операции
ANALYZE
, но обнаружилось, что это нарушает согласованность в большей степени, чем их включение. Теперь выборка по сути соответствует снимку MVCC на момент запускаANALYZE
.Операция
TRUNCATE
теперь игнорирует дочерние таблицы, являющиеся временными таблицами других сеансов (Амит Ланготе, Микаэль Пакье)Таким образом поведение
TRUNCATE
теперь соответствует поведению других команд. Ранее в таких случаях обычно происходил сбой.Исправление обновления счётчиков статистики в ходе
TRUNCATE
для нужной таблицы (Том Лейн)Если с опустошаемой таблицей была связана таблица TOAST, по ошибке сбрасывались счётчики последней.
Корректная обработка
ALTER TABLE ONLY ADD COLUMN IF NOT EXISTS
(Грег Старк)Поддержка команды
UNLISTEN
в режиме горячего резерва (Шэй Роджански)Эта команда не должна ничего делать, так как
LISTEN
не допускается в режиме горячего резерва, но возможность выполнения этой пустой операции упрощает логику сброса состояния для клиентов.Исправление зависимостей ролей в списках прав для схем и типов данных (Том Лейн)
В некоторых случаях имелась возможность удалить роль, которой были назначены права. Эта проблема не проявлялась сразу, но при выгрузке/восстановлении или обновлении могли возникнуть ошибки, в частности выражающиеся в неудачных попытках назначить права ролям с числовыми именами.
Недопущение использования временной схемы сеанса в двухфазных транзакциях (Микаэль Пакье)
Обращение к временным таблицам в таких транзакциях было запрещено уже давно, однако оставалась возможность выполнять другие недопустимые операции с временными объектами.
Обеспечение корректного сброса кеша отношений после добавления или удаления ограничений внешнего ключа (Альваро Эррера)
В результате устранённого теперь упущения в существующих сеансах могло не действовать только что созданное ограничение или продолжало действовать удалённое.
Обеспечение должного обновления кешей отношений после переименования ограничений (Амит Ланготе)
Приложение дополнительных усилий для удаления потерянных временных таблиц в процессе автоочистки, а также при выполнении
DISCARD TEMP
(Альваро Эррера)В результате будут аккуратнее вычищаться следы деятельности прерванных сеансов.
Исправление воспроизведения операций микроочистки индекса GiST, устраняющее возможность получения несогласованного состояния в параллельных запросах на серверах горячего резерва (Александр Коротков)
Недопущение досрочной утилизации пустых страниц индекса GIN, чреватой ошибками при параллельном поиске по индексу (Андрей Бородин, Александр Коротков)
Исправление проявляющихся в граничных случаях ошибок преобразования чисел с плавающей точкой в целые (Эндрю Гирт)
Значения, ненамного превышающие максимально возможное целое, могли приниматься, а затем, в результате переполнения, превращаться в минимально возможное целое. Кроме того, могли ошибочно не допускаться значения, которые при округлении должны были преобразовываться в минимальное или максимальное допустимое целое.
В запросе аутентификации PAM значение
PAM_RHOST
не должно задаваться для соединений, установленных через сокет Unix (Томас Манро)Ранее эта переменная принимала значение
[local]
, которое как минимум было бесполезным, так как в ней ожидается имя узла.Недопущение в
client_min_messages
более высоких уровней, чемERROR
(Джона Харрис, Том Лейн)Ранее в этой переменной можно было установить уровень
FATAL
илиPANIC
, в результате чего подавлялась передача клиенту обычных сообщений об ошибках. Однако это противоречит гарантиям, заложенным в протоколе обмена данными PostgreSQL, и некоторые клиенты могут этого не понять. В уже выпущенных версиях исправление заключается в неявной подмене таких уровней значениемERROR
, а начиная с версии 12, они просто не будут приниматься.Переход в ecpglib к использованию функции
uselocale()
или_configthreadlocale()
вместоsetlocale()
(Михаэль Мескес, Том Лейн)Так как функция
setlocale()
не является внутрипотоковой и может быть даже непотокобезопасной, предыдущая реализация вызывала проблемы в многопоточных приложениях на базе ecpg.Исправление ошибочных результатов при получении числовых данных через область дескриптора SQLDA ecpg (Дайсукэ Хигути)
Ранее значения с ведущими нулями копировались некорректно.
Исправление метакоманды psql
\g
назначение
для операцииCOPY TO STDOUT
(Даниэль Верите)Ранее параметр
назначение
игнорировался, и копируемые данные всегда попадали в текущий поток вывода.Исправление обработки специальных символов для вывода psql в формате LaTeX (Том Лейн)
Ранее обратная косая черта и некоторые другие знаки препинания из ASCII выводились некорректно, следствием чего были ошибки синтаксиса в документе или отображение некорректных символов.
Исправление обработки программой pg_dump материализованных представлений с неявными зависимостями от первичных ключей (Том Лейн)
В результате этой ошибки могли неправильно помечаться записи таких представлений в архиве, что приводило к безобидным предупреждениям «archive items not in correct section order» (в последовательности элементов архива нарушен порядок разделов); и, что более значимо, могли некорректно работать варианты избирательного восстановления, например с указанием таких меток в
--section
.Устранение сбоя, имевшего место на некоторых платформах при обращении по нулевому указателю, когда pg_dump или pg_restore пытались вывести ошибку (Том Лейн)
Игнорирование ошибок
SIGPIPE
в случаях, когдаCOPY FROM PROGRAM
прекращает читать вывод программы досрочно (Том Лейн)Такие случаи невозможны на практике именно с
COPY
, но могут иметь место при использованииcontrib/file_fdw
.Исправление в
contrib/hstore
вычисления хеша для пустых значенийhstore
, созданных в версии 8.4 или более ранней (Эндрю Гирт)В предыдущей реализации хеш для этих значений вычислялся не так, как для пустых значений
hstore
, созданных более поздней версией, вследствие чего соединения или агрегирования по хешу могли выполняться неправильно. Поэтому имеет смысл переиндексировать все хеш-индексы, построенные по столбцамhstore
, если таблицы могут содержать данные, которые были внесены ещё в версии 8.4 или раньше и с тех пор никогда не проходили через выгрузку/восстановление.Устранение сбоев и ускорение операций при обработке данных большого объёма операторами класса
gist__int_ops
модуляcontrib/intarray
(Эндрю Гирт)Установление в скрипте configure следующего порядка поиска
python
: собственноpython
, затемpython3
, и только потомpython2
(Питер Эйзентраут)Это позволяет конфигурировать PL/Python, не задавая явно переменную окружения
PYTHON
на тех платформах, где теперь отсутствует программаpython
без версии.Добавление поддержки новых переменных
PG_CFLAGS
,PG_CXXFLAGS
иPG_LDFLAGS
в Makefile для pgxs (Кристоф Берг)Это упрощает организацию нестандартных процессов сборки расширений.
Исправление написанных на Perl скриптов сборки, чтобы они не полагались на присутствие элемента «
.
» в пути поиска, так как в последних версиях Perl он отсутствует (Эндрю Дунстан)Устранение проблем с разбором параметров командной строки в OpenBSD (Том Лейн)
Перемещение вызова
set_rel_pathlist_hook
, чтобы расширения могли использовать его для передачи частичных путей при выполнении параллельных запросов (КайГай Кохэй)Ожидается, что это никак не повлияет на существующие сценарии использования.
Переход в названиях функций поддержки red-black tree (красно-чёрного дерева) от префикса
rb
кrbt
(Том Лейн)Это позволяет избежать конфликта имён с функциями Ruby, нарушающего работу PL/Ruby. Хочется надеяться, что в результате не пострадают другие расширения.
Обновление данных часовых поясов до версии tzdata 2018i, включающее изменения правил перехода на летнее время в Казахстане, Метлакатле и на Сан-Томе и Принсипи. Часовой пояс Кызылорды в Казахстане разделился на два, при этом появился новый пояс Asia/Qostanay (Азия/Костанай), а в некоторых областях смещение UTC не изменилось. Также скорректированы исторические данные для Гонконга и многочисленных тихоокеанских островов.