From 4145ea0910d7bdbf131aa6514ffce8eb92230a5f Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 8 Nov 2024 16:39:34 -0500 Subject: [PATCH] First-draft release notes for 17.1. (We lack a query for identifying broken foreign keys in the first changelog item, but the rest of this is in reviewable shape.) As usual, the release notes for other branches will be made by cutting these down, but put them up for community review first. Also as usual for a .1 release, there are some entries here that are not really relevant for v17 because they already appeared in 17.0. Those'll be removed later. --- doc/src/sgml/release-17.sgml | 1677 ++++++++++++++++++++++++++++++++++ 1 file changed, 1677 insertions(+) diff --git a/doc/src/sgml/release-17.sgml b/doc/src/sgml/release-17.sgml index 96463b92ef4..0eb57c63fdd 100644 --- a/doc/src/sgml/release-17.sgml +++ b/doc/src/sgml/release-17.sgml @@ -1,6 +1,1683 @@ + + Release 17.1 + + + Release date: + 2024-11-14 + + + + This release contains a variety of fixes from 17.0. + For information about new features in major release 17, see + . + + + + Migration to Version 17.1 + + + A dump/restore is not required for those running 17.X. + + + + However, if you have detached partitions from a partitioned table that + has a foreign-key reference to another partitioned table, you may have + catalog and/or data corruption to repair, as detailed in the first + changelog entry below. + + + + Also, in the uncommon case that a + database's LC_CTYPE setting is C + while its LC_COLLATE setting is some other locale, + indexes on textual columns should be reindexed, as described in the + second changelog entry below. + + + + + Changes + + + + + + + Fix updates of catalog state for foreign-key constraints when + attaching or detaching table partitions (Jehan-Guillaume de + Rorthais, Tender Wang, Álvaro Herrera) + § + § + + + + If the referenced table is partitioned, then different catalog + entries are needed for a referencing table that is stand-alone + versus one that is a partition. ATTACH/DETACH + PARTITION commands failed to perform this conversion + correctly. In particular, after DETACH the now + stand-alone table would be missing foreign-key enforcement triggers, + which could result in the table later containing rows that fail the + foreign-key constraint. A subsequent re-ATTACH + could fail with surprising errors, too. + + + + The way to fix this is to do ALTER TABLE DROP + CONSTRAINT on the now stand-alone table for each faulty + constraint, and then re-add the constraint. If re-adding the + constraint fails, then some erroneous data has crept in. You will + need to manually re-establish consistency between the referencing + and referenced tables, then re-add the constraint. + + + + XXX need to provide a query for finding faulty constraints + + + + + + + Fix test for C locale + when LC_COLLATE is different + from LC_CTYPE (Jeff Davis) + § + + + + When using libc as the default collation + provider, the test to see if C locale is in use + for collation accidentally checked LC_CTYPE + not LC_COLLATE. This has no impact in the + typical case where those settings are the same, nor if both are + not C (nor its alias POSIX). + However, if LC_CTYPE is C + while LC_COLLATE is some other locale, wrong + query answers could ensue, and corruption of indexes on strings was + possible. Users of databases with such settings should reindex + affected indexes after installing this update. + The converse case with LC_COLLATE + being C while LC_CTYPE is some + other locale would cause performance degradation, but no actual + errors. + + + + + + + Avoid possible crashes and could not open relation + errors in queries on a partitioned table occurring concurrently with + a DETACH CONCURRENTLY and immediate drop of a + partition (Álvaro Herrera, Kuntal Gosh) + § + § + + + + + + + Disallow ALTER TABLE ATTACH PARTITION if the + table to be attached has a foreign key referencing the partitioned + table (Álvaro Herrera) + § + + + + This arrangement is not supported, and other ways of creating it + already fail. + + + + + + + Don't use partitionwise joins or grouping if the query's collation + for the key column doesn't match the partition key's collation (Jian + He, Webbo Han) + § + § + + + + Such plans could produce incorrect results. + + + + + + + Avoid planner failure after converting an IS NULL + test on a NOT NULL column to + constant FALSE (Richard Guo) + § + + + + This bug typically led to errors such as variable not found + in subplan target lists. + + + + + + + Avoid possible planner crash while inlining a SQL function whose + arguments contain certain array-related constructs (Tom Lane, Nathan + Bossart) + § + + + + + + + Fix possible wrong answers or wrong varnullingrels + planner errors for MERGE ... WHEN NOT MATCHED BY + SOURCE actions (Dean Rasheed) + § + § + + + + + + + Fix possible could not find pathkey item to sort + error when the output of a UNION ALL member query + needs to be sorted, and the sort column is an expression (Andrei + Lepikhov, Tom Lane) + § + + + + + + + Fix performance regressions involving flattening of subqueries + underneath outer joins that are later reduced to plain joins + (Tom Lane) + § + + + + v16 failed to optimize some queries as well as prior versions had, + because of overoptimistic simplification of query-pullup logic. + + + + + + + Fix edge case in B-tree ScalarArrayOp index scans (Peter Geoghegan) + § + + + + When a scrollable cursor with a plan of this kind was backed up to its + starting point and then run forward again, wrong answers were + possible. + + + + + + + Allow cancellation of the second stage of index build for large hash + indexes (Pavel Borisov) + § + + + + + + + Fix assertion failure or confusing error message for COPY + (query) TO ..., when + the query is rewritten by a DO + INSTEAD NOTIFY rule (Tender Wang, Tom Lane) + § + + + + + + + Fix validation + of COPY's FORCE_NOT_NULL + and FORCE_NULL options (Joel Jacobson) + § + + + + Some incorrect usages are now rejected as they should be. + + + + + + + Fix server crash when a json_objectagg() call + contains a volatile function (Amit Langote) + § + + + + + + + Fix checking of key uniqueness in JSON object constructors + (Junwang Zhao, Tomas Vondra) + § + + + + When building an object larger than a kilobyte, it was possible to + accept invalid input that includes duplicate object keys, or to + falsely report that duplicate keys are present. + + + + + + + Fix detection of skewed data during parallel hash join (Thomas + Munro) + § + + + + After repartitioning the inner side of a hash join because one + partition has accumulated too many tuples, we check to see if all + the partition's tuples went into the same child partition, which + suggests that they all have the same hash value and further + repartitioning cannot improve matters. This check malfunctioned in + some cases, allowing repeated futile repartitioning which would + eventually end in a resource-exhaustion error. + + + + + + + Avoid crash when ALTER DATABASE SET is used to + set a server parameter that requires search-path-based lookup, such + as default_text_search_config (Jeff Davis) + § + + + + + + + Avoid repeated lookups of opclasses and collations while creating a + new index on a partitioned table (Tom Lane) + § + + + + This was problematic mainly because some of the lookups would be + done with a restricted search_path, leading to + unexpected failures if the CREATE INDEX command + referenced objects outside pg_catalog. + + + + This fix also prevents comments on the parent partitioned index from + being copied to child indexes. + + + + + + + Add missing dependency from a partitioned table to a non-built-in + access method specified in CREATE TABLE ... USING + (Michael Paquier) + § + + + + Dropping the access method should be blocked when a table exists + that depends on it, but it was not, allowing subsequent odd + behavior. Note that this fix only prevents problems for partitioned + tables created after this update. + + + + + + + Disallow locale names containing non-ASCII characters (Thomas Munro) + § + + + + This is only an issue on Windows, as such locale names are not used + elsewhere. They are problematic because it's quite unclear what + encoding such names are represented in (since the locale itself + defines the encoding to use). In + recent PostgreSQL releases, an abort in + the Windows runtime library could occur because of confusion about + that. + + + + Anyone who encounters the new error message should either create a + new duplicated locale with an ASCII-only name using Windows Locale + Builder, or consider using BCP 47-compliant locale names + like tr-TR. + + + + + + + Fix race condition in committing a serializable transaction (Heikki + Linnakangas) + § + + + + Mis-processing of a recently committed transaction could lead to an + assertion failure or a could not access status of + transaction error. + + + + + + + Fix race condition in COMMIT PREPARED + that resulted in orphaned 2PC files (wuchengwen) + § + + + + A concurrent PREPARE TRANSACTION could + cause COMMIT PREPARED to not remove the on-disk + two-phase state file for the completed transaction. There was no + immediate ill effect, but a subsequent crash-and-recovery could fail + with could not access status of transaction, + requiring manual removal of the orphaned file to restore service. + + + + + + + Avoid invalid memory accesses after skipping an invalid toast index + during VACUUM FULL (Tender Wang) + § + + + + A list tracking yet-to-be-rebuilt indexes was not properly updated + in this code path, risking assertion failures or crashes later on. + + + + + + + Fix ways in which an in place catalog update could be + lost (Noah Misch) + § + § + § + § + § + § + § + + + + Normal row updates write a new version of the row to preserve + rollback-ability of the transaction. However, certain system + catalog updates are intentionally non-transactional and are done + with an in-place update of the row. These patches fix race + conditions that could cause the effects of an in-place update to be + lost. As an example, it was possible to forget having set + pg_class.relhasindex + to true, preventing updates of the new index and thus causing index + corruption. + + + + + + + Reset catalog caches at end of recovery (Noah Misch) + § + + + + This prevents scenarios wherein an in-place catalog update could be + lost due to using stale data from a catalog cache. + + + + + + + Avoid using parallel query while holding off interrupts + (Francesco Degrassi, Noah Misch, Tom Lane) + § + § + + + + This situation cannot arise normally, but it can be reached with + test scenarios such as using a SQL-language function as B-tree + support (which would be far too slow for production usage). If it + did occur it would result in an indefinite wait. + + + + + + + Report the active query ID for statistics purposes at the start of + processing of Bind and Execute protocol messages (Sami Imseih) + § + + + + This allows more of the work done in extended query protocol to be + attributed to the correct query. + + + + + + + Guard against stack overflow in libxml2 + with too-deeply-nested XML input (Tom Lane, with hat tip to Nick + Wellnhofer) + § + + + + Use xmlXPathCtxtCompile() rather + than xmlXPathCompile(), because the latter + fails to protect itself against recursion-to-stack-overflow + in libxml2 releases before 2.13.4. + + + + + + + Fix some whitespace issues in the result + of XMLSERIALIZE(... INDENT) (Jim Jones) + § + + + + Fix failure to indent nodes separated by whitespace, and ensure that + a trailing newline is not added. + + + + + + + Do not ignore a concurrent REINDEX CONCURRENTLY + that is working on an index with predicates or expressions (Michail + Nikolaev) + § + + + + Normally, REINDEX CONCURRENTLY does not need to + wait for other REINDEX CONCURRENTLY operations on + other tables. However, this optimization is not applied if the + other REINDEX CONCURRENTLY is processing an index + with predicates or expressions, on the chance that such expressions + contain user-defined code that accesses other tables. Careless + coding created a race condition such that that rule was not applied + uniformly, possibly allowing inconsistent behavior. + + + + + + + Fix mis-deparsing of ORDER BY lists when there is + a name conflict (Tom Lane) + § + + + + If an ORDER BY item in SELECT + is a bare identifier, the parser first seeks it as an output column + name of the SELECT, for SQL92 compatibility. + However, ruleutils.c expects the SQL99 interpretation where such a + name is an input column name. So it was possible to produce an + incorrect display of a view in the (rather ill-advised) case where + some other column is renamed in the SELECT output + list to match an input column used in ORDER BY. + Fix by table-qualifying such names in the dumped view text. + + + + + + + Fix failed to find plan for subquery/CTE errors + in EXPLAIN (Richard Guo, Tom Lane) + § + § + + + + This case arose while trying to print references to fields of a + RECORD-type output of a subquery when the subquery has been + optimized out of the plan altogether (which is possible at least in + the case that it has a constant-false WHERE + condition). Nothing remains in the plan to identify the original + field names, so fall back to + printing fN for + the N'th record column. (That's actually + the right thing anyway, if the record output arose from + a ROW() constructor.) + + + + + + + Disallow a USING clause when altering the type of + a generated column (Peter Eisentraut) + § + + + + A generated column already has an expression specifying the column + contents, so including USING doesn't make sense. + + + + + + + Ignore not-yet-defined Portals in + the pg_cursors view (Tom Lane) + § + + + + It is possible for user-defined code that inspects this view to be + called while a new cursor is being set up, and if that happens a + null pointer dereference would ensue. Avoid the problem by defining + the view to exclude incompletely-set-up cursors. + + + + + + + Fix incorrect output of the pg_stat_io view + on 32-bit machines (Bertrand Drouvot) + § + + + + The stats_reset timestamp column + contained garbage on such hardware. + + + + + + + Prevent mis-encoding of trailing junk after numeric + literal error messages (Karina Litskevich) + § + + + + We do not allow identifiers to appear immediately following numeric + literals (there must be some whitespace between). If a multibyte + character immediately followed a numeric literal, the syntax error + message about it included only the first byte of that character, + causing bad-encoding problems both in the report to the client and + in the postmaster log file. + + + + + + + Avoid unexpected table_index_fetch_tuple call during logical + decoding error while decoding a transaction involving + insertion of a column default value (Takeshi Ideriha, Hou Zhijie) + § + § + + + + + + + Reduce memory consumption of logical decoding (Masahiko Sawada) + § + + + + Use a smaller default block size to store tuple data received during + logical replication. This reduces memory wastage, which has been + reported to be severe while processing long-running transactions, + even leading to out-of-memory failures. + + + + + + + In a logical replication apply worker, ensure that origin progress + is not advanced during an error or apply worker shutdown (Hayato + Kuroda, Shveta Malik) + § + + + + This avoids possible loss of a transaction, since once the origin + progress point is advanced the source server won't send that data + again. + + + + + + + Re-disable sending of stateless (TLSv1.2) session tickets + (Daniel Gustafsson) + § + + + + A previous change to prevent sending of stateful (TLSv1.3) session + tickets accidentally re-enabled sending of stateless ones. Thus, + while we intended to prevent clients from thinking that TLS session + resumption is supported, some still did. + + + + + + + Avoid wrong tuple length failure when dropping a + database with many ACL (permission) entries (Ayush Tiwari) + § + § + + + + + + + Allow adjusting the session_authorization + and role settings in parallel workers (Tom Lane) + § + + + + Our code intends to allow modifiable server settings to be set by + function SET clauses, but not otherwise within a + parallel worker. SET clauses failed for these + two settings, though. + + + + + + + Fix behavior of stable functions called from + a CALL statement's argument list, when + the CALL is within a + PL/pgSQL EXCEPTION block (Tom Lane) + § + + + + As with a similar fix in our previous quarterly releases, this case + allowed such functions to be passed the wrong snapshot, causing them + to see stale values of rows modified since the start of the outer + transaction. + + + + + + + Fix cache lookup failed for function errors in edge + cases in PL/pgSQL's CALL (Tom Lane) + § + + + + + + + Fix thread safety of our fallback (non-OpenSSL) MD5 implementation + on big-endian hardware (Heikki Linnakangas) + § + + + + Thread safety is not currently a concern in the server, but it is + for libpq. + + + + + + + Parse libpq's keepalives + connection option in the same way as other integer-valued options + (Yuto Sasaki) + § + + + + The coding used here rejected trailing whitespace in the option + value, unlike other cases. This turns out to be problematic + in ecpg's usage, for example. + + + + + + + Avoid use of pnstrdup() + in ecpglib (Jacob Champion) + § + + + + That function will call exit() on + out-of-memory, which is undesirable in a library. The calling code + already handles allocation failures properly. + + + + + + + In ecpglib, fix out-of-bounds read when + parsing incorrect datetime input (Bruce Momjian, Pavel Nekrasov) + § + + + + It was possible to try to read the location just before the start of + a constant array. Real-world consequences seem minimal, though. + + + + + + + Fix psql's describe commands to again + work with pre-9.4 servers (Tom Lane) + § + + + + Commands involving display of an ACL (permissions) column failed + with very old PostgreSQL servers, due to + use of a function not present in those versions. + + + + + + + Fix memory leak in psql during repeated + use of \bind (Michael Paquier) + § + + + + + + + Avoid hanging if an interval less than 1ms is specified + in psql's \watch + command (Andrey Borodin, Michael Paquier) + § + + + + Instead, treat this the same as an interval of zero (no wait between + executions). + + + + + + + Fix pg_dump's handling of identity + sequences that have persistence different from their owning table's + persistence (Tom Lane) + § + + + + Since v15, it's been possible to set an identity sequence to be + LOGGED when its owning table is UNLOGGED or vice versa. + However, pg_dump's method for recreating + that situation failed in binary-upgrade mode, + causing pg_upgrade to fail when such + sequences are present. Fix by introducing a new option + for ADD/ALTER COLUMN GENERATED AS IDENTITY to + allow the sequence's persistence to be set correctly at creation. + Note that this means a dump from a database containing such a + sequence will only load into a server of this minor version or + newer. + + + + + + + Fix failure to find replication password + in ~/.pgpass (Tom Lane) + § + + + + pg_basebackup + and pg_receivewal failed to match an entry + in ~/.pgpass that + had replication in the database name field, if + no or switch was + supplied. This resulted in an unexpected prompt for password. + + + + + + + In pg_combinebackup, throw an error if an + incremental backup file is present in a directory that is supposed to + contain a full backup (Robert Haas) + § + + + + + + + In pg_combinebackup, don't construct + filenames containing double slashes (Robert Haas) + § + + + + This caused no functional problems, but the duplicate slashes were + visible in error messages, which could create confusion. + + + + + + + Include the source timeline history + in pg_rewind's debug output + (Heikki Linnakangas) + § + + + + This was the intention to begin with, but a coding error caused the + source history to always print as empty. + + + + + + + Fix misbehavior with junction points on Windows, particularly + in pg_rewind (Alexandra Wang) + + + + This entailed back-patching previous fixes by Thomas Munro, Peter + Eisentraut, Alexander Lakhin, and Juan José Santamaría Flecha. + Those changes were originally not back-patched out of caution, but + they have been in use in later branches for long enough to deem + them safe. + + + + + + + Avoid trying to reindex temporary tables and indexes + in vacuumdb and in + parallel reindexdb (VaibhaveS, Michael + Paquier, Fujii Masao, Nathan Bossart) + § + § + § + + + + Reindexing other sessions' temporary tables cannot work, but the + check to skip them was missing in some code paths, leading to + unwanted failures. + + + + + + + Allow inspection of sequence relations in relevant functions + of contrib/pageinspect + and contrib/pgstattuple (Nathan Bossart, Ayush + Vatsa) + § + § + + + + This had been allowed in the past, but it got broken during the + introduction of non-default access methods for tables. + + + + + + + Fix incorrect LLVM-generated code on ARM64 platforms (Thomas + Munro, Anthonin Bonnefoy) + § + + + + When using JIT compilation on ARM platforms, the generated code + could not support relocation distances exceeding 32 bits, allowing + unlucky placement of generated code to cause server crashes on + large-memory systems. + + + + + + + Fix a few places that assumed that process start time (represented + as a time_t) will fit into a long value + (Max Johnson, Nathan Bossart) + § + + + + On platforms where long is 32 bits (notably Windows), + this coding would fail after Y2038. Most of the failures appear + only cosmetic, but notably pg_ctl start would + hang. + + + + + + + Prevent nothing provides + perl(PostgreSQL::Test::Utils) failures while building RPM + packages of PostgreSQL (Noah Misch) + + + + + + + Fix building with Strawberry Perl on Windows (Andrew Dunstan) + § + + + + + + + Prevent missing declaration for inet_pton compiler + warning or error when building with MinGW (Thomas Munro, Andrew + Dunstan) + + + + + + + Update time zone data files to tzdata + release 2024b (Tom Lane) + § + § + + + + This tzdata release changes the old + System-V-compatibility zone names to duplicate the corresponding + geographic zones; for example PST8PDT is now an + alias for America/Los_Angeles. The main visible + consequence is that for timestamps before the introduction of + standardized time zones, the zone is considered to represent local + mean solar time for the named location. For example, + in PST8PDT, timestamptz input such + as 1801-01-01 00:00 would previously have been + rendered as 1801-01-01 00:00:00-08, but now it is + rendered as 1801-01-01 00:00:00-07:52:58. + + + + Also, historical corrections for Mexico, Mongolia, and Portugal. + Notably, Asia/Choibalsan is now an alias + for Asia/Ulaanbaatar rather than being a separate + zone, mainly because the differences between those zones were found to + be based on untrustworthy data. + + + + + + + + Release 17