|
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>E.1. Release 12.4</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /><link rel="prev" href="release.html" title="Appendix E. Release Notes" /><link rel="next" href="release-12-3.html" title="E.2. Release 12.3" /></head><body><div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">E.1. Release 12.4</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="release.html" title="Appendix E. Release Notes">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="release.html" title="Appendix E. Release Notes">Up</a></td><th width="60%" align="center">Appendix E. Release Notes</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 12.4 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="release-12-3.html" title="E.2. Release 12.3">Next</a></td></tr></table><hr></hr></div><div class="sect1" id="RELEASE-12-4"><div class="titlepage"><div><div><h2 class="title" style="clear: both">E.1. Release 12.4</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="sect2"><a href="release-12-4.html#id-1.11.6.5.4">E.1.1. Migration to Version 12.4</a></span></dt><dt><span class="sect2"><a href="release-12-4.html#id-1.11.6.5.5">E.1.2. Changes</a></span></dt></dl></div><p><strong>Release date: </strong>2020-08-13</p><p>
- This release contains a variety of fixes from 12.3.
- For information about new features in major release 12, see
- <a class="xref" href="release-12.html" title="E.5. Release 12">Section E.5</a>.
- </p><div class="sect2" id="id-1.11.6.5.4"><div class="titlepage"><div><div><h3 class="title">E.1.1. Migration to Version 12.4</h3></div></div></div><p>
- A dump/restore is not required for those running 12.X.
- </p><p>
- However, if you are upgrading from a version earlier than 12.2,
- see <a class="xref" href="release-12-2.html" title="E.3. Release 12.2">Section E.3</a>.
- </p></div><div class="sect2" id="id-1.11.6.5.5"><div class="titlepage"><div><div><h3 class="title">E.1.2. Changes</h3></div></div></div><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><p>
- Set a secure <code class="varname">search_path</code> in logical replication
- walsenders and apply workers (Noah Misch)
- </p><p>
- A malicious user of either the publisher or subscriber database
- could potentially cause execution of arbitrary SQL code by the role
- running replication, which is often a superuser. Some of the risks
- here are equivalent to those described in CVE-2018-1058, and are
- mitigated in this patch by ensuring that the replication sender and
- receiver execute with empty <code class="varname">search_path</code> settings.
- (As with CVE-2018-1058, that change might cause problems for
- under-qualified names used in replicated tables' DDL.) Other risks
- are inherent in replicating objects that belong to untrusted roles;
- the most we can do is document that there is a hazard to consider.
- (CVE-2020-14349)
- </p></li><li class="listitem"><p>
- Make contrib modules' installation scripts more secure (Tom Lane)
- </p><p>
- Attacks similar to those described in CVE-2018-1058 could be carried
- out against an extension installation script, if the attacker can
- create objects in either the extension's target schema or the schema
- of some prerequisite extension. Since extensions often require
- superuser privilege to install, this can open a path to obtaining
- superuser privilege. To mitigate this risk, be more careful about
- the <code class="varname">search_path</code> used to run an installation
- script; disable <code class="varname">check_function_bodies</code> within the
- script; and fix catalog-adjustment queries used in some contrib
- modules to ensure they are secure. Also provide documentation to
- help third-party extension authors make their installation scripts
- secure. This is not a complete solution; extensions that depend on
- other extensions can still be at risk if installed carelessly.
- (CVE-2020-14350)
- </p></li><li class="listitem"><p>
- Fix edge cases in partition pruning (Etsuro Fujita, Dmitry Dolgov)
- </p><p>
- When there are multiple partition key columns, generation of pruning
- tests could misbehave if some columns had no
- constraining <code class="literal">WHERE</code> clauses or multiple
- constraining clauses. This could lead to server crashes, incorrect
- query results, or assertion failures.
- </p></li><li class="listitem"><p>
- Fix construction of parameterized BitmapAnd and BitmapOr index scans
- on the inside of partition-wise nestloop joins (Tom Lane)
- </p><p>
- A plan in which such a scan needed to use a value from the outside
- of the join would usually crash at execution.
- </p></li><li class="listitem"><p>
- 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)
- </p></li><li class="listitem"><p>
- In logical replication walsender, fix failure to send feedback
- messages after sending a keepalive message (Álvaro Herrera)
- </p><p>
- This is a relatively minor problem when using built-in logical
- replication, because the built-in walreceiver will send a feedback
- reply (which clears the incorrect state) fairly frequently anyway.
- But with some other replication systems, such
- as <span class="application">pglogical</span>, it causes significant
- performance issues.
- </p></li><li class="listitem"><p>
- Fix firing of column-specific <code class="literal">UPDATE</code> triggers in
- logical replication subscribers (Tom Lane)
- </p><p>
- 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.
- </p></li><li class="listitem"><p>
- Update oldest xmin and LSN values
- during <code class="function">pg_replication_slot_advance()</code> (Michael
- Paquier)
- </p><p>
- 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.
- </p></li><li class="listitem"><p>
- Fix slow execution of <code class="function">ts_headline()</code> (Tom Lane)
- </p><p>
- The phrase-search fix added in our previous set of minor releases
- could cause <code class="function">ts_headline()</code> to take unreasonable
- amounts of time for long documents; to make matters worse, the query
- was not cancellable within the troublesome loop.
- </p></li><li class="listitem"><p>
- Ensure the <code class="function">repeat()</code> function can be interrupted
- by query cancel (Joe Conway)
- </p></li><li class="listitem"><p>
- Fix <code class="function">pg_current_logfile()</code> to not include a
- carriage return (<code class="literal">\r</code>) in its result on Windows
- (Tom Lane)
- </p></li><li class="listitem"><p>
- Ensure that <code class="function">pg_read_file()</code> and related
- functions read until EOF is reached (Joe Conway)
- </p><p>
- Previously, if not given a specific data length to read, these
- functions would stop at whatever file length was reported
- by <code class="function">stat()</code>. That's unhelpful for pipes and
- other sorts of virtual files.
- </p></li><li class="listitem"><p>
- Forbid numeric <code class="literal">NaN</code> values in <code class="type">jsonpath</code>
- computations (Alexander Korotkov)
- </p><p>
- Neither SQL nor JSON have the concept of <code class="literal">NaN</code>
- (not-a-number), but the <code class="type">jsonpath</code> code attempted to
- allow such values anyway. This necessarily leads to nonstandard
- behavior, so it seems better to reject such values at the outset.
- </p></li><li class="listitem"><p>
- Handle single <code class="literal">Inf</code> or <code class="literal">NaN</code>
- inputs correctly in floating-point aggregates (Tom Lane)
- </p><p>
- The affected aggregates are
- <code class="function">corr()</code>,
- <code class="function">covar_pop()</code>,
- <code class="function">regr_intercept()</code>,
- <code class="function">regr_r2()</code>,
- <code class="function">regr_slope()</code>,
- <code class="function">regr_sxx()</code>,
- <code class="function">regr_sxy()</code>,
- <code class="function">regr_syy()</code>,
- <code class="function">stddev_pop()</code>, and
- <code class="function">var_pop()</code>.
- The correct answer in such cases is <code class="literal">NaN</code>, but an
- algorithmic change introduced in <span class="productname">PostgreSQL</span>
- v12 had caused these aggregates to produce zero instead.
- </p></li><li class="listitem"><p>
- Fix mis-handling of <code class="literal">NaN</code> inputs during parallel
- aggregation on <code class="type">numeric</code>-type columns (Tom Lane)
- </p><p>
- If some partial aggregation workers found only <code class="literal">NaN</code>s
- while others found only non-<code class="literal">NaN</code>s, the results
- were combined incorrectly, possibly leading to the wrong overall
- result (i.e., not <code class="literal">NaN</code> when it should be).
- </p></li><li class="listitem"><p>
- Reject time-of-day values greater than 24 hours (Tom Lane)
- </p><p>
- The intention of the datetime input code is to
- allow <span class="quote">“<span class="quote">24:00:00</span>”</span> or
- equivalently <span class="quote">“<span class="quote">23:59:60</span>”</span>, but no larger value.
- However, the range check was miscoded so that it would
- accept <span class="quote">“<span class="quote">23:59:60.<em class="replaceable"><code>nnn</code></em></span>”</span> with
- nonzero fractional-second <em class="replaceable"><code>nnn</code></em>. In
- timestamp values this would result in wrapping into the first second
- of the next day. In <code class="type">time</code> and <code class="type">timetz</code>
- values, the stored value would actually be more than 24 hours,
- causing dump/reload failures and possibly other misbehavior.
- </p></li><li class="listitem"><p>
- Undo double-quoting of index names in <code class="command">EXPLAIN</code>'s
- non-text output formats (Tom Lane, Euler Taveira)
- </p></li><li class="listitem"><p>
- Fix <code class="command">EXPLAIN</code>'s accounting for resource usage,
- particularly buffer accesses, in parallel workers in a plan
- using <code class="literal">Gather Merge</code> nodes
- (Jehan-Guillaume de Rorthais)
- </p></li><li class="listitem"><p>
- Fix timing of constraint revalidation in <code class="command">ALTER
- TABLE</code> (David Rowley)
- </p><p>
- If <code class="command">ALTER TABLE</code> 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 <code class="literal">CHECK</code> constraints, it sometimes did things in
- the wrong order, leading to odd errors such as <span class="quote">“<span class="quote">could not read
- block 0 in file "base/nnnnn/nnnnn": read only 0 of 8192 bytes</span>”</span>.
- </p></li><li class="listitem"><p>
- Fix <code class="command">REINDEX CONCURRENTLY</code> to preserve the index's
- replication identity flag (Michael Paquier)
- </p><p>
- 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.
- </p></li><li class="listitem"><p>
- Work around incorrect not-null markings for
- <code class="structname">pg_subscription</code>.<code class="structfield">subslotname</code>
- and <code class="structname">pg_subscription_rel</code>.<code class="structfield">srsublsn</code>
- (Tom Lane)
- </p><p>
- 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 <code class="structfield">srsublsn</code> without
- checking to see if it's null; a crash from that is improbable but
- perhaps not impossible.
- </p></li><li class="listitem"><p>
- Cope with <code class="literal">LATERAL</code> references in restriction
- clauses attached to an un-flattened sub-<code class="literal">SELECT</code> in
- the <code class="literal">FROM</code> clause (Tom Lane)
- </p><p>
- This oversight could result in assertion failures or crashes at
- query execution.
- </p></li><li class="listitem"><p>
- Use the query-specified collation for operators invoked during
- selectivity estimation (Tom Lane)
- </p><p>
- 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.
- </p></li><li class="listitem"><p>
- Avoid believing that a never-analyzed foreign table has zero tuples
- (Tom Lane)
- </p><p>
- This primarily affected the planner's estimate of the number of
- groups that would be obtained by <code class="literal">GROUP BY</code>.
- </p></li><li class="listitem"><p>
- Remove bogus warning about <span class="quote">“<span class="quote">leftover placeholder tuple</span>”</span>
- in BRIN index de-summarization (Álvaro Herrera)
- </p><p>
- The case can occur legitimately after a cancelled vacuum, so warning
- about it is overly noisy.
- </p></li><li class="listitem"><p>
- Fix selection of tablespaces for <span class="quote">“<span class="quote">shared fileset</span>”</span>
- temporary files (Magnus Hagander, Tom Lane)
- </p><p>
- If <code class="varname">temp_tablespaces</code> is empty or explicitly names
- the database's primary tablespace, such files got placed into
- the <code class="literal">pg_default</code> tablespace rather than the
- database's primary tablespace as expected.
- </p></li><li class="listitem"><p>
- Fix corner-case error in masking of SP-GiST index pages during WAL
- consistency checking (Alexander Korotkov)
- </p><p>
- This could cause false failure reports
- when <code class="varname">wal_consistency_checking</code> is enabled.
- </p></li><li class="listitem"><p>
- Improve error handling in the server's <code class="filename">buffile</code>
- module (Thomas Munro)
- </p><p>
- 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.
- </p></li><li class="listitem"><p>
- Fix conflict-checking anomalies in <code class="literal">SERIALIZABLE</code>
- isolation mode (Peter Geoghegan)
- </p><p>
- 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.
- </p></li><li class="listitem"><p>
- Avoid repeated marking of dead btree index entries as dead (Masahiko
- Sawada)
- </p><p>
- While functionally harmless, this led to useless WAL traffic when
- checksums are enabled or <code class="varname">wal_log_hints</code> is on.
- </p></li><li class="listitem"><p>
- Fix checkpointer process to discard file sync requests
- when <code class="varname">fsync</code> is off (Heikki Linnakangas)
- </p><p>
- Such requests are treated as no-ops if <code class="varname">fsync</code> 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 <code class="varname">fsync</code> is later
- re-enabled.
- </p></li><li class="listitem"><p>
- Avoid trouble during cleanup of a non-exclusive backup when JIT
- compilation has been activated during the backup (Robert Haas)
- </p></li><li class="listitem"><p>
- Fix failure of some code paths to acquire the correct lock before
- modifying <code class="filename">pg_control</code> (Nathan Bossart, Fujii
- Masao)
- </p><p>
- This oversight could allow <code class="filename">pg_control</code> to be
- written out with an inconsistent checksum, possibly causing trouble
- later, including inability to restart the database if it crashed
- before the next <code class="filename">pg_control</code> update.
- </p></li><li class="listitem"><p>
- Fix errors in <code class="function">currtid()</code>
- and <code class="function">currtid2()</code> (Michael Paquier)
- </p><p>
- 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 <span class="quote">“<span class="quote">could
- not open file</span>”</span> when applied to a relation having no storage.
- </p></li><li class="listitem"><p>
- Avoid calling <code class="function">elog()</code>
- or <code class="function">palloc()</code> while holding a spinlock (Michael
- Paquier, Tom Lane)
- </p><p>
- 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.
- </p></li><li class="listitem"><p>
- Fix assertion in logical replication subscriber to allow use
- of <code class="literal">REPLICA IDENTITY FULL</code> (Euler Taveira)
- </p><p>
- This was just an incorrect assertion, so it has no impact on
- standard production builds.
- </p></li><li class="listitem"><p>
- Ensure that <span class="application">libpq</span> continues to try to
- read from the database connection socket after a write failure
- (Tom Lane)
- </p><p>
- 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 <span class="application">libpq</span> to continue trying to
- send <code class="command">COPY</code> data indefinitely after a mid-transfer
- loss of connection, rather than reporting failure to the application.
- </p></li><li class="listitem"><p>
- Fix bugs in <span class="application">libpq</span>'s management of GSS
- encryption state (Tom Lane)
- </p><p>
- 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.
- </p></li><li class="listitem"><p>
- Fix <span class="application">ecpg</span> crash with <code class="type">bytea</code>
- and cursor variables (Jehan-Guillaume de Rorthais)
- </p></li><li class="listitem"><p>
- Report out-of-disk-space errors properly
- in <span class="application">pg_dump</span>
- and <span class="application">pg_basebackup</span> (Justin Pryzby, Tom
- Lane, Álvaro Herrera)
- </p><p>
- Some code paths could produce silly reports like <span class="quote">“<span class="quote">could not
- write file: Success</span>”</span>.
- </p></li><li class="listitem"><p>
- Make <span class="application">pg_restore</span> cope with
- data-offset-less custom-format archive files when it needs to
- restore data items out of order (David Gilman, Tom Lane)
- </p><p>
- <span class="application">pg_dump</span> 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.
- </p></li><li class="listitem"><p>
- Fix parallel restore of tables having both table-level privileges
- and per-column privileges (Tom Lane)
- </p><p>
- 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 <span class="quote">“<span class="quote">tuple concurrently updated</span>”</span> 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 <span class="application">pg_dump</span> to ensure that the
- problem will not recur.
- </p></li><li class="listitem"><p>
- Ensure that <span class="application">pg_upgrade</span> runs
- with <code class="varname">vacuum_defer_cleanup_age</code> set to zero in the
- target cluster (Bruce Momjian)
- </p><p>
- If the target cluster's configuration has been modified to
- set <code class="varname">vacuum_defer_cleanup_age</code> 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.
- </p></li><li class="listitem"><p>
- Fix <span class="application">pg_recvlogical</span> to drain pending
- messages before exiting (Noah Misch)
- </p><p>
- 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 <span class="application">pg_recvlogical</span>
- wants to consume.
- </p></li><li class="listitem"><p>
- Fix <span class="application">pg_rewind</span>'s handling of just-deleted
- files in the source data directory (Justin Pryzby, Michael Paquier)
- </p><p>
- When working with an on-line source database, concurrent file
- deletions are possible, but <span class="application">pg_rewind</span>
- would get confused if deletion happened between seeing a file's
- directory entry and examining it with <code class="function">stat()</code>.
- </p></li><li class="listitem"><p>
- Make <span class="application">pg_test_fsync</span> use binary I/O mode on
- Windows (Michael Paquier)
- </p><p>
- Previously it wrote the test file in text mode, which is not an
- accurate reflection of <span class="productname">PostgreSQL</span>'s
- actual usage.
- </p></li><li class="listitem"><p>
- Fix <code class="filename">contrib/amcheck</code> to not complain about
- deleted index pages that are empty (Alexander Korotkov)
- </p><p>
- This state of affairs is normal during WAL replay.
- </p></li><li class="listitem"><p>
- Fix failure to initialize local state correctly
- in <code class="filename">contrib/dblink</code> (Joe Conway)
- </p><p>
- With the right combination of circumstances, this could lead to
- <code class="function">dblink_close()</code> issuing an unexpected
- remote <code class="command">COMMIT</code>.
- </p></li><li class="listitem"><p>
- Fix <code class="filename">contrib/pgcrypto</code>'s misuse
- of <code class="function">deflate()</code> (Tom Lane)
- </p><p>
- The <code class="function">pgp_sym_encrypt</code> functions could produce
- incorrect compressed data due to mishandling
- of <span class="application">zlib</span>'s API requirements. We have no
- reports of this error manifesting with
- stock <span class="application">zlib</span>, but it can be seen when using
- IBM's <span class="application">zlibNX</span> implementation.
- </p></li><li class="listitem"><p>
- Fix corner case in decompression logic
- in <code class="filename">contrib/pgcrypto</code>'s
- <code class="function">pgp_sym_decrypt</code> functions (Kyotaro Horiguchi,
- Michael Paquier)
- </p><p>
- A compressed stream can validly end with an empty packet, but the
- decompressor failed to handle this and would complain about corrupt
- data.
- </p></li><li class="listitem"><p>
- Support building our NLS code with Microsoft Visual Studio 2015 or
- later (Juan José Santamaría Flecha, Davinder Singh,
- Amit Kapila)
- </p></li><li class="listitem"><p>
- Avoid possible failure of our MSVC install script when there is a
- file named <code class="filename">configure</code> several levels above the
- source code tree (Arnold Müller)
- </p><p>
- This could confuse some logic that looked
- for <code class="filename">configure</code> to identify the top level of the
- source tree.
- </p></li></ul></div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="release.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="release.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="release-12-3.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Appendix E. Release Notes </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> E.2. Release 12.3</td></tr></table></div></body></html>
|