# Changes- Fix WAL-logging of truncation of relation free space maps and visibility maps (Pavan Deolasee, Heikki Linnakangas) It was possible for these files to not be correctly restored during crash recovery, or to be written incorrectly on a standby server. Bogus entries in a free space map could lead to attempts to access pages that have been truncated away from the relation itself, typically producing errors like "could not read block XXX: read only 0 of 8192 bytes". Checksum failures in the visibility map are also possible, if checksumming is enabled. Procedures for determining whether there is a problem and repairing it - Fix possible data corruption when pg_upgrade rewrites a relation visibility map into 9.6 format. On big-endian machines, bytes of the new visibility map were written in the wrong order, leading to a completely incorrect map. On Windows, the old map was read using text mode, leading to incorrect results if the map happened to contain consecutive bytes that matched a carriage return/line feed sequence. The latter error would almost always lead to a pg_upgrade failure due to the map file appearing to be the wrong length. If you are using a big-endian machine (many non-Intel architectures are big-endian) and have used pg_upgrade to upgrade from a pre-9.6 release, you should assume that all visibility maps are incorrect and need to be regenerated. It is sufficient to truncate each relation's visibility map with contrib/pg_visibility's pg_truncate_visibility_map() function.- Don't throw serialization errors for self-conflicting insertions in INSERT ... ON CONFLICT- Fix use-after-free hazard in execution of aggregate functions using DISTINCT This could lead to a crash or incorrect query results.- Fix incorrect handling of polymorphic aggregates used as window functions .The aggregate's transition function was told that its first argument and result were of the aggregate's output type, rather than the state type. This led to errors or crashes with polymorphic transition functions.- Fix COPY with a column name list from a table that has row-level security enabled - Fix EXPLAIN to emit valid XML when track_io_timing is on .Previously the XML output-format option produced syntactically invalid tags such as <I/O-Read-Time>. That is now rendered as <I-O-Read-Time>.- Fix statistics update for TRUNCATE in a prepared transaction- Fix bugs in merging inherited CHECK constraints while creating or altering a table.Allow identical CHECK constraints to be added to a parent and child table in either order. Prevent merging of a valid constraint from the parent table with a NOT VALID constraint on the child. Likewise, prevent merging of a NO INHERIT child constraint with an inherited constraint.- Show a sensible value in pg_settings.unit for min_wal_size and max_wal_size- Fix replacement of array elements in jsonb_set() If the target is an existing JSON array element, it got deleted instead of being replaced with a new value.- Avoid very-low-probability data corruption due to testing tuple visibility without holding buffer lock - Preserve commit timestamps across server restart. With track_commit_timestamp turned on, old commit timestamps became inaccessible after a clean server restart.- Fix logical WAL decoding to work properly when a subtransaction's WAL output is large enough to spill to disk - Fix dangling-pointer problem in logical WAL decoding- Round shared-memory allocation request to a multiple of the actual huge page size when attempting to use huge pages on Linux - This avoids possible failures during munmap() on systems with atypical default huge page sizes. Except in crash-recovery cases, there were no ill effects other than a log message. Don't try to share SSL contexts across multiple connections in libpq . This led to assorted corner-case bugs, particularly when trying to use different SSL parameters for different connections.- Avoid corner-case memory leak in libpq . The reported problem involved leaking an error report during PQreset(), but there might be related cases.- In pg_upgrade, check library loadability in name order .This is a workaround to deal with cross-extension dependencies from language transform modules to their base language and data type modules.- Fix pg_upgrade to work correctly for extensions containing index access methods ( To allow this, the server has been extended to support ALTER EXTENSION ADD/DROP ACCESS METHOD. That functionality should have been included in the original patch to support dynamic creation of access methods, but it was overlooked.- Improve error reporting in pg_upgrade's file copying/linking/rewriting steps - Fix pg_dump to work against pre-7.4 servers - Disallow specifying both --source-server and --source-target options to pg_rewind- Make pg_rewind turn off synchronous_commit in its session on the source server.This allows pg_rewind to work even when the source server is using synchronous replication that is not working for some reason.- In pg_xlogdump, retry opening new WAL segments when using --follow option. This allows for a possible delay in the server's creation of the next segment.- Fix contrib/pg_visibility to report the correct TID for a corrupt tuple that has been the subject of a rolled-back update (Tom Lane)- Fix makefile dependencies so that parallel make of PL/Python by itself will succeed reliably (Pavel Raiskup)- Update time zone data files to tzdata release 2016h for DST law changes in Palestine and Turkey, plus historical corrections for Turkey and some regions of Russia. Switch to numeric abbreviations for some time zones in Antarctica, the former Soviet Union, and Sri Lanka.