The latest PostgreSQL 15 now available – here’s a detailed description of changes

PostgreSQL 15

On October 13, 2022, the PostgreSQL Global Development Group team released the latest version of the highly anticipated PostgreSQL 15 database engine, so it's a good opportunity to get a closer look at the freshest product, comparing it to the previous version. As standard, we will also check the current position of PostgreSQL in the market.

PostgreSQL is a system for managing object-relational databases. It allows storing data in the form of a table with multiple relationships and manipulating them simultaneously using SQL. PostgreSQL was developed at the Department of Computer Science at the University of California, Berkeley. With more than two decades of development behind it, it is currently the most advanced open source database. For more information on the history of Postgres, as well as the user dispute between the name PostgreSQL and Postgres, see our article detailing the changes in PostgreSQL 14.

Behind the scenes of Postgres 15

Watching developers struggle with the problems encountered with beta versions on an ongoing basis, one can come to the conclusion that there was a lot of room for improvement in PostgreSQL 15. The latest Postgres actually lived to see as many as 4 beta versions and 2 RCs (Release Candidate). This by no means indicates a lack of competence on the part of the developers; on the contrary, grappling with such a huge project is fraught with the presence of certain challenges, which the developers are constantly solving. At the same time, many users are testing the operation of subsequent versions on their own environment, reporting new, often very intricate bugs. Hence, we offer well-deserved congratulations and wish you a moment of rest.

PostgreSQL's position in the market

Google Trends service will once again serve us to verify the popularity of PostgreSQL (in blue) against its rivals. On the chart you can see the beginning of the global pandemic at the end of 2020. This is the period when search results dropped dramatically, only to skyrocket again in January 2022. This could have been due to the emergence of many companies selling their products online. Rival database Oracle (in red) did not have such a process, perhaps because only very large corporations that can afford to overpay are reaching for it. MongoDB (yellow), as a free alternative to Postgres, has also received some small boost in interest.

PostgreSQL 15

The graph shows interest in specific solutions over time. The peak of popularity of a phrase in Google searches was marked as a value of 100. A value of 50 means that the phrase was twice less popular.

PostgreSQL 15

The map illustrates the popularity of PostgreSQL (blue), Oracle DB (red), MongoDB (yellow) over the last 10 years. The darker the color, the greater the advantage in a given region. The gray color indicates a lack of data.

PostgreSQL 15 vs. PostgreSQL 14

The latest release of PostgreSQL has set a high priority on performance improvements. In-memory and on-disk sorting algorithms have been upgraded, making test results show performance gains of 25% to as much as 400% depending on the data types being sorted. The performance improvements in the latest version of PostgreSQL 15 don't stop there, and also include archiving features, as well as backups. The latest PostgreSQL also features greater flexibility in managing logical replication. Row filtering, column listing or features that simplify conflict management are just a few of the many useful features that PostgreSQL 15 offers.

A significant difference from the previous version can also be seen in the new log format. These can now be processed in structured logging systems. The configuration of Postgres itself has also been improved. As of this version, administrators have the ability to give users permission to change configuration parameters at the server level. In addition, users can now query configuration information using the `\config` command from the psql command-line tool.

Other noteworthy new features include changes in the way statistics are collected, the ability to set the collate ICU as the default, the addition of the pg_walinspect extension, a change in the permission policy for the public (default) schema, as well as the removal of the backup disable mode and the dropping of support for Python 2 from PL/Python.

The aforementioned information are only the changes that are noticeable at first glance. To find out what else to expect from the latest release of the best open source database, we invite you to read the detailed list of changes, available below.

Detailed list of changes in PostgreSQL 15


