E.20. Выпуск 9.5.6
Дата выпуска: 2017-02-09
В этот выпуск вошли различные исправления, внесённые после версии 9.5.5. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.20.1. Миграция на версию 9.5.6
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если в вашей инсталляции проявилась ошибка, описанная в первой записи следующего списка изменений, после обновления вам может потребоваться предпринять дополнительные действия для исправления испорченных индексов.
Также, если вы обновляете сервер с более ранней версии, чем 9.5.5, см. Раздел E.21.
E.20.2. Изменения
Исправление поведения в особых условиях, которое приводило к повреждению индексов, создаваемых командой
CREATE INDEX CONCURRENTLY(Паван Деоласи, Том Лейн)Если команда
CREATE INDEX CONCURRENTLYприменялась для построения индекса, зависящего от столбца, ранее не индексированного, то у строк, изменяемых транзакциями, выполняемыми одновременно с командойCREATE INDEX, могли оказываться некорректные записи в индексе. В случае подозрений, что вас это коснулось, самое надёжное решение — перестроить такие индексы после установки этого обновления.Предотвращение утери специального снимка, используемого при сканированиях каталога, при преждевременной очистке данных (Tom Lane)
Рабочие процессы не учитывали этот снимок, сообщая о своём самом старом xmin, что оставляло возможность для удаления по-прежнему нужных данных параллельными операциями очистки. Это приводило к появлению плавающих ошибок с сообщениями «ошибка поиска в кеше для отношения 1255».
Исправление некорректной записи в WAL, формируемой для индексов BRIN (Кунтал Гхош)
Запись WAL, выдаваемая для страницы BRIN «revmap» при перемещении кортежа индекса в другую страницу, была некорректной. При воспроизведении журнала соответствующая часть индекса становилась непригодной, и её требовалось вычислять заново.
Безусловное фиксирование в WAL создания «слоя инициализации» для нежурналируемых таблиц (Микаэль Пакье)
Ранее это действие пропускалось при wal_level =
minimal, но на самом деле это необходимо даже в этом случае, чтобы нежурналируемая таблица корректно создавалась пустой после сбоя.Сокращение взаимоблокировок на резервных серверах при воспроизведении операций очистки индекса-B-дерева (Саймон Риггс)
Это изменение исключает существенные задержки при репликации, которые иногда имели место при воспроизведении таких операций.
Если процесс сборщика статистики потерян, перезапускать его и в режиме горячего резерва (Такаюки Цунакава)
Обеспечение корректной работы механизма уведомлений горячего резерва, когда он включается при запуске резервного сервера (Антс Аасма, Крейг Рингер)
Проверка прерываний в момент ожидания конфликтующего запроса сервером горячего резерва (Саймон Риггс)
Предупреждение постоянного перезапуска процесса запуска автоочистки в особых случаях (Амит Хандекар)
Это исправление решает проблему, возникавшую, когда автоочистка номинально отключена и есть несколько таблиц, требующих «заморозки», но эти таблицы уже обработаны рабочими процессами автоочистки.
Исправление проверки на возможность удаления объекта, принадлежащего расширению (Том Лейн)
Скрипты обновления расширений должны иметь возможность удалять объекты расширений, но это запрещалось для последовательностей со столбцами serial, а также, возможно, в других случаях.
Команда
ALTER TABLEдолжна сохранять назначения табличных пространств индексам при перестраивании индексов (Том Лейн, Микаэль Пакье)Ранее с нестандартными значениями default_tablespace были возможны разрушения индексов.
Исправление некорректного изменения свойств триггерной функции при изменении свойства «откладываемости» ограничения внешнего ключа с помощью команды
ALTER TABLE ... ALTER CONSTRAINT(Том Лейн)Это приводило к странным сбоям при последующем обращении к внешнему ключу, так как триггеры срабатывали не в положенное время.
Недопущение удаления ограничения внешнего ключа при наличии событий, ожидающих обработки триггерами, для целевого отношения (Том Лейн)
Это предотвращает ошибки «не удалось найти триггер
NNN» и «в отношенииNNNнет триггеров».Исправление поведения
ALTER TABLE ... SET DATA TYPE ... USINGв случаях, когда порядок столбцов в дочерней таблице отличается от родительской (Альваро Эррера)Вследствие того, что столбцы в выражении
USINGне перенумеровывались, возникала ошибка, обычно такая: «атрибутNимеет неправильный тип».Исправление обращения к столбцу OID в случаях, когда таблица с таким столбцом связывается с родительской, тоже с OID, посредством
ALTER TABLE ... INHERIT(Амит Ланготе)В таких случаях столбец OID должен обрабатываться как обычный пользовательский столбец, но этого не происходило, что приводило к странному поведению при последующих изменениях наследования.
Исправление поведения
CREATE OR REPLACE VIEW— запрос представления должен изменяться до применения новых параметров представления (Дин Рашид)Ранее в команде происходил сбой, если новые параметры оказывались несогласованными со старым определением представления.
Получение правильного идентификатора объекта в
ALTER TEXT SEARCH CONFIGURATION(Артур Закиров)Ранее расширениям, таким как модули логического декодирования, выдавался неправильный OID каталога.
Предупреждение сбоев механизма учёта времени транзакций при запросе особых XID (
FrozenTransactionIdиBootstrapTransactionId) (Крейг Рингер)Проверка конфликтов сериализуемости перед тем, как будет выдана ошибка нарушения ограничений (Томас Манро)
В транзакциях сериализуемого уровня изоляции желательно, чтобы ошибка, вызванная параллельными транзакциями, заявлялась как ошибка сериализации, что скажет приложению, что попытка повторить то же действие может быть успешной. К сожалению, это не будет надёжно работать при дублировании ключа при параллельном его добавлении. В результате этого изменения такая ошибка будет выдаваться как ошибка сериализации, если приложение явно проверяет присутствие конфликтующего ключа (и не находит его) до этого в транзакции.
Исправление некорректного использования reloptions представлений как reloptions обычных таблиц (Том Лейн)
Симптомами ошибки были неуместные сообщения «ON CONFLICT не поддерживается для таблицы ..., служащей таблицей каталога» когда целевым отношением
INSERT ... ON CONFLICTбыло представление с каскадной проверкой.Исправление некорректного сообщения «допустимое число элементов в целевом списке ограничено
N» при использованииON CONFLICTс широкими таблицами (Том Лейн)Предотвращение разворачивания
foo.*в набор столбцов в исходном выраженииUPDATE(Том Лейн)Это приводило к ошибкам с сообщением «несоответствие целевого количества в UPDATE --- внутренняя ошибка». Теперь эта запись воспринимается как обозначение переменной «вся-строка», как и в других контекстах.
Обеспечение точного определения модификаторов типа столбцов в конструкциях
VALUESс несколькими строками (Том Лейн)Это устраняет проблемы, возникавшие, когда первое значение в столбце имеет воспринимаемый модификатор типа (например, длину значения
varchar), но последующие значения не разделяют его ограничение.При нахождении незаконченной суррогатной пары Unicode в конце строки символов Unicode должна выдаваться ошибка (Том Лейн)
Обычно за начальным суррогатным символом Unicode должно следовать продолжение, но это не проверялось когда такой начальный символ оказывался последним в строке символов Unicode (
U&'...') или в Unicode-идентификаторе (U&"...").Определённо отрицательному поисковому запросу, например,
!foo, должны удовлетворять пустые значенияtsvector(Том Дунстан)Такие соответствия находились при поиске по индексу GIN, но не при последовательном сканировании или поиске по индексу GiST.
Предотвращение сбоя в ситуации, когда
ts_rewrite()заменяет поддерево не верхнего уровня пустым запросом (Артур Закиров)Устранение проблем с производительностью в
ts_rewrite()(Том Лейн)Исправление обработки в
ts_rewrite()вложенных операторов NOT (Том Лейн)Увеличение скорости пользовательских агрегатов, использующих в качестве перехода функцию
array_append()(Том Лейн)Исправление
array_fill()для корректной обработки пустых массивов (Том Лейн)Предупреждение возможных сбоев в функциях
array_position()иarray_positions()при обработке массивов записей (Джун-сок Янг)Устранение выхода на один байт за границу буфера в функции
quote_literal_cstr()(Хейкки Линнакангас)Этот выход имел место только если входная строка содержала исключительно апострофы и/или обратные косые черты.
Предотвращение одновременного выполнения вызовов
pg_start_backup()иpg_stop_backup()(Микаэль Пакье)Это предупреждает сбой проверки истинности и, вероятно, худшие последствия, в случае, если кто-то попытается запустить эти функции параллельно.
Отключение трансформации, которая пыталась оптимизировать бесполезные преобразования
AT TIME ZONE(Том Лейн)Вследствие этого выдавались неверные результаты, когда упрощённое выражение использовалось в условии индекса.
Сохранение приведений
interval-в-interval, которые на самом деле несут смысловую нагрузку (Том Лейн)В некоторых случаях приведения, которые должны были обнулять младшие поля значений
interval, ошибочно считались бессмысленными и просто убирались. В результате, например, при приведении значения типаINTERVAL MONTHкINTERVAL YEARполе месяцев не обнулялось.Исправление ошибок при передаче значений параметров GUC параллельным исполнителям (Микаэль Пакье, Том Лейн)
Аннулирование кешированных планов при изменениях в параметрах сторонних таблиц (Амит Ланготе, Эцуро Фудзита, Ашутош Бапат)
Исправление pg_dump для корректной выгрузки пользовательских приведений и преобразований, использующих встроенные функции (Стивен Фрост)
Реализация более разумного поведения pg_restore с
--create --if-existsв случаях, когда архив содержит нераспознанные командыDROP(Том Лейн)Это не устраняет никакую наблюдаемую ошибку, но может улучшить поведение в будущем, при использовании pg_restore с архивом, созданным предыдущей версией pg_dump.
Исправление ограничения нагрузки pg_basebackup при низкой скорости ввода/вывода (Антонин Хоуска)
Если скорость диска на время оказывалась ниже заданного ограничения, в вычислении происходило переполнение, и в результате ограничение отключалось до конца операции.
Обеспечение корректной работы pg_basebackup с подкаталогами
pg_stat_tmpиpg_replslot, являющимися символическими ссылками (Магнус Хагандер, Микаэль Пакье)Предотвращение возможного сбоя pg_basebackup на резервном сервере при задействовании файлов WAL (Амит Капила, Роберт Хаас)
Исправление возможного дефекта при обработке развёрнутых массивов в ограничениях-проверках доменов и в конструкциях
CASE(Том Лейн)Существовала вероятность, что функция PL/pgSQL, вызванная в этих контекстах, изменит или даже удалит значение массива, которое должно сохраняться для дополнительных операций.
Исправление рекурсивного вызова функций PL/pgSQL в таких контекстах, как проверки ограничений домена, выполняемые при присвоении значения переменной PL/pgSQL (Том Лейн)
Обеспечение правильного учёта объектов исключений Python, создаваемых нами для PL/Python, счётчиками использования (Рафа де ла Торре, Том Лейн)
Это предотвращает ошибки, возникавшие при использовании объектов после цикла уборки мусора в Python.
Исправление в PL/Tcl поддержки триггеров для таблиц, в которых имеется столбец
.tupno(Том Лейн)Это соответствует (ранее недокументированному) поведению команд PL/Tcl
spi_execиspi_execp, в том, что особый столбец.tupnoдобавляется, только если отсутствует настоящий с таким именем.В файлах
~/.pgpassдолжны допускаться завершения строк в стиле DOS, даже на Unix-платформах (Вик Фиринг)Это изменение упрощает использование одних и тех же файлов паролей на машинах с Unix и Windows.
Устранение выхода на один байт за границу буфера, когда ecpg передаётся имя файла, которое заканчивается точкой (Такаюки Цунакава)
Исправление в psql дополнения табуляцией для команды
ALTER DEFAULT PRIVILEGES(Жиль Даролд, Стивен Фрост)В psql пустое или содержащее только пробелы значение переменной окружения
PAGERдолжно означать «без постраничника» (Том Лейн)Ранее с таким значением вывод, предназначенный для постраничника, просто исчезал.
Улучшение в
contrib/dblinkпередачи сообщений о низкоуровневых ошибках libpq, например, о нехватке памяти (Джо Конвей)Реализация
contrib/dblinkдолжна игнорировать невоспринимаемые ей параметры сервера, когда в качестве источника параметров подключения используется сторонний серверcontrib/postgres_fdw(Кори Хинкер)Ранее, если объект стороннего сервера имел параметры, которые не относились к параметрам подключения libpq, происходила ошибка.
Исправление проблем с переносимостью в функциях
contrib/pageinspect, связанных с индексами GIN (Питер Эйзентраут, Том Лейн)В Windows изменённые переменные окружения должны передаваться и отладочным DLL (Кристина Ульрих)
Синхронизация нашей копии библиотеки timezone с выпущенной IANA версией tzcode2016j (Том Лейн)
Это решило ряд проблем; в частности, проблему при установке данных о часовых поясах в каталог, в котором не поддерживаются жёсткие ссылки.
Обновление данных часовых поясов до версии tzdata 2016j, включающее изменения правил перехода на летнее время на Северном Кипре (добавление нового пояса Asia/Famagusta), в России (добавление нового пояса Europe/Saratov), в Тонга и в Антарктике/Кейси, плюс корректировку исторических данных для Италии, Казахстана, Мальты и Палестины. Переход к предпочитаемому числовому обозначению пояса для Тонга.
E.20. Release 9.5.6
Release date: 2017-02-09
This release contains a variety of fixes from 9.5.5. For information about new features in the 9.5 major release, see Section E.26.
E.20.1. Migration to Version 9.5.6
A dump/restore is not required for those running 9.5.X.
However, if your installation has been affected by the bug described in the first changelog entry below, then after updating you may need to take action to repair corrupted indexes.
Also, if you are upgrading from a version earlier than 9.5.5, see Section E.21.
E.20.2. Changes
Fix a race condition that could cause indexes built with
CREATE INDEX CONCURRENTLYto be corrupt (Pavan Deolasee, Tom Lane)If
CREATE INDEX CONCURRENTLYwas used to build an index that depends on a column not previously indexed, then rows updated by transactions that ran concurrently with theCREATE INDEXcommand could have received incorrect index entries. If you suspect this may have happened, the most reliable solution is to rebuild affected indexes after installing this update.Ensure that the special snapshot used for catalog scans is not invalidated by premature data pruning (Tom Lane)
Backends failed to account for this snapshot when advertising their oldest xmin, potentially allowing concurrent vacuuming operations to remove data that was still needed. This led to transient failures along the lines of “cache lookup failed for relation 1255”.
Fix incorrect WAL logging for BRIN indexes (Kuntal Ghosh)
The WAL record emitted for a BRIN “revmap” page when moving an index tuple to a different page was incorrect. Replay would make the related portion of the index useless, forcing it to be recomputed.
Unconditionally WAL-log creation of the “init fork” for an unlogged table (Michael Paquier)
Previously, this was skipped when wal_level =
minimal, but actually it's necessary even in that case to ensure that the unlogged table is properly reset to empty after a crash.Reduce interlocking on standby servers during the replay of btree index vacuuming operations (Simon Riggs)
This change avoids substantial replication delays that sometimes occurred while replaying such operations.
If the stats collector dies during hot standby, restart it (Takayuki Tsunakawa)
Ensure that hot standby feedback works correctly when it's enabled at standby server start (Ants Aasma, Craig Ringer)
Check for interrupts while hot standby is waiting for a conflicting query (Simon Riggs)
Avoid constantly respawning the autovacuum launcher in a corner case (Amit Khandekar)
This fix avoids problems when autovacuum is nominally off and there are some tables that require freezing, but all such tables are already being processed by autovacuum workers.
Fix check for when an extension member object can be dropped (Tom Lane)
Extension upgrade scripts should be able to drop member objects, but this was disallowed for serial-column sequences, and possibly other cases.
Make sure
ALTER TABLEpreserves index tablespace assignments when rebuilding indexes (Tom Lane, Michael Paquier)Previously, non-default settings of default_tablespace could result in broken indexes.
Fix incorrect updating of trigger function properties when changing a foreign-key constraint's deferrability properties with
ALTER TABLE ... ALTER CONSTRAINT(Tom Lane)This led to odd failures during subsequent exercise of the foreign key, as the triggers were fired at the wrong times.
Prevent dropping a foreign-key constraint if there are pending trigger events for the referenced relation (Tom Lane)
This avoids “could not find trigger
NNN” or “relationNNNhas no triggers” errors.Fix
ALTER TABLE ... SET DATA TYPE ... USINGwhen child table has different column ordering than the parent (Álvaro Herrera)Failure to adjust the column numbering in the
USINGexpression led to errors, typically “attributeNhas wrong type”.Fix processing of OID column when a table with OIDs is associated to a parent with OIDs via
ALTER TABLE ... INHERIT(Amit Langote)The OID column should be treated the same as regular user columns in this case, but it wasn't, leading to odd behavior in later inheritance changes.
Fix
CREATE OR REPLACE VIEWto update the view query before attempting to apply the new view options (Dean Rasheed)Previously the command would fail if the new options were inconsistent with the old view definition.
Report correct object identity during
ALTER TEXT SEARCH CONFIGURATION(Artur Zakirov)The wrong catalog OID was reported to extensions such as logical decoding.
Fix commit timestamp mechanism to not fail when queried about the special XIDs
FrozenTransactionIdandBootstrapTransactionId(Craig Ringer)Check for serializability conflicts before reporting constraint-violation failures (Thomas Munro)
When using serializable transaction isolation, it is desirable that any error due to concurrent transactions should manifest as a serialization failure, thereby cueing the application that a retry might succeed. Unfortunately, this does not reliably happen for duplicate-key failures caused by concurrent insertions. This change ensures that such an error will be reported as a serialization error if the application explicitly checked for the presence of a conflicting key (and did not find it) earlier in the transaction.
Fix incorrect use of view reloptions as regular table reloptions (Tom Lane)
The symptom was spurious “ON CONFLICT is not supported on table ... used as a catalog table” errors when the target of
INSERT ... ON CONFLICTis a view with cascade option.Fix incorrect “target lists can have at most
Nentries” complaint when usingON CONFLICTwith wide tables (Tom Lane)Prevent multicolumn expansion of
foo.*in anUPDATEsource expression (Tom Lane)This led to “UPDATE target count mismatch --- internal error”. Now the syntax is understood as a whole-row variable, as it would be in other contexts.
Ensure that column typmods are determined accurately for multi-row
VALUESconstructs (Tom Lane)This fixes problems occurring when the first value in a column has a determinable typmod (e.g., length for a
varcharvalue) but later values don't share the same limit.Throw error for an unfinished Unicode surrogate pair at the end of a Unicode string (Tom Lane)
Normally, a Unicode surrogate leading character must be followed by a Unicode surrogate trailing character, but the check for this was missed if the leading character was the last character in a Unicode string literal (
U&'...') or Unicode identifier (U&"...").Ensure that a purely negative text search query, such as
!foo, matches emptytsvectors (Tom Dunstan)Such matches were found by GIN index searches, but not by sequential scans or GiST index searches.
Prevent crash when
ts_rewrite()replaces a non-top-level subtree with an empty query (Artur Zakirov)Fix performance problems in
ts_rewrite()(Tom Lane)Fix
ts_rewrite()'s handling of nested NOT operators (Tom Lane)Improve speed of user-defined aggregates that use
array_append()as transition function (Tom Lane)Fix
array_fill()to handle empty arrays properly (Tom Lane)Fix possible crash in
array_position()orarray_positions()when processing arrays of records (Junseok Yang)Fix one-byte buffer overrun in
quote_literal_cstr()(Heikki Linnakangas)The overrun occurred only if the input consisted entirely of single quotes and/or backslashes.
Prevent multiple calls of
pg_start_backup()andpg_stop_backup()from running concurrently (Michael Paquier)This avoids an assertion failure, and possibly worse things, if someone tries to run these functions in parallel.
Disable transform that attempted to remove no-op
AT TIME ZONEconversions (Tom Lane)This resulted in wrong answers when the simplified expression was used in an index condition.
Avoid discarding
interval-to-intervalcasts that aren't really no-ops (Tom Lane)In some cases, a cast that should result in zeroing out low-order
intervalfields was mistakenly deemed to be a no-op and discarded. An example is that casting fromINTERVAL MONTHtoINTERVAL YEARfailed to clear the months field.Fix bugs in transmitting GUC parameter values to parallel workers (Michael Paquier, Tom Lane)
Ensure that cached plans are invalidated by changes in foreign-table options (Amit Langote, Etsuro Fujita, Ashutosh Bapat)
Fix pg_dump to dump user-defined casts and transforms that use built-in functions (Stephen Frost)
Fix pg_restore with
--create --if-existsto behave more sanely if an archive contains unrecognizedDROPcommands (Tom Lane)This doesn't fix any live bug, but it may improve the behavior in future if pg_restore is used with an archive generated by a later pg_dump version.
Fix pg_basebackup's rate limiting in the presence of slow I/O (Antonin Houska)
If disk I/O was transiently much slower than the specified rate limit, the calculation overflowed, effectively disabling the rate limit for the rest of the run.
Fix pg_basebackup's handling of symlinked
pg_stat_tmpandpg_replslotsubdirectories (Magnus Hagander, Michael Paquier)Fix possible pg_basebackup failure on standby server when including WAL files (Amit Kapila, Robert Haas)
Fix possible mishandling of expanded arrays in domain check constraints and
CASEexecution (Tom Lane)It was possible for a PL/pgSQL function invoked in these contexts to modify or even delete an array value that needs to be preserved for additional operations.
Fix nested uses of PL/pgSQL functions in contexts such as domain check constraints evaluated during assignment to a PL/pgSQL variable (Tom Lane)
Ensure that the Python exception objects we create for PL/Python are properly reference-counted (Rafa de la Torre, Tom Lane)
This avoids failures if the objects are used after a Python garbage collection cycle has occurred.
Fix PL/Tcl to support triggers on tables that have
.tupnoas a column name (Tom Lane)This matches the (previously undocumented) behavior of PL/Tcl's
spi_execandspi_execpcommands, namely that a magic.tupnocolumn is inserted only if there isn't a real column named that.Allow DOS-style line endings in
~/.pgpassfiles, even on Unix (Vik Fearing)This change simplifies use of the same password file across Unix and Windows machines.
Fix one-byte buffer overrun if ecpg is given a file name that ends with a dot (Takayuki Tsunakawa)
Fix psql's tab completion for
ALTER DEFAULT PRIVILEGES(Gilles Darold, Stephen Frost)In psql, treat an empty or all-blank setting of the
PAGERenvironment variable as meaning “no pager” (Tom Lane)Previously, such a setting caused output intended for the pager to vanish entirely.
Improve
contrib/dblink's reporting of low-level libpq errors, such as out-of-memory (Joe Conway)Teach
contrib/dblinkto ignore irrelevant server options when it uses acontrib/postgres_fdwforeign server as the source of connection options (Corey Huinker)Previously, if the foreign server object had options that were not also libpq connection options, an error occurred.
Fix portability problems in
contrib/pageinspect's functions for GIN indexes (Peter Eisentraut, Tom Lane)On Windows, ensure that environment variable changes are propagated to DLLs built with debug options (Christian Ullrich)
Sync our copy of the timezone library with IANA release tzcode2016j (Tom Lane)
This fixes various issues, most notably that timezone data installation failed if the target directory didn't support hard links.
Update time zone data files to tzdata release 2016j for DST law changes in northern Cyprus (adding a new zone Asia/Famagusta), Russia (adding a new zone Europe/Saratov), Tonga, and Antarctica/Casey. Historical corrections for Italy, Kazakhstan, Malta, and Palestine. Switch to preferring numeric zone abbreviations for Tonga.