This update fixes over 40 bugs that were reported in the last several months. The issues listed below affect PostgreSQL 14. Some of these issues may also affect other supported versions of PostgreSQL.
Included in this release:
Fix replay of CREATE DATABASE write-ahead log (WAL) records on standby servers when encountering a missing tablespace directory.
Add support for tablespaces that are plain directories instead of symbolic links to other directories.
Fix permission checks in CREATE INDEX to use the user's permissions. This fixes broken dump/restore scenarios that relied on the behavior prior to the fix for CVE-2022-1552.
In the extended query protocol, force an immediate commit after CREATE DATABASE and other commands that can't run in a transaction block.
Fix a race condition around checking transaction visibility that was more likely to happen when using synchronous replication.
Fix incorrect permission-checking code for extended statistics.
Fix extended statistics machinery to handle most common value (MCV)-type statistics on boolean-valued expressions.
Avoid planner core dump with constant = ANY(array) clauses when there are MCV-type extended statistics on the array variable.
Allow cancellation of ANALYZE while it is computing extended statistics.
Fix ALTER TABLE ... ENABLE/DISABLE TRIGGER to handle recursion for triggers on partitioned tables.
Reject ROW() expressions and functions in FROM that have more than 1600 columns.
Fix memory leak in logical replication subscribers.
Fix checks in logical replication of replica identity when the target table is partitioned.
Arrange to clean up after commit-time errors within SPI_commit(), rather than expecting callers to do that. This includes a fix for the same scenario in PL/Python, which had reported crashes on Python 3.11 and memory leaks on older versions of Python 3.
Improve handling in libpq of idle states in pipeline mode.
In the psql \watch command, echo a newline after cancellation with control-C.
Fix pg_upgrade to detect non-upgradable usages of functions accepting anyarray parameters.
Several postgres_fdw fixes, including prevention of batch insertions when there are WITH CHECK OPTION constraints present.
The PostgreSQL Global Development Group has released an update to all supported versions of PostgreSQL, including 14.3, 13.7, 12.11, 11.16, and 10.21. This release closes one security vulnerability and fixes over 50 bugs reported over the last three months.
CVE-2022-1552: Autovacuum, REINDEX, and others omit "security restricted operation" sandbox.
Versions Affected: 10 - 14. The security team typically does not test unsupported versions, but this problem is quite old.
Autovacuum, REINDEX, CREATE INDEX, REFRESH MATERIALIZED VIEW, CLUSTER, and pg_amcheck made incomplete efforts to operate safely when a privileged user is maintaining another user's objects. Those commands activated relevant protections too late or not at all. An attacker having permission to create non-temp objects in at least one schema could execute arbitrary SQL functions under a superuser identity.
While promptly updating PostgreSQL is the best remediation for most users, a user unable to do that can work around the vulnerability by disabling autovacuum, not manually running the above commands, and not restoring from output of the pg_dump command. Performance may degrade quickly under this workaround. VACUUM is safe, and all commands are fine when a trusted user owns the target object.
Bug Fixes and Improvements
This update fixes over 50 bugs that were reported in the last several months. The issues listed below affect PostgreSQL 14. Some of these issues may also affect other supported versions of PostgreSQL.
Included in this release:
Fix issue that could lead to corruption of GiST indexes on ltree columns. After upgrading, you will need to reindex any GiST indexes on ltree columns.
Column names in tuples produced by a whole-row variable (e.g. tbl.*) outside of a top-level of a SELECT list are now always associated with those of the associated named composite type, if there is one. The release notes detail a workaround if you depend on the previous behavior.
Fix incorrect rounding when extracting epoch values from interval types.
Prevent issues with calling pg_stat_get_replication_slot(NULL).
Fix incorrect output for types timestamptz and timetz in table_to_xmlschema().
Fix errors related to a planner issue that affected asynchronous remote queries.
Fix planner failure if a query using SEARCH or CYCLE features contains a duplicate common-table expression (WITH) name.
Fix ALTER FUNCTION to support changing a function's parallelism property and its SET-variable list in the same command.
Fix incorrect sorting of table rows when using CLUSTER on an index whose leading key is an expression.
Prevent data loss if a system crash occurs shortly after a sorted GiST index build.
Fix risk of deadlock failures while dropping a partitioned index.
Fix race condition between DROP TABLESPACE and checkpointing that could fail to remove all dead files from the tablespace directory.
Fix potential issue in crash recovery after a TRUNCATE command that overlaps with a checkpoint.
Re-allow _ as the first character in a custom configuration parameter name.
Fix PANIC: xlog flush request is not satisfied failure during standby promotion when there is a missing WAL continuation record.
Fix possibility of self-deadlock in hot standby conflict handling.
Ensure that logical replication apply workers can be restarted when the server is near the max_sync_workers_per_subscription limit.
Disallow execution of SPI functions during PL/Perl function compilation.
libpq now accepts root-owned SSL private key files, which matches the rules the server has used since the 9.6 release.
Re-allow database.schema.table patterns in psql, pg_dump, and pg_amcheck.
Several fixes for pageinspect to improve overall stability.
Disable batch insertion in postgres_fdw when BEFORE INSERT ... FOR EACH ROW triggers exist on the foreign table.
Update JIT code to work with LLVM 14.
PostgreSQL 14.2, 13.6, 12.10, 11.15, and 10.20 Released!
This update fixes over 55 bugs that were reported in the last several months. The issues listed below affect PostgreSQL 14. Some of these issues may also affect other supported versions of PostgreSQL.
Included in this release:
Fix for a low probability scenario of index corruption when a HOT (heap-only tuple) chain changes state during VACUUM. Encountering this issue is unlikely, but if you are concerned, please consider reindexing.
Fix for using REINDEX CONCURRENTLY on TOAST table indexes to prevent corruption. You can fix any TOAST indexes by reindexing them again.
The psql \password command now defaults to setting the password for the role defined by CURRENT_USER. Additionally, the role name is now included in the password prompt.
Build extended statistics for partitioned tables. If you previously added extended statistics to a partitioned table, you should run ANALYZE on those tables. As autovacuum currently does not process partitioned tables, you must periodically run ANALYZE on any partitioned tables to update their statistics.
Fix crash with ALTER STATISTICS when the statistics object is dropped concurrently.
Fix crash with multiranges when extracting variable-length data types.
Several fixes to the query planner that lead to incorrect query results.
Several fixes for query plan memoization.
Fix startup of a physical replica to tolerate transaction ID wraparound.
When using logical replication, avoid duplicate transmission of a partitioned table's data when the publication includes both the child and parent tables.
Disallow altering data type of a partitioned table's columns when the partitioned table's row type is used as a composite type elsewhere.
Disallow ALTER TABLE ... DROP NOT NULL for a column that is part of a replica identity index.
Several fixes for caching that correct logical replication behavior and improve performance.
Fix memory leak when updating expression indexes.
Avoid leaking memory during REASSIGN OWNED BY operations that reassign ownership of many objects.
Fix display of whole-row variables appearing in INSERT ... VALUES rules.
Fix race condition that could lead to failure to localize error messages that are reported early in multi-threaded use of libpq or ecpglib.
Fix psql \d command for identifying parent triggers.
Fix failures on Windows when using the terminal as data source or destination. This affected the psql \copy command and using pg_recvlogical with -f -.
Fix the pg_dump --inserts and --column-inserts modes to handle tables that contain both generated and dropped columns.
Fix edge cases in how postgres_fdw handles asynchronous queries. These errors could lead to crashes or incorrect results when attempting to run parallel scans of foreign tables.
For the full list of changes available, please review the release notes.
PostgreSQL 14 contains many new features and enhancements, including:
Stored procedures can now return data via OUT parameters.
The SQL-standard SEARCH and CYCLE options for common table expressions have been implemented.
Subscripting can now be applied to any data type for which it is a useful notation, not only arrays. In this release, the jsonb and hstore types have gained subscripting operators.
Range types have been extended by adding multiranges, allowing representation of noncontiguous data ranges.
Numerous performance improvements have been made for parallel queries, heavily-concurrent workloads, partitioned tables, logical replication, and vacuuming.
B-tree index updates are managed more efficiently, reducing index bloat.
VACUUM automatically becomes more aggressive, and skips inessential cleanup, if the database starts to approach a transaction ID wraparound condition.
Extended statistics can now be collected on expressions, allowing better planning results for complex queries.
libpq now has the ability to pipeline multiple queries, which can boost throughput over high-latency connections.