Change Additional informations Author(s)
Record and check the collation version of each database This feature is designed to detect collation version changes to avoid index corruption. Function pg_database_collation_actual_version() reports the underlying operating system collation version, and ALTER DATABASE ... REFRESH sets the recorded database collation version to match the operating system collation version. Peter Eisentraut
Allow ICU collations to be set as the default for clusters and databases Previously, only libc-based collations could be selected at the cluster and database levels. ICU collations could only be used via explicit COLLATE clauses. Peter Eisentraut
Add system view pg_ident_file_mappings to report pg_ident.conf information - Julien Rouhaud

Server – partitioning

Change Additional informations Author(s)
Improve planning time for queries referencing partitioned tables This change helps when only a few of many partitions are relevant. David Rowley
Allow ordered scans of partitions to avoid sorting in more cases Previously, a partitioned table with a DEFAULT partition or a LIST partition containing multiple values could not be used for ordered partition scans. Now they can be used if such partitions are pruned during planning. David Rowley
Improve foreign key behavior of updates on partitioned tables that move rows between partitions Previously, such updates ran a delete action on the source partition and an insert action on the target partition. PostgreSQL will now run an update action on the partition root, providing cleaner semantics. Amit Langote
Allow CLUSTER on partitioned tables - Justin Pryzby
Fix ALTER TRIGGER RENAME on partitioned tables to properly rename triggers on all partitions Also prohibit cloned triggers from being renamed. Arne Roland, Álvaro Herrera

Server – indexes

Change Additional informations Author(s)
Allow btree indexes on system and TOAST tables to efficiently store duplicates Previously de-duplication was disabled for these types of indexes. Peter Geoghegan
Improve lookup performance of GiST indexes that were built using sorting - Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin
Allow unique constraints and indexes to treat NULL values as not distinct Previously NULL entries were always treated as distinct values, but this can now be changed by creating constraints and indexes using UNIQUE NULLS NOT DISTINCT. Peter Eisentraut
Allow the ^@ starts-with operator and the starts_with() function to use btree indexes if using the C collation Previously these could only use SP-GiST indexes. Tom Lane

Server – optimizer

Change Additional informations Author(s)
Allow extended statistics to record statistics for a parent with all its children Regular statistics already tracked parent and parent-plus-all-children statistics separately. Tomas Vondra, Justin Pryzby
Add server variable recursive_worktable_factor to allow the user to specify the expected size of the working table of a recursive query - Simon Riggs

Server – general performance

Change Additional informations Author(s)
Allow hash lookup for NOT IN clauses with many constants Previously the code always sequentially scanned the list of values. David Rowley, James Coleman
Allow SELECT DISTINCT to be parallelized - David Rowley
Speed up encoding validation of UTF-8 text by processing 16 bytes at a time This will improve text-heavy operations like COPY FROM. John Naylor, Heikki Linnakangas
Improve performance for sorts that exceed work_mem When the sort data no longer fits in work_mem, switch to a batch sorting algorithm that uses more output streams than before. Heikki Linnakangas
Improve performance and reduce memory consumption of in-memory sorts - Ronan Dunklau, David Rowley, Thomas Munro, John Naylor
Allow WAL full page writes to use LZ4 and Zstandard compression This is controlled by the wal_compression server setting. Andrey Borodin, Justin Pryzby
Add support for writing WAL using direct I/O on macOS This only works if max_wal_senders = 0 and wal_level = minimal. Thomas Munro
Allow vacuum to be more aggressive in setting the oldest frozen and multi transaction id - Peter Geoghegan
Allow a query referencing multiple foreign tables to perform parallel foreign table scans in more cases - Andrey Lepikhov, Etsuro Fujita
Improve the performance of window functions that use row_number(), rank(), dense_rank() and count() - David Rowley
Improve the performance of spinlocks on high-core-count ARM64 systems - Geoffrey Blake

Server – monitoring

