Person of the week: https://postgresql.life/post/pavlo_golub/
JDBC 42.2.20 released https://jdbc.postgresql.org/documentation/changelog.html#version_42.2.20
kubgres 1.1, a Kubernetes operator which makes it possible to deploy a cluster of PostgreSQL pods with replication and failover configured, released. https://github.com/reactive-tech/kubegres/releases/tag/v1.1
pspg 4.6.1 a pager designed for PostgreSQL, released. https://github.com/okbob/pspg/releases/tag/4.6.1
pgAdmin4 5.2, a web- and native GUI control center for PostgreSQL, released. https://www.pgadmin.org/docs/pgadmin4/5.2/release_notes_5_2.html
pg_log_statements 0.2, an extension that makes is possible to log statements for specific server processes, released. https://github.com/pierreforstmann/pg_log_statements/releases
Planet PostgreSQL: https://planet.postgresql.org/
PostgreSQL Weekly News is brought to you this week by David Fetter
Submit news and announcements by Sunday at 3:00pm PST8PDT to email@example.com.
Thomas Munro pushed:
Michaël Paquier pushed:
Replace magic constants for seek() calls in perl scripts. A couple of tests have been using 0 as magic constant while SEEK_SET can be used instead. This makes the code easier to understand, and more consistent with the changes done in 3c5b068. Per discussion with Andrew Dunstan. Discussion: https://postgr.es/m/YHrc24AgJQ6tQ1q0@paquier.xyz https://git.postgresql.org/pg/commitdiff/c731f9187b5fd7038b04ba60703d3cace1806366
Fix typos and grammar in comments and docs. Author: Justin Pryzby Discussion: https://postgr.es/m/20210416070310.GG3315@telsasoft.com https://git.postgresql.org/pg/commitdiff/7ef8b52cf079ef3ace4575f7b97c2d6f80463b4f
Add CURRENT_ROLE to list of roles for tab completion of GRANT in psql. This compatibility has been added in 45b9805, but psql forgot the call. Author: Wei Wang Reviewed-by: Aleksander Alekseev Discussion: https://postgr.es/m/OS3PR01MB6275935F62E161BCD393D6559E489@OS3PR01MB6275.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/22b2dec31b2ef4dfee299290b16375e9fa6e6932
doc: List compute_query_id in required config for pg_stat_statements. Not enabling compute_query_id would disable pg_stat_statements even if the module is listed in shared_preload_libraries, so add it to the minimum configuration set as listed in its documentation. Author: Greg Nancarrow Reviewed-by: Julien Rouhaud, Bharath Rupireddy Discussion: https://postgr.es/m/CAJcOf-fXyb2QiDbwftD813UF70w-+BsK-03bFp1GrijXU9GQYQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/64087eb5def7786bd49e60eb5d984ec6e4a872a9
doc: Move parallel_leader_participation to its correct category. parallel_leader_participation got introduced in e5253fd, where it was listed under RESOURCES_ASYNCHRONOUS in guc.c, but the documentation did not reflect that and listed it with the other planner-related options. This commit fixes this inconsistency as the parameter is intended to be an asynchronous one. While on it, reorganize a bit the section dedicated to asynchronous parameters, backend_flush_after being moved first to do better in terms of alphabetical order of the options listed. Reported-by: Yanliang Lei Author: Bharath Rupireddy Discussion: https://firstname.lastname@example.org https://git.postgresql.org/pg/commitdiff/1599e7b375127cac81b539d2c69d3faf7598509b
Fix relation leak for subscribers firing triggers in logical replication. Creating a trigger on a relation to which an apply operation is triggered would cause a relation leak once the change gets committed, as the executor would miss that the relation needs to be closed beforehand. This issue got introduced with the refactoring done in 1375422c, where it becomes necessary to track relations within es_opened_result_relations to make sure that they are closed. We have discussed using ExecInitResultRelation() coupled with ExecCloseResultRelations() for the relations in need of tracking by the apply operations in the subscribers, which would simplify greatly the opening and closing of indexes, but this requires a larger rework and reorganization of the worker code, particularly for the tuple routing part. And that's not really welcome post feature freeze. So, for now, settle down to the same solution as TRUNCATE which is to fill in es_opened_result_relations with the relation opened, to make sure that ExecGetTriggerResultRel() finds them and that they get closed. The code is lightly refactored so as a relation is not registered three times for each DML code path, making the whole a bit easier to follow. Reported-by: Tang Haiying, Shi Yu, Hou Zhijie Author: Amit Langote, Masahiko Sawada, Hou Zhijie Reviewed-by: Amit Kapila, Michael Paquier Discussion: https://postgr.es/m/OS0PR01MB611383FA0FE92EB9DE21946AFB769@OS0PR01MB6113.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/f3b141c482552a57866c72919007d6481cd59ee3
Remove use of [U]INT64_FORMAT in some translatable strings. %lld with (long long), or %llu with (unsigned long long) are more adapted. This is similar to
Author: Kyotaro Horiguchi Discussion: https://email@example.com https://git.postgresql.org/pg/commitdiff/62aa2bb293148c13851484e63db4835e3c53147f
Fix some comments in fmgr.c. Oversight in 2a0faed. Author: Hou Zhijie Discussion: https://postgr.es/m/OS0PR01MB5716405E2464D85E6DB6DC0794469@OS0PR01MB5716.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/45c0c5f70eb5e22d31be8bb9a8b4d9c66a3e9b37
Add some forgotten LSN_FORMAT_ARGS() in xlogreader.c. 6f6f284 has introduced a specific macro to make printf()-ing of LSNs easier. This takes care of what looks like the remaining code paths that did not get the call. Author: Michael Paquier Reviewed-by: Kyotaro Horiguchi, Tom Lane Discussion: https://postgr.es/m/YIJS9x6K8ruizN7j@paquier.xyz https://git.postgresql.org/pg/commitdiff/4aba61b87026b43fb37fc8e9ec5d9ae208e07b6b
Doc: Remove extraneous whitespaces with some tags. Author: Justin Pryzby Discussion: https://postgr.es/m/20210423184338.GL7256@telsasoft.com https://git.postgresql.org/pg/commitdiff/0d0049c58b4970183a102fc1f7dc1e9bef2a7149
Fix come comments in execMain.c. 1375422 has refactored this area of the executor code, and some comments went out-of-sync. Author: Yukun Wang Reviewed-by: Amul Sul Discussion: https://postgr.es/m/OS0PR01MB60033394FCAEF79B98F078F5B4459@OS0PR01MB6003.jpnprd01.prod.outlook.com https://git.postgresql.org/pg/commitdiff/9b5558e7ad4706bbd53947e5b4d7c06e150390a5
Amit Kapila pushed:
Peter Eisentraut pushed:
Use correct format placeholder for pids. Should be signed, not unsigned. https://git.postgresql.org/pg/commitdiff/640b91c3ed24002b34c7226fb51ef9176fb72713
Don't use INT64_FORMAT inside message strings. Use %lld and cast to long long int instead. https://git.postgresql.org/pg/commitdiff/3286065651477c2060910dfb42b3cedbd79a7980
Fix typo. https://git.postgresql.org/pg/commitdiff/f0ec598b4323d8b29df5c67f2cd0000547a507ed
doc: Improve hyphenation consistency. https://git.postgresql.org/pg/commitdiff/544b28088f9d41750ccf193812da62bdfe4bd98a
Use correct format placeholder for timeline IDs. Should be %u rather than %d. https://git.postgresql.org/pg/commitdiff/39d0928a0e88426ee64189898565c40d4af9ad96
Add DISTINCT to information schema usage views. Since pg_depend can contain duplicate entries, we need to eliminate those in information schema views that build on pg_depend, using DISTINCT. Some of the older views already did that correctly, but some of the more recently added ones didn't. (In some of these views, it might not be possible to reproduce the issue because of how the implementation happens to deduplicate dependencies while recording them, but it seems better to keep this consistent in all cases.) https://git.postgresql.org/pg/commitdiff/d84ffffe582b8e036a14c6bc2378df29167f3a00
Update config.guess and config.sub. https://git.postgresql.org/pg/commitdiff/26ac261ee4033710cad44f7924d53753129b60c7
Fix some trailing whitespace in documentation files. https://git.postgresql.org/pg/commitdiff/197d33ccbe888fc84ae4e49bb241e88ea3c81f15
Fix incorrect format placeholder. https://git.postgresql.org/pg/commitdiff/7776a23a4bdeb7215e4f8ddea5989cb143becc12
doc: Fix typos. Author: Justin Pryzby firstname.lastname@example.org https://git.postgresql.org/pg/commitdiff/9bd563aa9f0694994a6640946a7ee3dc0431d507
pg_amcheck: Use logging functions. This was already mostly done, but some error messages were printed the long way. https://git.postgresql.org/pg/commitdiff/add5fad78aac8da96aeeb730155d35b16ff9b55a
Use correct format placeholder for WSAGetLastError(). Some code thought this was unsigned, but it's signed int. https://git.postgresql.org/pg/commitdiff/9486844f301e265a3ad11b612decaba2462c3c15
Factor out system call names from error messages. Instead, put them in via a format placeholder. This reduces the number of distinct translatable messages and also reduces the chances of typos during translation. We already did this for the system call arguments in a number of cases, so this is just the same thing taken a bit further. Discussion: https://www.postgresql.org/message-id/flat/92d6f545-5102-65d8-3c87-489f71ea0a37%40enterprisedb.com https://git.postgresql.org/pg/commitdiff/82c3cd974131d7fa1cfcd07cebfb04fffe26ee35
Peter Geoghegan pushed:
Document LP_DEAD accounting issues in VACUUM. Document VACUUM's soft assumption that any LP_DEAD items encountered during pruning will become LP_UNUSED items before VACUUM finishes up. This is integral to the accounting used by VACUUM to generate its final report on the table to the stats collector. It also affects how VACUUM determines which heap pages are truncatable. In both cases VACUUM is concerned with the likely contents of the page in the near future, not the current contents of the page. This state of affairs created the false impression that VACUUM's dead tuple accounting had significant difference with similar accounting used during ANALYZE. There were and are no substantive differences, at least when the soft assumption completely works out. This is far clearer now. Also document cases where things don't quite work out for VACUUM's dead tuple accounting. It's possible that a significant number of LP_DEAD items will be left behind by VACUUM, and won't be recorded as remaining dead tuples in VACUUM's statistics collector report. This behavior dates back to commit a96c41fe, which taught VACUUM to run without index and heap vacuuming at the user's request. The failsafe mechanism added to VACUUM more recently by commit 1e55e7d1 takes the same approach to dead tuple accounting. Reported-By: Masahiko Sawada email@example.com Discussion: https://postgr.es/m/CAH2-Wz=Jmtu18PrsYq3EvvZJGOmZqSO2u3bvKpx9xJa5uhNp=Q@mail.gmail.com https://git.postgresql.org/pg/commitdiff/7136bf34f28892362144ae2e350714836a5c0c0c
amcheck: MAXALIGN() nbtree special area offset. This isn't strictly necessary, but in theory it might matter if in the future the width of the nbtree special area changes -- its total size might not be an even number of MAXALIGN() quantums, even with padding. PageInit() MAXALIGN()s all special area offsets, but amcheck uses the offset to perform initial basic validation of line pointers, so we don't rely on the offset from the page header. The real reason to do this is to set a good example for new code that adds amcheck coverage for other index AMs. Reported-By: Bharath Rupireddy firstname.lastname@example.org Discussion: https://postgr.es/m/CALj2ACUMqTR9nErh99FbOBmzCXE9=gXNqhBiwYOhejJJS1LXqQ@mail.gmail.com https://git.postgresql.org/pg/commitdiff/bb3ecc8c961896ecb2ad3d5ba705c2877b933945
Magnus Hagander pushed:
Fix typo in comment. Author: Julien Rouhaud Backpatch-through: 11 Discussion: https://postgr.es/m/20210420121659.odjueyd4rpilorn5@nol https://git.postgresql.org/pg/commitdiff/8b4b5669cde2b17bd6b5d68f584d97078f3296ac
Mention that toplevel is part of pg_stat_statements key. While at it, also document that toplevel is always true if pg_stat_statements.track is set to top. Author: Julien Rouhaud Reported-By: Fujii Masao Discussion: https://email@example.com https://git.postgresql.org/pg/commitdiff/7531fcb1fcf5b3ea2f49959a3f095c083e3fc4c4
Andrew Dunstan pushed:
Avoid unfortunate IPC::Run path caching in PostgresNode. Commit b34ca595ab provided for installation-aware instances of PostgresNode. However, it turns out that IPC::Run works against this by caching the path to a binary and not consulting the path again, even if it has changed. We work around this by calling Postgres binaries with the installed path rather than just a bare name to be looked up in the environment path, if there is an installed path. For the common case where there is no installed path we continue to use the bare command name. Diagnosis and solution from Mark Dilger Discussion: https://postgr.es/m/E8F512F8-B4D6-4514-BA8D-2E671439DA92@enterprisedb.com https://git.postgresql.org/pg/commitdiff/95c3a1956ec9eac686c1b69b033dd79211b72343
Only ever test for non-127.0.0.1 addresses on Windows in PostgresNode. This has been found to cause hangs where tcp usage is forced. Alexey Kodratov Discussion: https://firstname.lastname@example.org Backpatch to all live branches https://git.postgresql.org/pg/commitdiff/d064afc7204b52cb78a83fea0e686693ce5ba00c
fix silly perl error in commit d064afc720. https://git.postgresql.org/pg/commitdiff/e014d25deade08df082d2b37de45adb0c984f563
Make PostgresNode version aware. A new PostgresVersion object type is created
and this is used in PostgresNode using the output of
pg_config --version and
the result stored in the PostgresNode object. This object can be compared to
other PostgresVersion objects, or to a number or string. PostgresNode is
currently believed to be compatible with versions down to release 12, so
PostgresNode will issue a warning if used with a version prior to that. No
attempt has been made to deal with incompatibilities in older versions - that
remains work to be undertaken in a subsequent development cycle. Based on
code from Mark Dilger and Jehan-Guillaume de Rorthais. Discussion:
Make PostgresVersion code a bit more robust and simple. per gripe from Alvaro Herrera. https://git.postgresql.org/pg/commitdiff/502dc6df8f6eeba06812ce09488efc7e684f5ec9
Teach PostgresVersion all the ways to mark non-release code. As well as 'devel' version_stamp.pl provides for 'alphaN' 'betaN' and 'rcN', so teach PostgresVersion about those. Also stash the version string instead of trying to reconstruct it during stringification. Discussion: https://postgr.es/m/YIHlw5nSgAHs4dK1@paquier.xyz https://git.postgresql.org/pg/commitdiff/aa271209f6d995488fc5cba9731415f974823990
Provide pg_amcheck with an --install-missing option. This will install amcheck in the database if not present. The default schema is for the extension is pg_catalog, but this can be overridden by providing a value for the option. Mark Dilger, slightly editorialized by me. (rather divergent) Discussion: https://email@example.com https://git.postgresql.org/pg/commitdiff/b859d94c638968ccbb517ac7e151bdd94ed7c16a
Tom Lane pushed:
Fix planner failure in some cases of sorting by an aggregate. An oversight introduced by the incremental-sort patches caused "could not find pathkey item to sort" errors in some situations where a sort key involves an aggregate or window function. The basic problem here is that find_em_expr_usable_for_sorting_rel isn't properly modeling what prepare_sort_from_pathkeys will do later. Rather than hoping we can keep those functions in sync, let's refactor so that they actually share the code for identifying a suitable sort expression. With this refactoring, tlist.c's tlist_member_ignore_relabel is unused. I removed it in HEAD but left it in place in v13, in case any extensions are using it. Per report from Luc Vlaming. Back-patch to v13 where the problem arose. James Coleman and Tom Lane Discussion: https://firstname.lastname@example.org https://git.postgresql.org/pg/commitdiff/375398244168add84a884347625d14581a421e71
Rename find_em_expr_usable_for_sorting_rel. I didn't particularly like this function name, as it fails to express what's going on. Also, returning the sort expression alone isn't too helpful --- typically, a caller would also need some other fields of the EquivalenceMember. But the sole caller really only needs a bool result, so let's make it "bool relation_can_be_sorted_early()". Discussion: https://email@example.com https://git.postgresql.org/pg/commitdiff/7645376774c8532159f5f0f905e5e734d4ccbb18
Fix under-parenthesized XLogRecHasBlockRef() macro. Commit f003d9f87 left this macro with inadequate (or, one could say, too much) parenthesization. Which was catastrophic to the correctness of calls such as "if (!XLogRecHasBlockRef(record, 1)) ...". There are only a few of those, which perhaps explains why we didn't notice immediately (with our general weakness of WAL replay testing being another factor). I found it by debugging intermittent replay failures like 2021-04-08 14:33:30.191 EDT  PANIC: failed to locate backup block with ID 1 2021-04-08 14:33:30.191 EDT  CONTEXT: WAL redo at 0/95D3438 for SPGist/ADD_NODE: off 1; blkref #0: rel 1663/16384/25998, blk 1 https://git.postgresql.org/pg/commitdiff/9e41148229192dccc4bcc40f53af588b73d8ffea
Improve WAL record descriptions for SP-GiST records. While tracking down the bug fixed in the preceding commit, I got quite annoyed by the low quality of spg_desc's output. Add missing fields, try to make the formatting consistent. https://git.postgresql.org/pg/commitdiff/783be78ca91166ac7f80c953f2bbc5af1f61c6cd
Doc: document the tie-breaking behavior of the round() function. Back-patch to v13; the table layout in older branches is unfriendly to adding such details. Laurenz Albe Discussion: https://firstname.lastname@example.org https://git.postgresql.org/pg/commitdiff/82b13dbc4d4b46f71ca95ce1cc15c425deff5957
Don't crash on reference to an un-available system column. Adopt a more consistent policy about what slot-type-specific getsysattr functions should do when system attributes are not available. To wit, they should all throw the same user-oriented error, rather than variously crashing or emitting developer-oriented messages. This closes a identifiable problem in commits a71cfc56b and 3fb93103a (in v13 and v12), so back-patch into those branches, along with a test case to try to ensure we don't break it again. It is not known that any of the former crash cases are reachable in HEAD, but this seems like a good safety improvement in any case. Discussion: https://email@example.com https://git.postgresql.org/pg/commitdiff/d479d00285255d422a2b38f1cfaa35808968a08c
Bruce Momjian pushed:
adjust query id feature to use pg_stat_activity.query_id. Previously, it was pg_stat_activity.queryid to match the pg_stat_statements queryid column. This is an adjustment to patch 4f0b0966c8. This also adjusts some of the internal function calls to match. Catversion bumped. Reported-by: Álvaro Herrera, Julien Rouhaud Discussion: https://postgr.es/m/20210408032704.GA7498@alvherre.pgsql https://git.postgresql.org/pg/commitdiff/9660834dd8bf5b093f7b49eef846666201d45a35
Fix interaction of log_line_prefix's query_id and log_statement. log_statement is issued before query_id can be computed, so properly clear the value, and document the interaction. Reported-by: Fujii Masao, Michael Paquier Discussion: https://postgr.es/m/YHPkU8hFi4no4NSw@paquier.xyz Author: Julien Rouhaud https://git.postgresql.org/pg/commitdiff/db01f797dd48f826c62e1b8eea70f11fe7ff3efc
doc: mention <link> can be inside of <command>, but not <xref>. This was discussed in commit 9081bddbd. Reported-by: Peter Eisentraut Discussion: https://firstname.lastname@example.org https://git.postgresql.org/pg/commitdiff/84f15ccd4c25c4ffc4de6ed82f7658a3a199a1d7
Álvaro Herrera pushed:
Don't add a redundant constraint when detaching a partition. On ALTER TABLE .. DETACH CONCURRENTLY, we add a new table constraint that duplicates the partition constraint. But if the partition already has another constraint that implies that one, then that's unnecessary. We were already avoiding the addition of a duplicate constraint if there was an exact 'equal' match -- this just improves the quality of the check. Author: Justin Pryzby email@example.com Reviewed-by: Álvaro Herrera firstname.lastname@example.org Discussion: https://postgr.es/m/20210410184226.GY6592@telsasoft.com https://git.postgresql.org/pg/commitdiff/7b357cc6ae553c0ecacdc11b2e5278b7bf477dba
Add comment about extract_autovac_opts not holding lock. Per observation from Tom Lane. Discussion: https://email@example.com https://git.postgresql.org/pg/commitdiff/7c298c6573a0f181963ddcb40c850fa9c7da0ada
Fix relcache inconsistency hazard in partition detach. During queries coming
from ri_triggers.c, we need to omit partitions that are marked pending detach
-- otherwise, the RI query is tricked into allowing a row into the referencing
table whose corresponding row is in the detached partition. Which is bogus:
once the detach operation completes, the row becomes an orphan. However, the
code was not doing that in repeatable-read transactions, because relcache kept
a copy of the partition descriptor that included the partition, and used it in
the RI query. This commit changes the partdesc cache code to only keep
descriptors that aren't dependent on a snapshot (namely: those where no
detached partition exist, and those where detached partitions are included).
When a partdesc-without- detached-partitions is requested, we create one
afresh each time; also, those partdescs are stored in PortalContext instead of
CacheMemoryContext. find_inheritance_children gets a new output
*detached_exist boolean, which indicates whether any partition marked
pending-detach is found. Its "include_detached" input flag is changed to
"omit_detached", because that name captures desired the semantics more
naturally. CreatePartitionDirectory() and RelationGetPartitionDesc() arguments
are identically renamed. This was noticed because a buildfarm member that
runs with relcache clobbering, which would not keep the improperly cached
partdesc, broke one test, which led us to realize that the expected output of
that test was bogus. This commit also corrects that expected output. Author:
Amit Langote firstname.lastname@example.org Author: Álvaro Herrera
Fix uninitialized memory bug. Have interested callers of find_inheritance_children set the detached_exist value to false prior to calling it, so that that routine only has to set it true in the rare cases where it is necessary. Don't touch it otherwise. Per buildfarm member thorntail (which reported a UBSan failure here). https://git.postgresql.org/pg/commitdiff/43b55ec4bc3bc06596d966391f16defe016310ec
Etsuro Fujita pushed:
Fujii Masao pushed:
doc: Fix obsolete description about pg_basebackup. Previously it was documented that if using "-X none" option there was no guarantee that all required WAL files were archived at the end of pg_basebackup when taking a backup from the standby. But this limitation was removed by commit 52f8a59dd9. Now, even when taking a backup from the standby, pg_basebackup can wait for all required WAL files to be archived. Therefore this commit removes such obsolete description from the docs. Also this commit adds new description about the limitation when taking a backup from the standby, into the docs. The limitation is that pg_basebackup cannot force the standbfy to switch to a new WAL file at the end of backup, which may cause pg_basebackup to wait a long time for the last required WAL file to be switched and archived, especially when write activity on the primary is low. Back-patch to v10 where the issue was introduced. Reported-by: Kyotaro Horiguchi Author: Kyotaro Horiguchi, Fujii Masao Reviewed-by: Kyotaro Horiguchi, Fujii Masao Discussion: https://email@example.com https://git.postgresql.org/pg/commitdiff/eaec48b3c54eec222d64468b57af80ee4ddf76a9
Reorder COMPRESSION option in gram.y and parsenodes.h into alphabetical order. Commit bbe0a81db6 introduced "INCLUDING COMPRESSION" option in CREATE TABLE command, but previously TableLikeOption in gram.y and parsenodes.h didn't classify this new option in alphabetical order with the rest. Author: Fujii Masao Reviewed-by: Michael Paquier Discussion: https://postgr.es/m/YHerAixOhfR1ryXa@paquier.xyz https://git.postgresql.org/pg/commitdiff/3f20d5f37086e548c32ddb9d6ae09c2e1ce300ce
Alexander Korotkov pushed:
Noah Misch pushed:
Peter Smith sent in a patch to rearrange the option list for CREATE SUBSCRIPTION.
Bharath Rupireddy sent in another revision of a patch to add new table AMs for multi- and single- inserts, and use same for CTAS, REFRESH MATERIALIZED VIEW, and COPY.
Amul Sul sent in two more revisions of a patch to remove a redundant variable from transformCreateStmt.
Pavel Stěhule sent in another revision of a patch to make it possible to log seqscans in auto_explain.
David Rowley sent in another revision of a patch to reduce the number of contrib build special cases on Windows.
Amul Sul sent in two more revisions of a patch to add a RelationGetSmgr inline function.
Masahiko Sawada sent in two more revisions of a patch to skip vmbuffer for frozen tuple insertion.
Dagfinn Ilmari Mannsåker sent in a patch to create a function for stripping RelabelType nodes off an expression, consolidating many repetitions of the same pattern into one.
Masahiko Sawada and Amit Kapila traded patches to use HTAB for replication slot statistics.
Vigneshwaran C and Amit Kapila traded patches to update decoding stats during replication slot release.
Bharath Rupireddy sent in a patch to use WaitLatches for lock waiting in lazy_truncate_heap, in do_pg_stop_backup instead of a pg_usleep(), and for pre- and post- auth delay.
Bharath Rupireddy sent in a patch to move the parallel_leader_participation GUC to the resource consumption category.
Peter Smith sent in two more revisions of a patch to add support for prepared transactions to built-in logical replication, and add prepare API support for streaming transactions.
Dan Carter sent in a patch to add a GSSAPI ccache_name option to libpq.
Takamichi Osumi and Amit Kapila traded patches to fix an infelicity between TRUNCATE and synchronous logical replication.
Amit Langote sent in a patch to fix a tupdesc leak in the pgoutput plugin.
Bharath Rupireddy sent in a patch to skip VACUUM/ANALYZE of repeated relations.
Pavel Stěhule sent in another revision of a patch to add a PSQL_WATCH_PAGER setting to psql.
Masahiro Ikeda sent in another revision of a patch to make some performance improvements in reporting WAL stats without introducing a new variable.
Fujii Masao sent in four more revisions of a patch to document the way TRUNCATE works on foreign tables, and ensure that any ONLY clauses in the original query not be passed to same.
Hou Zhijie sent in a patch to fix a test case with the wrong parallel safety flag.
Zeng Wenjing sent in another revision of a patch to implement global temporary tables.
Simon Riggs sent in a patch to document the fact that altering a constraint to VALIDATE it requires a SHARE UPDATE EXCLUSIVE lock.
Simon Riggs sent in a patch to reduce the lock level for CHECK constraints when allowing them to be NOT VALID.
Daniil Zakhlystov sent in another revision of a patch to add zlib and zstd streaming compression, and implement libpq compression.
Tom Lane sent in a patch to document Julian dates better.
Álvaro Herrera sent in a patch to add tab-complete for ALTER TABLE .. DETACH PARTITION CONCURRENTLY to psql.
Tom Stellard sent in a patch to jit to work around a potential data layout mismatch on s390x.
Justin Pryzby sent in a patch to add COMPRESSION as a possibility when executing CREATE TABLE ... LIKE.
Kyotaro HORIGUCHI sent in a patch to fix up some dubious messages.
Tang sent in a patch to use pg_strncasecmp to replace strncmp when comparing things "pg_" in psql.
Tang sent in another revision of a patch to support tab completion for upper case character inputs in psql.
Hou Zhijie sent in another revision of a patch to make it possible to execute INSERT SELECT in parallel.
Mark Dilger and Robert Haas traded patches to add toast pointer corruption checks to pg_amcheck.
Bharath Rupireddy sent in a patch to MAXALIGN sizeof(BTPageOpaqueData) in PageGetItemIdCareful.
Ajin Cherian sent in another revision of a patch to skip empty transactions for logical replication.
Alexander Pyhalov sent in another revision of a patch to push down restrictinfos to CTEs, and attempt to prune partitions in the process.
Thomas Munro sent in a patch to add a new TAP test under src/test/recovery that runs the regression tests with wal_consistency_checking=all.
Joel Jacobson sent in a patch to fix pg_identify_object_as_address for event triggers.
Takamichi Osumi sent in a patch to replace the check of RelationIsLogicallyLogged in ReorderBufferProcessTXN with an Assert to the same effect.
David Rowley sent in another revision of a patch to speed up NOT IN() with a set of Consts by allowing hash tables to be used.
David Rowley and Yura Sokolov traded patches to use simplehash.h instead of dynahash in SMgr.
Julien Rouhaud sent in a patch to fix some oversights in query_id calculation.
Tom Lane sent in a patch to make it required for callers of pq_getmessage to provide an upper length bound, and installs the same sort of short-vs-long message heuristic as libpq has in the server.