E.22. Выпуск 9.5.4
Дата выпуска: 2016-08-11
В этот выпуск вошли различные исправления, внесённые после версии 9.5.3. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.22.1. Миграция на версию 9.5.4
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если вы обновляете сервер с более ранней версии, чем 9.5.2, см. Раздел E.24.
E.22.2. Изменения
Исправление некорректного вычисления вложенных выражений
CASE-WHEN(Хейкки Линнакангас, Микаэль Пакье, Том Лейн)Выражение
CASE, фигурирующее в подвыражении проверки другого выраженияCASE, могло некорректно оценивать, отличается ли его собственное проверяемое значение от NULL. Кроме того, встраивание SQL-функции, реализующей оператор равенства, который используется выражениемCASE, может привести к передаче неправильного проверяемого значения функциям, вызываемым в выраженииCASEв теле функции SQL. Если же проверяемые значения оказываются разных типов, возможен сбой; более того, это может эксплуатироваться для несанкционированного чтения областей памяти сервера. (CVE-2016-5423)Корректировка в клиентских программах обработки специальных символов в именах ролей и баз данных (Ной Миш, Натан Боссарт, Микаэль Пакье)
Программа vacuumdb и другие клиентские утилиты во многих местах могли некорректно воспринимать имена ролей и баз данных, включающие кавычки или обратную косую черту. Теперь проверки ужесточены во избежание рисков. Также, когда этим программам вместо имени базы передаётся строка подключения, она обрабатывается должным образом.
Приведение в соответствие с документацией правил обработки пар двойных кавычек в командах psql
\connectи\password.Введение нового параметра
-reuse-previousдля команды psql\connect, позволяющего явно указывать, должны ли повторно использоваться параметры предыдущего подключения. (Без данного параметра это, как и раньше, зависит от того, похоже ли имя базы данных на строку подключения.) Это позволяет безопасно оперировать с именами баз данных, содержащими специальные символы, в скриптах pg_dumpall.pg_dumpall теперь не будет принимать имена ролей или баз данных, содержащие символы перевода строки или возврата каретки, так как безопасно экранировать эти символы в Windows не представляется практичным. В будущем мы можем запретить такие имена и на стороне сервера, но пока это не сделано.
Эти коррективы считаются исправлениями уязвимостей, так как, сконструировав имена объектов специальным образом (используя спецсимволы), можно было сформировать произвольные команды, которые выполнятся с правами суперпользователя, когда суперпользователь будет выполнять pg_dumpall или другие операции обслуживания базы. (CVE-2016-5424)
Исправление некорректного в особых случаях поведения проверок
IS NULL/IS NOT NULL, применяемых к вложенным составным значениям (Эндрю Гирт, Том Лейн)В стандарте SQL говорится, что проверка
IS NULLдолжна возвращать TRUE для строки со всеми значениями NULL (то естьROW(NULL,NULL) IS NULLвыдаёт TRUE), но это не должно действовать рекурсивно (то есть,ROW(NULL, ROW(NULL,NULL)) IS NULLвыдаёт FALSE). В основном исполнителе это реализовано правильно, но при некоторых оптимизациях планировщика эта проверка рассматривалась как рекурсивная (и TRUE выдавалось в обоих случаях), кроме того, обёрткаcontrib/postgres_fdwтоже могла выдавать удалённые запросы с подобным некорректным поведением.Исправление ошибки «unrecognized node type» (нераспознанный тип узла) при
INSERT ... ON CONFLICTв рекурсивном CTE (элементеWITH) (Питер Гейган)Исправление в
INSERT ... ON CONFLICTсопоставления предикатов или выражений индексов, которые были упрощены планировщиком на стадии предобработки выражений (Том Лейн)Правильная обработка нарушений ограничений-исключений, которые применяются к целевой таблице команды
INSERT ... ON CONFLICT, но не являются решающими индексами (Том Лейн)В таких случаях должна выдаваться обычная ошибка нарушения ограничения, но вместо этого код попадал в бесконечный цикл.
Исправление
INSERT ... ON CONFLICT, чтобы при наличии в целевой таблице уникального индекса по OID не происходила ошибка (Том Лейн)Недопущение для типов данных
inetиcidrвходных адресов IPv6 со слишком большим количеством разделённых двоеточиями полей (Том Лейн)Предотвращение сбоя в
close_ps()(оператореpoint##lseg) для входных координат NaN (Том Лейн)В таких случаях должен просто возвращаться NULL.
Предотвращение сбоя в функции
pg_get_expr(), когда ей передаются несогласованные значения (Микаэль Пакье, Томас Манро)Исправление в нескольких местах выхода на один байт за границу буфера в
to_number()(Питер Эйзентраут)В некоторых случаях функция
to_number()могла читать из входной строки на один символ больше, чем нужно. Это создавало небольшой риск сбоя в случае расположения входной строки у края блока памяти.Планировщик не должен запускаться для запроса, заданного в операторе
CREATE MATERIALIZED VIEWилиCREATE TABLE ASс указаниемWITH NO DATA(Микаэль Пакье, Том Лейн)Это предотвращает некоторые лишние условия ошибки, например, когда стабильная функция, вызываемая материализованным представлением, зависит от ещё не существующей таблицы.
Ликвидация небезопасного промежуточного состояния при выполнении
heap_update()по сложному пути (Масахико Савада, Андрес Фройнд)Ранее в особых случаях целевой кортеж блокировался (путём изменения его XMAX), но это действие не отражалось в журнале, что могло угрожать целостности данных, если страница вымещалась на диск, а затем, до завершения изменения кортежа, происходил сбой базы.
Исправление обновления вспомогательных битов при воспроизведении из WAL операций блокирования строк (Андрес Фройнд)
Единственным известным последствием этой проблемы было то, что блокировки строк, удерживаемые подготовленной, но не зафиксированной транзакцией, могли теряться после сбоя и перезапуска сервера.
Предотвращение неоправданных ошибок «could not serialize access» (не удалось сериализовать доступ) при получении блокировок строк
FOR KEY SHAREв сериализуемом режиме (Альваро Эррера)«Развёрнутые» данные, возвращаемые узлом плана, должны быть доступны только для чтения (Том Лейн)
Это предотвращает сбои в некоторых случаях, когда результат нижнего узла плана неоднократно задействуется в верхних узлах. Если говорить о ядре PostgreSQL, риску подвержены только значения массивов, возвращаемые функциями PL/pgSQL; но расширения могут использовать развёрнутые данные и для других целей.
Предупреждение сбоя в
postgres -C, когда указанная переменная имеет пустое строковое значение (Микаэль Пакье)Предотвращение незапланированного ожидания приёмника в процессах, передающих WAL (Кётаро Хоригути)
Исправление возможной потери больших подтранзакций при логическом декодировании (Петру-Флорин Миханча)
Исправление сбоя логического декодирования, когда подтранзакция не содержит фактических изменений (Марко Тииккая, Эндрю Гирт)
Предоставление обслуживающим процессам актуальной статистики по общим каталогам (Том Лейн)
Ранее сборщик статистики не мог обновлять файл статистики для общих каталогов по запросу от обычного обслуживающего процесса. Эта проблема была частично скрыта, так как процесс запуска автоочистки регулярно выдавал запросы, в результате которых такие обновления производились: однако она проявлялась при отключении автоочистки.
Исключение ненужной записи в файлы статистики, когда несколько обслуживающих процессов запрашивают обновление один за другим (Том Лейн, Томаш Вондра)
Исключение потребления лишнего ID транзакции во время
VACUUM(Александр Коротков)В некоторых случаях в процессе
VACUUMтекущей транзакции без необходимости присваивался XID. В обычных условиях это некритично, но если очистка выполняется для предотвращения зацикливания идентификаторов транзакций, потребление дополнительных идентификаторов может привести к очень плохим последствиям.Предотвращение риска сбоя при очистке идентификаторов мультитранзакций в инсталляции, обновлённой (с помощью pg_upgrade) с версии старее 9.3 (Эндрю Гирт, Альваро Эррера)
Обычно этот дефект проявлялся в ошибках типа «MultiXactId
NNNhas not been created yet -- apparent wraparound» (MultiXactId %u ещё не был создан: видимо, произошло зацикливание).Когда в запускаемой вручную команде
ANALYZEзадаётся список столбцов, не нужно сбрасывать счётчикchanges_since_analyzeцелевой таблицы (Том Лейн)Если мы анализируем только избранные столбцы, мы не должны предотвращать запуск процедуры автоанализа для других столбцов.
Исправление ошибки в
ANALYZEс завышением показателяn_distinctдля столбца, содержащего уникальные или почти уникальные значениями и вместе с тем множество NULL (Том Лейн)Значения NULL могли учитываться как будто они сами являются уникальными, что приводило к серьёзным просчётам планировщика с запросами некоторых типов.
Недопущение запуска при автоочистке нескольких рабочих процессов для одного общего каталога (Альваро Эррера)
Обычно это не представляет большой проблемы, так как очистка выполняется быстро; но если каталог очень сильно замусорен, это может привести к тому, что все рабочие процессы, кроме одного, будут бессмысленно ждать, вместо того, чтобы делать что-то полезное с другими таблицами.
Исправление ошибки при обработке пометки/восстановления позиции в B-дереве (Кевин Гриттнер)
Вследствие этой ошибки могли выдаваться некорректные результаты соединения или ошибочные утверждения при соединении слиянием, в котором внутренним узлом оказывалось сканирование индекса-B-дерева.
Предупреждение двойного освобождения блокировки буфера при отказе от попытки удаления страницы индекса-B-дерева (Том Лейн)
В результате этой ошибки процедура
VACUUMне могла завершиться в некоторых случаях при наличии проблем с индексами-B-деревьями.Исправление ошибки при построении больших (больше
shared_buffers) хеш-индексов (Том Лейн)В коде, работающем с большими индексами, обнаружилась ошибка, приводящая к добавлению в индекс некорректных хеш-значений, так что последующий поиск по индексу всегда был безуспешным, кроме случаев, когда кортежи вставлялись в индекс уже после его создания.
Предотвращение бесконечного цикла при построении индексов GiST для геометрических столбцов с составными значениями, содержащими NaN (Том Лейн)
Предупреждение сбоя при сканировании с поиском ближайших соседей (упорядоченного (
ORDER BY) по расстоянию) по индексуcontrib/btree_gist, построенному по столбцуinterval(Питер Гейган)Исправление ошибки «PANIC: failed to add BRIN tuple» (ПАНИКА: не удалось добавить кортеж BRIN), возникавшей при попытке изменить элемент индекса BRIN (Альваро Эррера)
Предупреждение возможных сбоев при остановке фонового рабочего процесса (Дмитрий Иванов)
Исправление поведения в PL/pgSQL предложения
INTOвнутри командIMPORT FOREIGN SCHEMA(Том Лейн)Исправление кода
contrib/btree_gin, чтобы он корректно выдавал наименьшее возможное значениеbigint(Питер Эйзентраут)Наделение libpq способностью корректно декодировать версию сервера по схеме нумерации, которая вскоре будет принята (Питер Эйзентраут)
Для выпусков после 9.6 планируется перейти на нумерацию версий по схеме с двумя, а не тремя компонентами. Поэтому нужно, чтобы
PQserverVersion()возвращала правильное значение с такой нумерацией.Исправление в ecpg кода обработки элементов массива
unsigned long long(Михаэль Мескес)В pg_dump с одновременно заданными ключами
-cи-Cне должна выдаваться командаCREATE SCHEMA public(Дэвид Джонсон, Том Лейн)Улучшение обработки SIGTERM/control-C в параллельном режиме pg_dump и pg_restore (Том Лейн)
Обеспечение своевременного завершения рабочих процессов и передачи команд отмены запросов в подключённые рабочие процессы, в случае, если они выполняют какие-либо длительные операции, например
CREATE INDEX.Корректировка выдачи ошибок в параллельном режиме pg_dump и pg_restore (Том Лейн)
Ранее ошибки, выдаваемые рабочими процессами pg_dump или pg_restore, могли никогда не достигать консоли пользователя, так как они проходили через главный процесс, и были возможны различные сценарии взаимоблокировки, когда главный процесс не мог передавать сообщения. Теперь вместо этого всё будет просто выводиться в
stderr. В некоторых случаях при этом возможны повторы сообщений (например, когда все рабочие процессы сообщают об отключении главного), но это представляется лучшим вариантом, чем терять сообщения.Обеспечение корректного отключения параллельных процессов pg_dump и pg_restore в Windows в случае ошибки (Кётаро Хоригути)
Ранее процесс выдавал ошибку, но затем просто оставался в памяти, пока пользователь не останавливал его вручную.
Параллельный pg_dump должен завершаться штатно при попытке подключения к резервному серверу (Магнус Хагандер)
Такое использование не поддерживается (если только не применяется
--no-synchronized-snapshots), но эта ошибка не обрабатывалась должным образом.Улучшение поведения pg_dump при сборке без поддержки zlib (Кётаро Хоригути)
С такой сборкой не работала корректно параллельная выгрузка, а в других случаях выдавались довольно бессмысленные предупреждения.
Добавление для pg_basebackup параметра
-Z 0, позволяющего отключить сжатие (Фудзии Масао)Корректировка в makefile правила для безопасной сборки разделяемых библиотек AIX в параллельном режиме (Ной Миш)
Исправление тестов TAP и скриптов MSVC для работы с каталогом сборки, путь к которому содержит пробелы (Микаэль Пакье, Кётаро Хоригути)
Более предсказуемое поведение в выборе ошибки «statement timeout» (тайм-аут оператора) или «lock timeout» (тайм-аут блокировки) (Том Лейн)
В сильно загруженных системах регрессионные тесты иногда выдавали ошибку «lock timeout» (тайм-аут блокировки), хотя прежде этого должен был случиться тайм-аут оператора.
Адаптация регрессионных тестов к датской и валлийской локалям (Джефф Джейнс, Том Лейн)
Изменены некоторые тестовые данные, с которыми в этих локалях действовали необычные правила сортировки.
Приведение нашей копии кодов часовых поясов в соответствие с выпущенной IANA версией tzcode 2016c (Том Лейн)
Это необходимо для принятия ожидаемых в будущем изменений в файлах данных часовых поясов. Также это решает некоторые редкие проблемы при работе с необычными часовыми поясами.
Обновление данных часовых поясов до версии tzdata 2016f, включающее новые правила перехода на летнее время в Кемерове и Новосибирске, а также корректировку исторических данных для Азербайджана, Белоруссии и Марокко.
E.22. Release 9.5.4
Release date: 2016-08-11
This release contains a variety of fixes from 9.5.3. For information about new features in the 9.5 major release, see Section E.26.
E.22.1. Migration to Version 9.5.4
A dump/restore is not required for those running 9.5.X.
However, if you are upgrading from a version earlier than 9.5.2, see Section E.24.
E.22.2. Changes
Fix possible mis-evaluation of nested
CASE-WHENexpressions (Heikki Linnakangas, Michael Paquier, Tom Lane)A
CASEexpression appearing within the test value subexpression of anotherCASEcould become confused about whether its own test value was null or not. Also, inlining of a SQL function implementing the equality operator used by aCASEexpression could result in passing the wrong test value to functions called within aCASEexpression in the SQL function's body. If the test values were of different data types, a crash might result; moreover such situations could be abused to allow disclosure of portions of server memory. (CVE-2016-5423)Fix client programs' handling of special characters in database and role names (Noah Misch, Nathan Bossart, Michael Paquier)
Numerous places in vacuumdb and other client programs could become confused by database and role names containing double quotes or backslashes. Tighten up quoting rules to make that safe. Also, ensure that when a conninfo string is used as a database name parameter to these programs, it is correctly treated as such throughout.
Fix handling of paired double quotes in psql's
\connectand\passwordcommands to match the documentation.Introduce a new
-reuse-previousoption in psql's\connectcommand to allow explicit control of whether to re-use connection parameters from a previous connection. (Without this, the choice is based on whether the database name looks like a conninfo string, as before.) This allows secure handling of database names containing special characters in pg_dumpall scripts.pg_dumpall now refuses to deal with database and role names containing carriage returns or newlines, as it seems impractical to quote those characters safely on Windows. In future we may reject such names on the server side, but that step has not been taken yet.
These are considered security fixes because crafted object names containing special characters could have been used to execute commands with superuser privileges the next time a superuser executes pg_dumpall or other routine maintenance operations. (CVE-2016-5424)
Fix corner-case misbehaviors for
IS NULL/IS NOT NULLapplied to nested composite values (Andrew Gierth, Tom Lane)The SQL standard specifies that
IS NULLshould return TRUE for a row of all null values (thusROW(NULL,NULL) IS NULLyields TRUE), but this is not meant to apply recursively (thusROW(NULL, ROW(NULL,NULL)) IS NULLyields FALSE). The core executor got this right, but certain planner optimizations treated the test as recursive (thus producing TRUE in both cases), andcontrib/postgres_fdwcould produce remote queries that misbehaved similarly.Fix “unrecognized node type” error for
INSERT ... ON CONFLICTwithin a recursive CTE (aWITHitem) (Peter Geoghegan)Fix
INSERT ... ON CONFLICTto successfully match index expressions or index predicates that are simplified during the planner's expression preprocessing phase (Tom Lane)Correctly handle violations of exclusion constraints that apply to the target table of an
INSERT ... ON CONFLICTcommand, but are not one of the selected arbiter indexes (Tom Lane)Such a case should raise a normal constraint-violation error, but it got into an infinite loop instead.
Fix
INSERT ... ON CONFLICTto not fail if the target table has a unique index on OID (Tom Lane)Make the
inetandcidrdata types properly reject IPv6 addresses with too many colon-separated fields (Tom Lane)Prevent crash in
close_ps()(thepoint##lsegoperator) for NaN input coordinates (Tom Lane)Make it return NULL instead of crashing.
Avoid possible crash in
pg_get_expr()when inconsistent values are passed to it (Michael Paquier, Thomas Munro)Fix several one-byte buffer over-reads in
to_number()(Peter Eisentraut)In several cases the
to_number()function would read one more character than it should from the input string. There is a small chance of a crash, if the input happens to be adjacent to the end of memory.Do not run the planner on the query contained in
CREATE MATERIALIZED VIEWorCREATE TABLE ASwhenWITH NO DATAis specified (Michael Paquier, Tom Lane)This avoids some unnecessary failure conditions, for example if a stable function invoked by the materialized view depends on a table that doesn't exist yet.
Avoid unsafe intermediate state during expensive paths through
heap_update()(Masahiko Sawada, Andres Freund)Previously, these cases locked the target tuple (by setting its XMAX) but did not WAL-log that action, thus risking data integrity problems if the page were spilled to disk and then a database crash occurred before the tuple update could be completed.
Fix hint bit update during WAL replay of row locking operations (Andres Freund)
The only known consequence of this problem is that row locks held by a prepared, but uncommitted, transaction might fail to be enforced after a crash and restart.
Avoid unnecessary “could not serialize access” errors when acquiring
FOR KEY SHARErow locks in serializable mode (Álvaro Herrera)Make sure “expanded” datums returned by a plan node are read-only (Tom Lane)
This avoids failures in some cases where the result of a lower plan node is referenced in multiple places in upper nodes. So far as core PostgreSQL is concerned, only array values returned by PL/pgSQL functions are at risk; but extensions might use expanded datums for other things.
Avoid crash in
postgres -Cwhen the specified variable has a null string value (Michael Paquier)Prevent unintended waits for the receiver in WAL sender processes (Kyotaro Horiguchi)
Fix possible loss of large subtransactions in logical decoding (Petru-Florin Mihancea)
Fix failure of logical decoding when a subtransaction contains no actual changes (Marko Tiikkaja, Andrew Gierth)
Ensure that backends see up-to-date statistics for shared catalogs (Tom Lane)
The statistics collector failed to update the statistics file for shared catalogs after a request from a regular backend. This problem was partially masked because the autovacuum launcher regularly makes requests that did cause such updates; however, it became obvious with autovacuum disabled.
Avoid redundant writes of the statistics files when multiple backends request updates close together (Tom Lane, Tomas Vondra)
Avoid consuming a transaction ID during
VACUUM(Alexander Korotkov)Some cases in
VACUUMunnecessarily caused an XID to be assigned to the current transaction. Normally this is negligible, but if one is up against the XID wraparound limit, consuming more XIDs during anti-wraparound vacuums is a very bad thing.Prevent possible failure when vacuuming multixact IDs in an installation that has been pg_upgrade'd from pre-9.3 (Andrew Gierth, Álvaro Herrera)
The usual symptom of this bug is errors like “MultiXactId
NNNhas not been created yet -- apparent wraparound”.When a manual
ANALYZEspecifies a column list, don't reset the table'schanges_since_analyzecounter (Tom Lane)If we're only analyzing some columns, we should not prevent routine auto-analyze from happening for the other columns.
Fix
ANALYZE's overestimation ofn_distinctfor a unique or nearly-unique column with many null entries (Tom Lane)The nulls could get counted as though they were themselves distinct values, leading to serious planner misestimates in some types of queries.
Prevent autovacuum from starting multiple workers for the same shared catalog (Álvaro Herrera)
Normally this isn't much of a problem because the vacuum doesn't take long anyway; but in the case of a severely bloated catalog, it could result in all but one worker uselessly waiting instead of doing useful work on other tables.
Fix bug in b-tree mark/restore processing (Kevin Grittner)
This error could lead to incorrect join results or assertion failures in a merge join whose inner source node is a b-tree indexscan.
Avoid duplicate buffer lock release when abandoning a b-tree index page deletion attempt (Tom Lane)
This mistake prevented
VACUUMfrom completing in some cases involving corrupt b-tree indexes.Fix building of large (bigger than
shared_buffers) hash indexes (Tom Lane)The code path used for large indexes contained a bug causing incorrect hash values to be inserted into the index, so that subsequent index searches always failed, except for tuples inserted into the index after the initial build.
Prevent infinite loop in GiST index build for geometric columns containing NaN component values (Tom Lane)
Fix possible crash during a nearest-neighbor (
ORDER BYdistance) indexscan on acontrib/btree_gistindex on anintervalcolumn (Peter Geoghegan)Fix “PANIC: failed to add BRIN tuple” error when attempting to update a BRIN index entry (Álvaro Herrera)
Fix possible crash during background worker shutdown (Dmitry Ivanov)
Fix PL/pgSQL's handling of the
INTOclause withinIMPORT FOREIGN SCHEMAcommands (Tom Lane)Fix
contrib/btree_ginto handle the smallest possiblebigintvalue correctly (Peter Eisentraut)Teach libpq to correctly decode server version from future servers (Peter Eisentraut)
It's planned to switch to two-part instead of three-part server version numbers for releases after 9.6. Make sure that
PQserverVersion()returns the correct value for such cases.Fix ecpg's code for
unsigned long longarray elements (Michael Meskes)In pg_dump with both
-cand-Coptions, avoid emitting an unwantedCREATE SCHEMA publiccommand (David Johnston, Tom Lane)Improve handling of SIGTERM/control-C in parallel pg_dump and pg_restore (Tom Lane)
Make sure that the worker processes will exit promptly, and also arrange to send query-cancel requests to the connected backends, in case they are doing something long-running such as a
CREATE INDEX.Fix error reporting in parallel pg_dump and pg_restore (Tom Lane)
Previously, errors reported by pg_dump or pg_restore worker processes might never make it to the user's console, because the messages went through the master process, and there were various deadlock scenarios that would prevent the master process from passing on the messages. Instead, just print everything to
stderr. In some cases this will result in duplicate messages (for instance, if all the workers report a server shutdown), but that seems better than no message.Ensure that parallel pg_dump or pg_restore on Windows will shut down properly after an error (Kyotaro Horiguchi)
Previously, it would report the error, but then just sit until manually stopped by the user.
Make parallel pg_dump fail cleanly when run against a standby server (Magnus Hagander)
This usage is not supported unless
--no-synchronized-snapshotsis specified, but the error was not handled very well.Make pg_dump behave better when built without zlib support (Kyotaro Horiguchi)
It didn't work right for parallel dumps, and emitted some rather pointless warnings in other cases.
Make pg_basebackup accept
-Z 0as specifying no compression (Fujii Masao)Fix makefiles' rule for building AIX shared libraries to be safe for parallel make (Noah Misch)
Fix TAP tests and MSVC scripts to work when build directory's path name contains spaces (Michael Paquier, Kyotaro Horiguchi)
Be more predictable about reporting “statement timeout” versus “lock timeout” (Tom Lane)
On heavily loaded machines, the regression tests sometimes failed due to reporting “lock timeout” even though the statement timeout should have occurred first.
Make regression tests safe for Danish and Welsh locales (Jeff Janes, Tom Lane)
Change some test data that triggered the unusual sorting rules of these locales.
Update our copy of the timezone code to match IANA's tzcode release 2016c (Tom Lane)
This is needed to cope with anticipated future changes in the time zone data files. It also fixes some corner-case bugs in coping with unusual time zones.
Update time zone data files to tzdata release 2016f for DST law changes in Kemerovo and Novosibirsk, plus historical corrections for Azerbaijan, Belarus, and Morocco.