Change Additional informations Author(s)
Enable default logging of checkpoints and slow autovacuum operations This changes the default of log_checkpoints to on and that of log_autovacuum_min_duration to 10 minutes. This will cause even an idle server to generate some log output, which might cause problems on resource-constrained servers without log file rotation. These defaults should be changed in such cases. Bharath Rupireddy
Generate progress messages in the server log during slow server starts The messages report the cause of the delay. The time interval for notification is controlled by the new server variable log_startup_progress_interval. Nitin Jadhav, Robert Haas
Store cumulative statistics system data in shared memory Previously this data was sent to a statistics collector process via UDP packets, and could only be read by sessions after transferring it via the file system. There is no longer a separate statistics collector process. Kyotaro Horiguchi, Andres Freund, Melanie Plageman
Add additional information to VACUUM VERBOSE and autovacuum logging messages - Peter Geoghegan
Add EXPLAIN (BUFFERS) output for temporary file block I/O - Masahiko Sawada
Allow log output in JSON format The new setting is log_destination = jsonlog. Sehrope Sarkuni, Michael Paquier
Allow pg_stat_reset_single_table_counters() to reset the counters of relations shared across all databases - Sadhuprasad Patro
Add wait events for local shell commands The new wait events are used when calling archive_command, archive_cleanup_command, restore_command and recovery_end_command. Fujii Masao

Server – privileges

Change Additional informations Author(s)
Allow table accesses done by a view to optionally be controlled by privileges of the view's caller Previously, view accesses were always treated as being done by the view's owner. That's still the default. Christoph Heiss
Allow members of the pg_write_server_files predefined role to perform server-side base backups Previously only superusers could perform such backups. Dagfinn Ilmari Mannsåker
Allow GRANT to grant permissions to change individual server variables via SET and ALTER SYSTEM The new function has_parameter_privilege() reports on this privilege. Mark Dilger
Add predefined role pg_checkpoint that allows members to run CHECKPOINT Previously checkpoints could only be run by superusers. Jeff Davis
Allow members of the pg_read_all_stats predefined role to access the views pg_backend_memory_contexts and pg_shmem_allocations Previously these views could only be accessed by superusers. Bharath Rupireddy
Allow GRANT to grant permissions on pg_log_backend_memory_contexts() Previously this function could only be run by superusers. Jeff Davis

Server – server configuration

Change Additional informations Author(s)
Add server variable shared_memory_size to report the size of allocated shared memory - Nathan Bossart
Add server variable shared_memory_size_in_huge_pages to report the number of huge memory pages required This is only supported on Linux. Nathan Bossart
Honor server variable shared_preload_libraries in single-user mode This change supports use of shared_preload_libraries to load custom access methods and WAL resource managers, which would be essential for database access even in single-user mode. Jeff Davis
On Solaris, make the default setting of dynamic_shared_memory_type be sysv The previous default choice, posix, can result in spurious failures on this platform. Thomas Munro
Allow postgres -C to properly report runtime-computed values Previously runtime-computed values data_checksums, wal_segment_size, and data_directory_mode would report values that would not be accurate on the running server. However, this does not work on a running server. Nathan Bossart

Streaming replication and recovery

Change Additional informations Author(s)
Add support for LZ4 and Zstandard compression of server-side base backups - Jeevan Ladhe, Robert Haas
Run the checkpointer and bgwriter processes during crash recovery This helps to speed up long crash recoveries. Thomas Munro
Allow WAL processing to pre-fetch needed file contents This is controlled by the server variable recovery_prefetch. Thomas Munro
Allow archiving via loadable modules Previously, archiving was only done by calling shell commands. The new server variable archive_library can be set to specify a library to be called for archiving. Nathan Bossart
No longer require IDENTIFY_SYSTEM to be run before START_REPLICATION - Jeff Davis

Streaming replication and recovery – logical replication

