diff --git a/doc/src/sgml/release-12.sgml b/doc/src/sgml/release-12.sgml index d75df12f06..de6855f6ef 100644 --- a/doc/src/sgml/release-12.sgml +++ b/doc/src/sgml/release-12.sgml @@ -1,6 +1,1159 @@ + + Release 12.4 + + + Release date: + 2020-08-13 + + + + This release contains a variety of fixes from 12.3. + For information about new features in major release 12, see + . + + + + Migration to Version 12.4 + + + A dump/restore is not required for those running 12.X. + + + + However, if you are upgrading from a version earlier than 12.2, + see . + + + + + Changes + + + + + + + Fix edge cases in partition pruning (Etsuro Fujita, Dmitry Dolgov) + + + + When there are multiple partition key columns, generation of pruning + tests could misbehave if some columns had no + constraining WHERE clauses or multiple + constraining clauses. This could lead to server crashes, incorrect + query results, or assertion failures. + + + + + + + Fix construction of parameterized BitmapAnd and BitmapOr index scans + on the inside of partition-wise nestloop joins (Tom Lane) + + + + A plan in which such a scan needed to use a value from the outside + of the join would usually crash at execution. + + + + + + + Fix incorrect plan execution when a partitioned table is subject to + both static and run-time partition pruning in the same query, and a + new partition is added concurrently with the query (Amit Langote, + Tom Lane) + + + + + + + Fix firing of column-specific UPDATE triggers in + logical replication subscribers (Tom Lane) + + + + The code neglected to account for the possibility of column numbers + being different between the publisher and subscriber tables, so that + if those were indeed different, wrong decisions might be made about + which triggers to fire. + + + + + + + Update oldest xmin and LSN values + during pg_replication_slot_advance() (Michael + Paquier) + + + + This function previously failed to do that, possibly preventing + resource cleanup (such as removal of no-longer-needed WAL segments) + after manual advancement of a replication slot. + + + + + + + Fix slow execution of ts_headline() (Tom Lane) + + + + The phrase-search fix added in our previous set of minor releases + could cause ts_headline() to take unreasonable + amounts of time for long documents; to make matters worse, the query + was not cancellable within the troublesome loop. + + + + + + + Ensure the repeat() function can be interrupted + by query cancel (Joe Conway) + + + + + + + Fix pg_current_logfile() to not include a + carriage return (\r) in its result on Windows + (Tom Lane) + + + + + + + Ensure that pg_read_file() and related + functions read until EOF is reached (Joe Conway) + + + + Previously, if not given a specific data length to read, these + functions would stop at whatever file length was reported + by stat(). That's unhelpful for pipes and + other sorts of virtual files. + + + + + + + Forbid numeric NaN values in jsonpath + computations (Alexander Korotkov) + + + + Neither SQL nor JSON have the concept of NaN + (not-a-number), but the jsonpath code attempted to + allow such values anyway. This necessarily leads to nonstandard + behavior, so it seems better to reject such values at the outset. + + + + + + + Handle single Inf or NaN + inputs correctly in floating-point aggregates (Tom Lane) + + + + The affected aggregates are + corr(), + covar_pop(), + regr_intercept(), + regr_r2(), + regr_slope(), + regr_sxx(), + regr_sxy(), + regr_syy(), + stddev_pop(), and + var_pop(). + The correct answer in such cases is NaN, but an + algorithmic change introduced in PostgreSQL + v12 had caused these aggregates to produce zero instead. + + + + + + + Fix mis-handling of NaN inputs during parallel + aggregation on numeric-type columns (Tom Lane) + + + + If some partial aggregation workers found only NaNs + while others found only non-NaNs, the results + were combined incorrectly, possibly leading to the wrong overall + result (i.e., not NaN when it should be). + + + + + + + Reject time-of-day values greater than 24 hours (Tom Lane) + + + + The intention of the datetime input code is to + allow 24:00:00 or + equivalently 23:59:60, but no larger value. + However, the range check was miscoded so that it would + accept 23:59:60.nnn with + nonzero fractional-second nnn. In + timestamp values this would result in wrapping into the first second + of the next day. In time and timetz + values, the stored value would actually be more than 24 hours, + causing dump/reload failures and possibly other misbehavior. + + + + + + + Undo double-quoting of index names in EXPLAIN's + non-text output formats (Tom Lane, Euler Taveira) + + + + + + + Fix EXPLAIN's accounting for resource usage, + particularly buffer accesses, in parallel workers in a plan + using Gather Merge nodes + (Jehan-Guillaume de Rorthais) + + + + + + + Fix timing of constraint revalidation in ALTER + TABLE (David Rowley) + + + + If ALTER TABLE needs to fully rewrite the table's + contents (for example, due to change of a column's data type) and + also needs to scan the table to re-validate foreign keys + or CHECK constraints, it sometimes did things in + the wrong order, leading to odd errors such as could not read + block 0 in file "base/nnnnn/nnnnn": read only 0 of 8192 bytes. + + + + + + + Fix REINDEX CONCURRENTLY to preserve the index's + replication identity flag (Michael Paquier) + + + + Previously, reindexing a table's replica identity index caused the + setting to be lost, preventing old tuple values from being included + in future logical-decoding output. + + + + + + + Work around incorrect not-null markings for + pg_subscription.subslotname + and pg_subscription_rel.srsublsn + (Tom Lane) + + + + The bootstrap catalog data incorrectly marks these two catalog + columns as always non-null. There's no easy way to correct that + mistake in existing installations (though v13 and later will have + the correct markings). The main place that depends on that marking + being correct is JIT-enabled tuple deconstruction, so teach it to + explicitly ignore the marking for these two columns. Also adjust + some C code that accessed srsublsn without + checking to see if it's null; a crash from that is improbable but + perhaps not impossible. + + + + + + + Cope with LATERAL references in restriction + clauses attached to an un-flattened sub-SELECT in + the FROM clause (Tom Lane) + + + + This oversight could result in assertion failures or crashes at + query execution. + + + + + + + Use the query-specified collation for operators invoked during + selectivity estimation (Tom Lane) + + + + Previously, the collation of the underlying database column was + used. But using the query's collation is arguably more correct. + More importantly, now that we have nondeterministic collations, + there are cases where an operator will fail outright if given a + nondeterministic collation. We don't want planning to fail in cases + where the query itself would work, so this means that we must use + the query's collation when invoking operators for estimation + purposes. + + + + + + + Avoid believing that a never-analyzed foreign table has zero tuples + (Tom Lane) + + + + This primarily affected the planner's estimate of the number of + groups that would be obtained by GROUP BY. + + + + + + + Remove bogus warning about leftover placeholder tuple + in BRIN index de-summarization (Álvaro Herrera) + + + + The case can occur legitimately after a cancelled vacuum, so warning + about it is overly noisy. + + + + + + + Fix selection of tablespaces for shared fileset + temporary files (Magnus Hagander, Tom Lane) + + + + If temp_tablespaces is empty or explicitly names + the database's primary tablespace, such files got placed into + the pg_default tablespace rather than the + database's primary tablespace as expected. + + + + + + + Fix corner-case error in masking of SP-GiST index pages during WAL + consistency checking (Alexander Korotkov) + + + + This could cause false failure reports + when wal_consistency_checking is enabled. + + + + + + + Improve error handling in the server's buffile + module (Thomas Munro) + + + + Fix some cases where I/O errors were indistinguishable from reaching + EOF, or were not reported at all. Also add details such as block + numbers and byte counts where appropriate. + + + + + + + Fix conflict-checking anomalies in SERIALIZABLE + isolation mode (Peter Geoghegan) + + + + If a concurrently-inserted tuple was updated by a different + concurrent transaction, and neither tuple version was visible to the + current transaction's snapshot, serialization conflict checking + could draw the wrong conclusions about whether the tuple was relevant + to the results of the current transaction. This could allow a + serializable transaction to commit when it should have failed with a + serialization error. + + + + + + + Avoid repeated marking of dead btree index entries as dead (Masahiko + Sawada) + + + + While functionally harmless, this led to useless WAL traffic when + checksums are enabled or wal_log_hints is on. + + + + + + + Fix checkpointer process to discard file sync requests + when fsync is off (Heikki Linnakangas) + + + + Such requests are treated as no-ops if fsync is + off, but we forgot to remove them from the checkpointer's table of + pending actions. This would lead to bloat of that table, as well as + possible assertion failures if fsync is later + re-enabled. + + + + + + + Avoid trouble during cleanup of a non-exclusive backup when JIT + compilation has been activated during the backup (Robert Haas) + + + + + + + Fix failure of some code paths to acquire the correct lock before + modifying pg_control (Nathan Bossart, Fujii + Masao) + + + + This oversight could allow pg_control to be + written out with an inconsistent checksum, possibly causing trouble + later, including inability to restart the database if it crashed + before the next pg_control update. + + + + + + + Fix errors in currtid() + and currtid2() (Michael Paquier) + + + + These functions (which are undocumented and used only by ancient + versions of the ODBC driver) contained coding errors that could + result in crashes, or in confusing error messages such as could + not open file when applied to a relation having no storage. + + + + + + + Avoid calling elog() + or palloc() while holding a spinlock (Michael + Paquier, Tom Lane) + + + + Logic associated with replication slots had several violations of + this coding rule. While the odds of trouble are quite low, an error + in the called function would lead to a stuck spinlock. + + + + + + + Fix assertion in logical replication subscriber to allow use + of REPLICA IDENTITY FULL (Euler Taveira) + + + + This was just an incorrect assertion, so it has no impact on + standard production builds. + + + + + + + Ensure that libpq continues to try to + read from the database connection socket after a write failure + (Tom Lane) + + + + This is important not only to ensure that we collect any final error + message from a dying server process, but because we do not consider + the connection lost until we see a read failure. This oversight + allowed libpq to continue trying to + send COPY data indefinitely after a mid-transfer + loss of connection, rather than reporting failure to the application. + + + + + + + Fix bugs in libpq's management of GSS + encryption state (Tom Lane) + + + + A connection using GSS encryption could freeze up when attempting to + reset it after a server restart, or when moving on to the next one of + a list of candidate servers. + + + + + + + Fix ecpg crash with bytea + and cursor variables (Jehan-Guillaume de Rorthais) + + + + + + + Report out-of-disk-space errors properly + in pg_dump + and pg_basebackup (Justin Pryzby, Tom + Lane, Álvaro Herrera) + + + + Some code paths could produce silly reports like could not + write file: Success. + + + + + + + Make pg_restore cope with + data-offset-less custom-format archive files when it needs to + restore data items out of order (David Gilman, Tom Lane) + + + + pg_dump will produce such files if it + cannot seek its output (for example, if the output is piped to + something). This fix primarily improves the ability to do a + parallel restore from such a file. + + + + + + + Fix parallel restore of tables having both table-level privileges + and per-column privileges (Tom Lane) + + + + The table-level privilege grants have to be applied first, but a + parallel restore did not reliably order them that way; this could + lead to tuple concurrently updated errors, or to + disappearance of some per-column privilege grants. The fix for this + is to include dependency links between such entries in the archive + file, meaning that a new dump has to be taken with a + corrected pg_dump to ensure that the + problem will not recur. + + + + + + + Ensure that pg_upgrade runs + with vacuum_defer_cleanup_age set to zero in the + target cluster (Bruce Momjian) + + + + If the target cluster's configuration has been modified to + set vacuum_defer_cleanup_age to a nonzero value, + that prevented freezing of the system catalogs from working properly, + which caused the upgrade to fail in confusing ways. Ensure that any + such setting is overridden for the duration of the upgrade. + + + + + + + Fix pg_recvlogical to drain pending + messages before exiting (Noah Misch) + + + + Without this, the replication sender might detect a send failure and + exit without making the expected final update to the replication + slot's LSN position. That led to re-transmitting data after the + next connection. It was also possible to miss error messages sent + after the last data that pg_recvlogical + wants to consume. + + + + + + + Fix pg_rewind's handling of just-deleted + files in the source data directory (Justin Pryzby, Michael Paquier) + + + + When working with an on-line source database, concurrent file + deletions are possible, but pg_rewind + would get confused if deletion happened between seeing a file's + directory entry and examining it with stat(). + + + + + + + Make pg_test_fsync use binary I/O mode on + Windows (Michael Paquier) + + + + Previously it wrote the test file in text mode, which is not an + accurate reflection of PostgreSQL's + actual usage. + + + + + + + Fix contrib/amcheck to not complain about + deleted index pages that are empty (Alexander Korotkov) + + + + This state of affairs is normal during WAL replay. + + + + + + + Fix failure to initialize local state correctly + in contrib/dblink (Joe Conway) + + + + With the right combination of circumstances, this could lead to + dblink_close() issuing an unexpected + remote COMMIT. + + + + + + + Fix contrib/pgcrypto's misuse + of deflate() (Tom Lane) + + + + The pgp_sym_encrypt functions could produce + incorrect compressed data due to mishandling + of zlib's API requirements. We have no + reports of this error manifesting with + stock zlib, but it can be seen when using + IBM's zlibNX implementation. + + + + + + + Fix corner case in decompression logic + in contrib/pgcrypto's + pgp_sym_decrypt functions (Kyotaro Horiguchi, + Michael Paquier) + + + + A compressed stream can validly end with an empty packet, but the + decompressor failed to handle this and would complain about corrupt + data. + + + + + + + Use POSIX-standard strsignal() in place of the + BSD-ish sys_siglist[] (Tom Lane) + + + + This avoids build failures with very recent versions + of glibc. + + + + + + + Support building our NLS code with Microsoft Visual Studio 2015 or + later (Juan José Santamaría Flecha, Davinder Singh, + Amit Kapila) + + + + + + + Avoid possible failure of our MSVC install script when there is a + file named configure several levels above the + source code tree (Arnold Müller) + + + + This could confuse some logic that looked + for configure to identify the top level of the + source tree. + + + + + + + + Release 12.3