PostgreSQL 13.1, 12.5, 11.10, 10.15, 9.6.20, and 9.5.24
Security Issues
* CVE-2020-25695: Multiple features escape "security restricted operation" sandbox
* CVE-2020-25694: Reconnection can downgrade connection security settings
* CVE-2020-25696: psql's \gset allows overwriting specially treated variables
Bug Fixes and Improvements
This update also fixes over 65 bugs that were reported in the last several months. Some of these issues only affect version 13, but may also apply to other supported versions.
Some of these fixes include:
Fix a breakage in the replication protocol by ensuring that two "command completion" events are expected for START_REPLICATION.
Ensure fsync is called on the SLRU caches that PostgreSQL maintains. This prevents potential data loss due to an operating system crash.
Fix ALTER ROLE usage for users with the BYPASSRLS permission.
ALTER TABLE ONLY ... DROP EXPRESSION is disallowed on partitioned tables when there are child tables.
Ensure that ALTER TABLE ONLY ... ENABLE/DISABLE TRIGGER does not apply to child tables.
Fix for ALTER TABLE ... SET NOT NULL on partitioned tables to avoid a potential deadlock in parallel pg_restore.
Fix handling of expressions in CREATE TABLE LIKE with inheritance.
DROP INDEX CONCURRENTLY is disallowed on partitioned tables.
Allow LOCK TABLE to succeed on a self-referential view instead of throwing an error.
Several fixes around statistics collection and progress reporting for REINDEX CONCURRENTLY.
Ensure that GENERATED columns are updated when any columns they depend on are updated via a rule or an updatable view.
Support hash partitioning with text array columns as partition keys.
Allow the jsonpath .datetime() method to accept ISO 8601-format timestamps.
During a "smart" shutdown, ensure background processes are not terminated until all foreground client sessions are completed, fixing an issue that broke the processing of parallel queries.
Several fixes for the query planner and optimizer.
Ensure that data is de-toasted before being inserted into a BRIN index. This could manifest itself with errors like "missing chunk number 0 for toast value NNN". If you have seen a similar error in an existing BRIN index, you should be able to correct it by using REINDEX on the index.
Fix the output of EXPLAIN to have the correct XML tag nesting for incremental sort plans.
Several fixes for memory leaks, including ones involving RLS policies, using CALL with PL/pgSQL, SIGHUP processing a configuration parameter that cannot be applied without a restart, and an edge-case for index lookup for a partition.
libpq can now support arbitrary-length lines in the .pgpass file.
On Windows, psql now reads the output of a backtick command in text mode, not binary mode, so it can now properly handle newlines.
Fix how pg_dump, pg_restore, clusterdb, reindexdb, and vacuumdb use complex connection-string parameters.
When the \connect command of psql reuses connection parameters, ensure that all non-overridden parameters from a previous connection string are also re-used.
Ensure that pg_dump collects per-column information about extension configuration tables, avoiding crashes when specifying --inserts.
Ensure that parallel pg_restore processes foreign keys referencing partitioned tables in the correct order.
Several fixes for contrib/pgcrypto, including a memory leak fix.
PostgreSQL 12.4, 11.9, 10.14, 9.6.19, 9.5.23
Security Issues
CVE-2020-14349: Uncontrolled search path element in logical replication.
Versions Affected: 10 - 12.
The PostgreSQL search_path setting determines schemas searched for tables, functions, operators, etc. The CVE-2018-1058 fix caused most PostgreSQL-provided client applications to sanitize search_path, but logical replication continued to leave search_path unchanged. Users of a replication publisher or subscriber database can create objects in the public schema and harness them to execute arbitrary SQL functions under the identity running replication, often a superuser. Installations having adopted a documented secure schema usage pattern are not vulnerable.
The PostgreSQL project thanks Noah Misch for reporting this problem.
CVE-2020-14350: Uncontrolled search path element in CREATE EXTENSION.
Versions Affected: 9.5 - 12. The security team typically does not test unsupported versions, but this problem is quite old.
When a superuser runs certain CREATE EXTENSION statements, users may be able to execute arbitrary SQL functions under the identity of that superuser. The attacker must have permission to create objects in the new extension's schema or a schema of a prerequisite extension. Not all extensions are vulnerable.
In addition to correcting the extensions provided with PostgreSQL, the PostgreSQL Global Development Group is issuing guidance for third-party extension authors to secure their own work.
Bug Fixes and Improvements
This update also fixes over 50 bugs that were reported in the last several months. Some of these issues affect only version 12, but many affect all supported versions.
Some of these fixes include:
Fix edge cases in partition pruning involving multiple partition key columns with multiple or no constraining WHERE clauses.
Several fixes for query planning and execution involving partitions.
Fix for determining when to execute a column-specific UPDATE trigger on a logical replication subscriber.
pg_replication_slot_advance() now updates the oldest xmin and LSN values, as the failure to do this could prevent resources (e.g. WAL files) from being cleaned up.
Fix a performance regression in ts_headline().
Ensure that pg_read_file() and related functions read until EOF is reached, which fixes compatibility with pipes and other virtual files.
Forbid numeric NaN values in jsonpath computations, which do not exist in SQL nor JSON.
Several fixes for NaN inputs with aggregate functions. This fixes a change in PostgreSQL 12 where NaN values caused the following aggregates to emit values of 0 instead of NaN: corr(), covar_pop(), regr_intercept(), regr_r2(), regr_slope(), regr_sxx(), regr_sxy(), regr_syy(), stddev_pop(), and var_pop().
time and timetz values fractionally greater than 24:00:00 are now rejected.
Several fixes for EXPLAIN, including a fix for reporting resource usage when a plan uses parallel workers with "Gather Merge" nodes.
Fix timing of constraint revalidation in ALTER TABLE that could lead to odd errors.
Fix for REINDEX CONCURRENTLY that could prevent old values from being included in future logical decoding output.
Fix for LATERAL references that could potentially cause crashes during query execution.
Use the collation specified for a query when estimating operator costs
Fix conflict-checking anomalies in SERIALIZABLE transaction isolation mode.
Ensure checkpointer process discards file sync requests when fsync is off
Fix issue where pg_control could be written out with an inconsistent checksum, which could lead to the inability to restart the database if it crashed before the next pg_control update.
Ensure that libpq continues to try to read from the database connection socket after a write failure, as this allows the connection to collect any final error messages from the server.
Report out-of-disk-space errors properly in pg_dump and pg_basebackup
Several fixes for pg_restore, including a fix for parallel restore on tables that have both table-level and column-level privileges.
Fix for pg_upgrade to ensure it runs with vacuum_defer_cleanup_age set to 0.
Fix how pg_rewind handles just-deleted files in the source data directory
Fix failure to initialize local state correctly in contrib/dblink, which could lead to dblink_close() issuing an unexpected COMMIT on the remote server.
Change contrib/amcheck to not report about deleted index pages that are empty, as this is normal during WAL replay.
PostgreSQL 12.2, 11.7, 10.12, 9.6.17, 9.5.21, and 9.4.26
PostgreSQL 9.4 Now EOL
This is the last release for PostgreSQL 9.4, which will no longer receive security updates and bug fixes. PostgreSQL 9.4 introduced new features such as JSONB support, the ALTER SYSTEM command, the ability to stream logical changes to an output plugin, and more.
While we are very proud of this release, these features are also found in newer versions of PostgreSQL. Many of these features have also received improvements, and, per our versioning policy, it is time to retire PostgreSQL 9.4.
To receive continued support, we suggest that you make plans to upgrade to a newer, supported version of PostgreSQL. Please see the PostgreSQL versioning policy for more information.
Security Issues
CVE-2020-1720: ALTER ... DEPENDS ON EXTENSION is missing authorization checks.
Versions Affected: 9.6 - 12
The ALTER ... DEPENDS ON EXTENSION sub-commands do not perform authorization checks, which can allow an unprivileged user to drop any function, procedure, materialized view, index, or trigger under certain conditions. This attack is possible if an administrator has installed an extension and an unprivileged user can CREATE, or an extension owner either executes DROP EXTENSION predictably or can be convinced to execute DROP EXTENSION.
Bug Fixes and Improvements
This update also fixes over 75 bugs that were reported in the last several months. Some of these issues affect only version 12, but may also affect all supported versions.
Some of these fixes include:
Fix for partitioned tables with foreign-key references where TRUNCATE ... CASCADE would not remove all data. If you have previously used TRUNCATE ... CASCADE on a partitioned table with foreign-key references please see the "Updating" section for verification and cleanup steps.
Fix failure to add foreign key constraints to table with sub-partitions (aka a multi-level partitioned table). If you have previously used this functionality, you can fix it by either detaching and re-attaching the affected partition, or by dropping and re-adding the foreign key constraint to the parent table. You can find more information on how to perform these steps in the ALTER TABLE documentation.
Fix performance issue for partitioned tables introduced by the fix for CVE-2017-7484 that now allows the planner to use statistics on a child table for a column that the user is granted access to on the parent table when the query contains a leaky operator.
Several other fixes and changes for partitioned tables, including disallowing partition key expressions that return pseudo-types, such as RECORD.
Fix for logical replication subscribers for executing per-column UPDATE triggers.
Fix for several crashes and failures for logical replication subscribers and publishers.
Improve efficiency of logical replication with REPLICA IDENTITY FULL.
Ensure that calling pg_replication_slot_advance() on a physical replication slot will persist changes across restarts.
Several fixes for the walsender processes.
Improve performance of hash joins with very large inner relations.
Fix placement of "Subplans Removed" field in EXPLAIN output by placing it with its parent Append or MergeAppend plan.
Several fixes for parallel query plans.
Several fixes for query planner errors, including one that affected joins to single-row subqueries.
Several fixes for MCV extend statistics, including one for incorrect estimation for OR clauses.
Improve efficiency of parallel hash join on CPUs with many cores.
Ignore the CONCURRENTLY option when performing an index creation, drop, or reindex on a temporary table.
Fall back to non-parallel index builds when a parallelized CREATE INDEX has no free dynamic shared memory slots.
Several fixes for GiST & GIN indexes.
Fix possible crash in BRIN index operations with box, range and inet data types.
Fix support for BRIN hypothetical indexes.
Fix failure in ALTER TABLE when a column referenced in a GENERATED expression is added or changed in type earlier in the same ALTER TABLE statement.
Fix handling of multiple AFTER ROW triggers on a foreign table.
Fix off-by-one result for EXTRACT(ISOYEAR FROM timestamp) for BC dates.
Prevent unwanted lowercasing and truncation of RADIUS authentication parameters in the pg_hba.conf file.
Several fixes for GSSAPI support, including having libpq accept all GSS-related connection parameters even if the GSSAPI code is not compiled in.
Several fixes for pg_dump and pg_restore when run in parallel mode.
Fix crash with postgres_fdw when trying to execute a remote query on the remote server such as UPDATE remote_tab SET (x,y) = (SELECT ...).
Disallow NULL category values in the crosstab() function of contrib/tablefunc to prevent crashes.
Several fixes for Windows, including a race condition that could cause timing oddities with NOTIFY.
Several ecpg fixes.
Release 12:
General performance improvements, including:
* Optimizations to space utilization and read/write performance for B-tree indexes
* Partitioning performance enhancements, including improved query performance on tables with thousands of partitions, improved insertion performance with INSERT and COPY, and the ability to execute ALTER TABLE ATTACH PARTITION without blocking queries
* Automatic (but overridable) inlining of common table expressions (CTEs)
* Reduction of WAL overhead for creation of GiST, GIN, and SP-GiST indexes
* Support for covering GiST indexes, via the INCLUDE clause
* Multi-column most-common-value (MCV) statistics can be defined via CREATE STATISTICS, to support better plans for queries that test several non-uniformly-distributed columns
Enhancements to administrative functionality, including:
* REINDEX CONCURRENTLY can rebuild an index without blocking writes to its table
* pg_checksums can enable/disable page checksums (used for detecting data corruption) in an offline cluster
* Progress reporting statistics for CREATE INDEX, REINDEX, CLUSTER, VACUUM FULL, and pg_checksums
Support for the SQL/JSON path language
Stored generated columns
Nondeterministic ICU collations, enabling case-insensitive and accent-insensitive grouping and ordering
New authentication features, including:
* Encryption of TCP/IP connections when using GSSAPI authentication
* Discovery of LDAP servers using DNS SRV records
* Multi-factor authentication, using the clientcert=verify-full option combined with an additional authentication method in pg_hba.conf