Change Additional informations Author(s)
Allow publication of all tables in a schema For example, this syntax is now supported: CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s1,s2. ALTER PUBLICATION supports a similar syntax. Tables added later to the listed schemas will also be replicated. Vignesh C, Hou Zhijie, Amit Kapila
Allow publication content to be filtered using a WHERE clause Rows not satisfying the WHERE clause are not published. Hou Zhijie, Euler Taveira, Peter Smith, Ajin Cherian, Tomas Vondra, Amit Kapila
Allow publication content to be restricted to specific columns - Tomas Vondra, Álvaro Herrera, Rahila Syed
Allow skipping of transactions on a subscriber using ALTER SUBSCRIPTION ... SKIP - Masahiko Sawada
Add support for prepared (two-phase) transactions to logical replication The new CREATE_REPLICATION_SLOT option is called TWO_PHASE. pg_recvlogical now supports a new --two-phase option during slot creation. Peter Smith, Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich
Prevent logical replication of empty transactions Previously, publishers would send empty transactions to subscribers if subscribed tables were not modified. Ajin Cherian, Hou Zhijie, Euler Taveira
Add SQL functions to monitor the directory contents of logical replication slots The new functions are pg_ls_logicalsnapdir(), pg_ls_logicalmapdir(), and pg_ls_replslotdir(). They can be run by members of the predefined pg_monitor role. Bharath Rupireddy
Allow subscribers to stop the application of logical replication changes on error This is enabled with the subscriber option disable_on_error and avoids possible infinite error loops during stream application. Osumi Takamichi, Mark Dilger
Adjust subscriber server variables to match the publisher so datetime and float8 values are interpreted consistently Some publishers might be relying on inconsistent behavior. Japin Li
Add system view pg_stat_subscription_stats to report on subscriber activity The new function pg_stat_reset_subscription_stats() allows resetting these statistics counters. Masahiko Sawada
Suppress duplicate entries in the pg_publication_tables system view In some cases a partition could appear more than once. Hou Zhijie

Utility Commands

Change Additional informations Author(s)
Add SQL MERGE command to adjust one table to match another This is similar to INSERT ... ON CONFLICT but more batch-oriented. Simon Riggs, Pavan Deolasee, Álvaro Herrera, Amit Langote
Add support for HEADER option in COPY text format The new option causes the column names to be output, and optionally verified on input. Rémi Lapeyre
Add new WAL-logged method for database creation This is the new default method for copying the template database, as it avoids the need for checkpoints during database creation. However, it might be slow if the template database is large, so the old method is still available. Dilip Kumar
Allow CREATE DATABASE to set the database OID - Shruthi Gowda, Antonin Houska
Prevent DROP DATABASE, DROP TABLESPACE, and ALTER DATABASE SET TABLESPACE from occasionally failing during concurrent use on Windows - Thomas Munro
Allow foreign key ON DELETE SET actions to affect only specified columns Previously, all of the columns in the foreign key were always affected. Paul Martinez
Allow ALTER TABLE to modify a table's ACCESS METHOD - Justin Pryzby, Jeff Davis
Properly call object access hooks when ALTER TABLE causes table rewrites - Michael Paquier
Allow creation of unlogged sequences - Peter Eisentraut
Track dependencies on individual columns in the results of functions returning composite types Previously, if a view or rule contained a reference to a specific column within the result of a composite-returning function, that was not noted as a dependency; the view or rule was only considered to depend on the composite type as a whole. This meant that dropping the individual column would be allowed, causing problems in later use of the view or rule. The column-level dependency is now also noted, so that dropping such a column will be rejected unless the view is changed or dropped. Tom Lane

Data Types

Change Additional informations Author(s)
Allow the scale of a numeric value to be negative, or greater than its precision This allows rounding of values to the left of the decimal point, e.g., '1234'::numeric(4, -2) returns 1200. Dean Rasheed, Tom Lane
Improve overflow detection when casting values to interval - Joe Koshakow
Change the I/O format of type "char" for non-ASCII characters - Tom Lane
Update the display width information of modern Unicode characters, like emojis Also update from Unicode 5.0 to 14.0.0. There is now an automated way to keep Postgres updated with Unicode releases. Jacob Champion


Change Additional informations Author(s)
Add multirange input to range_agg() - Paul Jungwirth
Add MIN() and MAX() aggregates for the xid8 data type - Ken Kato
Add regular expression functions for compatibility with other relational systems The new functions are regexp_count(), regexp_instr(), regexp_like(), and regexp_substr(). Some new optional arguments were also added to regexp_replace(). Gilles Darold, Tom Lane
Add the ability to compute the distance between polygons - Tom Lane
Add to_char() format codes of, tzh, and tzm The upper-case equivalents of these were already supported. Nitin Jadhav
When applying AT TIME ZONE to a time with time zone value, use the transaction start time rather than wall clock time to determine whether DST applies This allows the conversion to be considered stable rather than volatile, and it saves a kernel call per invocation. Aleksander Alekseev, Tom Lane
Ignore NULL array elements in ts_delete() and setweight() functions with array arguments These functions effectively ignore empty-string array elements (since those could never match a valid lexeme). It seems consistent to let them ignore NULL elements too, instead of failing. Jean-Christophe Arnu
Add support for petabyte units to pg_size_pretty() and pg_size_bytes() - David Christensen
Change pg_event_trigger_ddl_commands() to output references to other sessions' temporary schemas using the actual schema name Previously this function reported all temporary schemas as pg_temp, but it's misleading to use that for any but the current session's temporary schema. Tom Lane


Change Additional informations Author(s)
Fix enforcement of PL/pgSQL variable CONSTANT markings Previously, a variable could be used as a CALL output parameter or refcursor OPEN variable despite being marked CONSTANT. Tom Lane


Change Additional informations Author(s)
Allow IP address matching against a server certificate's Subject Alternative Name - Jacob Champion
Allow PQsslAttribute() to report the SSL library type without requiring a libpq connection - Jacob Champion
Change query cancellations sent by the client to use the same TCP settings as normal client connections This allows configured TCP timeouts to apply to query cancel connections. Jelte Fennema
Prevent libpq event callback failures from forcing an error result - Tom Lane

Client applications

Change Additional informations Author(s)
Allow pgbench to retry after serialization and deadlock failures - Yugo Nagata, Marina Polyakova

Client applications – psql

Change Additional informations Author(s)
Improve performance of psql's \copy command, by sending data in larger chunks - Heikki Linnakangas
Add \dconfig command to report server variables This is similar to the server-side SHOW command, but it can process patterns to show multiple variables conveniently. Mark Dilger, Tom Lane
Add \getenv command to assign the value of an environment variable to a psql variable - Tom Lane
Add + option to the \lo_list and \dl commands to show large-object privileges - Pavel Luzanov
Add a pager option for the \watch command This is only supported on Unix and is controlled by the PSQL_WATCH_PAGER environment variable. Pavel Stehule, Thomas Munro
Make psql include intra-query double-hyphen comments in queries sent to the server Previously such comments were removed from the query before being sent. Double-hyphen comments that are before any query text are not sent, and are not recorded as separate psql history entries. Tom Lane, Greg Nancarrow
Adjust psql so that Readline's meta-# command will insert a double-hyphen comment marker Previously a pound marker was inserted, unless the user had taken the trouble to configure a non-default comment marker. Tom Lane
Make psql output all results when multiple queries are passed to the server at once Previously, only the last query result was displayed. The old behavior can be restored by setting the SHOW_ALL_RESULTS psql variable to off. Fabien Coelho
After an error is detected in --single-transaction mode, change the final COMMIT command to ROLLBACK only if ON_ERROR_STOP is set Previously, detection of an error in a -c command or -f script file would lead to issuing ROLLBACK at the end, regardless of the value of ON_ERROR_STOP. Michael Paquier
Improve psql's tab completion - Shinya Kato, Dagfinn Ilmari Mannsåker, Peter Smith, Koyu Tanigawa, Ken Kato, David Fetter, Haiying Tang, Peter Eisentraut, Álvaro Herrera, Tom Lane, Masahiko Sawada
Limit support of psql's backslash commands to servers running PostgreSQL 9.2 or later Remove code that was only used when running with an older server. Commands that do not require any version-specific adjustments compared to 9.2 will still work. Tom Lane

Client applications – pg_dump

Change Additional informations Author(s)
Make pg_dump dump public schema ownership changes and security labels - Noah Misch
Improve performance of dumping databases with many objects This will also improve the performance of pg_upgrade. Tom Lane
Improve parallel pg_dump's performance for tables with large TOAST tables - Tom Lane
Add dump/restore option --no-table-access-method to force restore to only use the default table access method - Justin Pryzby
Limit support of pg_dump and pg_dumpall to servers running PostgreSQL 9.2 or later - Tom Lane

Server applications

Change Additional informations Author(s)
Add new pg_basebackup option --target to control the base backup location The new options are server to write the backup locally and blackhole to discard the backup (for testing). Robert Haas
Allow pg_basebackup to do server-side gzip, LZ4, and Zstandard compression and client-side LZ4 and Zstandard compression of base backup files Client-side gzip compression was already supported. Dipesh Pandit, Jeevan Ladhe
Allow pg_basebackup to compress on the server side and decompress on the client side before storage This is accomplished by specifying compression on the server side and plain output format. Dipesh Pandit
Allow pg_basebackup's --compress option to control the compression location (server or client), compression method, and compression options - Michael Paquier, Robert Haas
Add the LZ4 compression method to pg_receivewal This is enabled via --compress=lz4 and requires binaries to be built using --with-lz4. Georgios Kokolatos
Add additional capabilities to pg_receivewal's --compress option - Georgios Kokolatos
Improve pg_receivewal's ability to restart at the proper WAL location Previously, pg_receivewal would start based on the WAL file stored in the local archive directory, or at the sending server's current WAL flush location. With this change, if the sending server is running Postgres 15 or later, the local archive directory is empty, and a replication slot is specified, the replication slot's restart point will be used. Ronan Dunklau
Add pg_rewind option --config-file to simplify use when server configuration files are stored outside the data directory - Gunnar Bluth

Server applications – pg_upgrade

Change Additional informations Author(s)
Store pg_upgrade's log and temporary files in a subdirectory of the new cluster called pg_upgrade_output.d Previously such files were left in the current directory, requiring manual cleanup. Now they are automatically removed on successful completion of pg_upgrade. Justin Pryzby
Disable default status reporting during pg_upgrade operation if the output is not a terminal The status reporting output can be enabled for non-tty usage by using --verbose. Andres Freund
Make pg_upgrade report all databases with invalid connection settings Previously only the first database with an invalid connection setting was reported. Jeevan Ladhe
Make pg_upgrade preserve tablespace and database OIDs, as well as relation relfilenode numbers - Shruthi Gowda, Antonin Houska
Add a --no-sync option to pg_upgrade This is recommended only for testing. Michael Paquier
Limit support of pg_upgrade to old servers running PostgreSQL 9.2 or later - Tom Lane

Server applications – pg_waldump

Change Additional informations Author(s)
Allow pg_waldump output to be filtered by relation file node, block number, fork number, and full page images - David Christensen, Thomas Munro
Make pg_waldump report statistics before an interrupted exit For example, issuing a control-C in a terminal running pg_waldump --stats --follow will report the current statistics before exiting. This does not work on Windows. Bharath Rupireddy
Improve descriptions of some transaction WAL records reported by pg_waldump - Masahiko Sawada, Michael Paquier
Allow pg_waldump to dump information about multiple resource managers This is enabled by specifying the --rmgr option multiple times. Heikki Linnakangas


Change Additional informations Author(s)
Add documentation for pg_encoding_to_char() and pg_char_to_encoding() - Ian Lawrence Barwick
Document the ^@ starts-with operator - Tom Lane

Source Code

Change Additional informations Author(s)
Add support for continuous integration testing using cirrus-ci - Andres Freund, Thomas Munro, Melanie Plageman
Add configure option --with-zstd to enable Zstandard builds - Jeevan Ladhe, Robert Haas, Michael Paquier
Add an ABI identifier field to the magic block in loadable libraries, allowing non-community PostgreSQL distributions to identify libraries that are not compatible with other builds An ABI field mismatch will generate an error at load time. Peter Eisentraut
Create a new pg_type.typcategory value for "char" Some other internal-use-only types have also been assigned to this category. Tom Lane
Add new protocol message TARGET to specify a new COPY method to be used for base backups pg_basebackup now uses this method. Robert Haas
Add new protocol message COMPRESSION and COMPRESSION_DETAIL to specify the compression method and options - Robert Haas
Remove server support for old BASE_BACKUP command syntax and base backup protocol - Robert Haas
Add support for extensions to set custom backup targets - Robert Haas
Allow extensions to define custom WAL resource managers - Jeff Davis
Add function pg_settings_get_flags() to get the flags of server variables - Justin Pryzby
On Windows, export all the server's global variables using PGDLLIMPORT markers Previously, only specific variables were accessible to extensions on Windows. Robert Haas
Require GNU make version 3.81 or later to build PostgreSQL - Tom Lane
Require OpenSSL to build the pgcrypto extension - Peter Eisentraut
Require Perl version 5.8.3 or later - Dagfinn Ilmari Mannsåker
Require Python version 3.2 or later - Andres Freund

Additional modules

Change Additional informations Author(s)
Allow amcheck to check sequences - Mark Dilger
Improve amcheck sanity checks for TOAST tables - Mark Dilger
Add new module basebackup_to_shell as an example of a custom backup target - Robert Haas
Add new module basic_archive as an example of performing archiving via a library - Nathan Bossart
Allow btree_gist indexes on boolean columns These can be used for exclusion constraints. Emre Hasegeli
Fix pageinspect's page_header() to handle 32-kilobyte page sizes Previously, improper negative values could be returned in certain cases. Quan Zongliang
Add counters for temporary file block I/O to pg_stat_statements - Masahiko Sawada
Add JIT counters to pg_stat_statements - Magnus Hagander
Add new module pg_walinspect This gives SQL-level output similar to pg_waldump. Bharath Rupireddy
Indicate the permissive/enforcing state in sepgsql log messages - Dave Page

Additional modules – postgres_fdw

Change Additional informations Author(s)
Allow postgres_fdw to push down CASE expressions - Alexander Pyhalov
Add server variable postgres_fdw.application_name to control the application name of postgres_fdw connections Previously the remote session's application_name could only be set on the remote server or via a postgres_fdw connection specification. postgres_fdw.application_name supports some escape sequences for customization, making it easier to tell such connections apart on the remote server. Hayato Kuroda
Allow parallel commit on postgres_fdw servers This is enabled with the CREATE SERVER option parallel_commit. Etsuro Fujita

Summary and a word about the creators

Often when we look at a product, we don't see the people behind it. We don't see those who put their hearts and took the time to create it. So it is a good experience for our imagination to occasionally look at a product from a different angle. We will try to put a picture of the Postgres developers in a few words. PostgreSQL Global Development Group is a private non-profit company that has been known in the market for 26 years. Invariably, it has been actively involved in improving the quality of the PostgreSQL database system for more than 15 years. It currently has 71 professionals, or at least that number appears on its official LinkedIn profile. The company notes that its main office is located in the United States - but does not specify where specifically. Interestingly, when asked, Google Maps points to Canada. But maybe in reality PostgreSQL Global Development Group does not have an office and everyone works from anywhere in the world? One thing we are sure of - it doesn't matter where they do their work - they do it brilliantly, and each new version becomes the working standard for millions of developers.