E.3. Release 15
Was this helpful?
Was this helpful?
Release date: 2022-10-13
PostgreSQL 15 contains many new features and enhancements, including:
Support for the SQL command.
Selective publication of tables' contents within publications, through the ability to specify column lists and row filter conditions.
More options for compression, including support for Zstandard (zstd) compression. This includes support for performing compression on the server side during .
Support for structured using the JSON format.
Performance improvements, particularly for in-memory and on-disk sorting.
The above items and other new features of PostgreSQL 15 are explained in more detail in the sections below.
A dump/restore using or use of or logical replication is required for those wishing to migrate data from any previous release. See for general information on migrating to new major releases.
Version 15 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:
Remove PUBLIC
creation permission on the (Noah Misch)
The new default is one of the secure schema usage patterns that has recommended since the security release for CVE-2018-1058. The change applies to new database clusters and to newly-created databases in existing clusters. Upgrading a cluster or restoring a database dump will preserve public
's existing permissions.
For existing databases, especially those having multiple users, consider revoking CREATE
permission on the public
schema to adopt this new default. For new databases having no need to defend against insider threats, granting CREATE
permission will yield the behavior of prior releases.
Change the owner of the public
schema to be the new pg_database_owner
role (Noah Misch)
This allows each database's owner to have ownership privileges on the public
schema within their database. Previously it was owned by the bootstrap superuser, so that non-superuser database owners could not do anything with it.
This change applies to new database clusters and to newly-created databases in existing clusters. Upgrading a cluster or restoring a database dump will preserve public
's existing ownership specification.
Remove long-deprecated (David Steele, Nathan Bossart)
If the database server stops abruptly while in this mode, the server could fail to start. The non-exclusive backup mode is considered superior for all purposes. Functions pg_start_backup()
/pg_stop_backup()
have been renamed to pg_backup_start()
/pg_backup_stop()
, and the functions pg_backup_start_time()
and pg_is_in_backup()
have been removed.
Increase default to 2.0 (Peter Geoghegan)
This allows query hash operations to use more memory than other operations.
Remove server-side language and generic Python language plpythonu
(Andres Freund)
Python 2.x is no longer supported. While the original intent of plpythonu
was that it could eventually refer to plpython3u
, changing it now seems more likely to cause problems than solve them, so it's just been removed.
Generate an error if is passed an empty-string array element (Jean-Christophe Arnu)
This is prohibited because lexemes should never be empty. Users of previous Postgres releases should verify that no empty lexemes are stored because they can lead to dump/restore failures and inconsistent results.
Generate an error when is supplied with a negative argument (Peter Eisentraut)
Prevent from changing the collation of an output column (Tom Lane)
Disallow zero-length , e.g., U&""
(Peter Eisentraut)
Non-Unicode zero-length identifiers were already disallowed.
Prevent from having non-numeric trailing characters (Peter Eisentraut)
Previously, query text like 123abc
would be interpreted as 123
followed by a separate token abc
.
Adjust numeric literal processing to match the SQL/JSON-standard (Peter Eisentraut)
This accepts numeric formats like .1
and 1.
, and disallows trailing junk after numeric literals, like 1.type()
.
When input provides a fractional value for a unit greater than months, round to the nearest month (Bruce Momjian)
For example, convert 1.99 years
to 2 years
, not 1 year 11 months
as before.
Improve consistency of interval
parsing with trailing periods (Tom Lane)
Numbers with trailing periods were rejected on some platforms.
Mark the interval
output function as stable, not immutable, since it depends on (Tom Lane)
This will, for example, cause creation of indexes relying on the text output of interval
values to fail.
Detect integer overflow in (Joe Koshakow)
The affected functions are justify_interval()
, justify_hours()
, and justify_days()
.
Change the I/O format of type "char"
for non-ASCII characters (Tom Lane)
Bytes with the high bit set are now output as a backslash and three octal digits, to avoid encoding issues.
Remove the default privilege a login role has on its own role membership (Robert Haas)
Previously, a login role could add/remove members of its own role, even without ADMIN OPTION
privilege.
Allow to run as the owner of the subscription (Mark Dilger)
Because row-level security policies are not checked, only superusers, roles with bypassrls
, and table owners can replicate into tables with row-level security policies.
Prevent UPDATE
and DELETE
operations on tables where the subscription owner does not have SELECT
permission on the table (Jeff Davis)
UPDATE
and DELETE
commands typically involve reading the table as well, so require the subscription owner to have table SELECT
permission.
When references the session's temporary object schema, refer to it as pg_temp
(Amul Sul)
Previously the actual schema name was reported, leading to inconsistencies across sessions.
Fix to sum values for the rare case of TOAST tables with multiple indexes (Andrei Zubkov)
Previously such cases would show one row for each index.
Disallow setting that match the name of an installed extension, but are not one of the extension's declared variables (Florin Irion, Tom Lane)
This change causes any such pre-existing variables to be deleted during extension load, and then prevents new ones from being created later in the session. The intent is to prevent confusion about whether a variable is associated with an extension or not.
Remove obsolete server variable stats_temp_directory
(Andres Freund, Kyotaro Horiguchi)
Improve the algorithm used to compute (Fabien Coelho)
This will cause random()
's results to differ from what was emitted by prior versions, even for the same seed value.
libpq's function is no longer supported in pipeline mode (Álvaro Herrera)
Applications that are using that combination will need to be modified to use PQsendQueryParams()
instead.
On non-Windows platforms, consult the HOME
environment variable to find the user's home directory (Anders Kaseorg)
If HOME
is empty or unset, fall back to the previous method of checking the <pwd.h>
database. This change affects libpq (for example, while looking up ~/.pgpass
) as well as various client application programs.
Remove 's --no-synchronized-snapshots
option (Tom Lane)
All still-supported server versions support synchronized snapshots, so there's no longer a need for this option.
After an error is detected in 's --single-transaction
mode, change the final COMMIT
command to ROLLBACK
only if ON_ERROR_STOP
is set (Michael Paquier)
Avoid unnecessary casting of constants in queries sent by (Dian Fay)
When column types are intentionally different between local and remote databases, such casts could cause errors.
Remove 's xml_is_well_formed()
function (Tom Lane)
This function has been implemented in the core backend since Postgres 9.1.
Allow to indicate if they support projections (Sven Klemm)
The default is now that custom scan providers are assumed to not support projections; those that do will need to be updated for this release.
Below you will find a detailed account of the changes between PostgreSQL 15 and the previous major release.
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.
Previously, only libc-based collations could be selected at the cluster and database levels. ICU collations could only be used via explicit COLLATE
clauses.
Improve planning time for queries referencing partitioned tables (David Rowley)
This change helps when only a few of many partitions are relevant.
Allow ordered scans of partitions to avoid sorting in more cases (David Rowley)
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.
Improve foreign key behavior of updates on partitioned tables that move rows between partitions (Amit Langote)
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.
Also prohibit cloned triggers from being renamed.
Previously de-duplication was disabled for these types of indexes.
Allow unique constraints and indexes to treat NULL
values as not distinct (Peter Eisentraut)
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
.
Regular statistics already tracked parent and parent-plus-all-children statistics separately.
Previously the code always sequentially scanned the list of values.
Allow SELECT DISTINCT
to be parallelized (David Rowley)
Speed up encoding validation of UTF-8 text by processing 16 bytes at a time (John Naylor, Heikki Linnakangas)
When the sort data no longer fits in work_mem
, switch to a batch sorting algorithm that uses more output streams than before.
Improve performance and reduce memory consumption of in-memory sorts (Ronan Dunklau, David Rowley, Thomas Munro, John Naylor)
This only works if max_wal_senders = 0
and wal_level = minimal
.
Improve the performance of spinlocks on high-core-count ARM64 systems (Geoffrey Blake)
Enable default logging of checkpoints and slow autovacuum operations (Bharath Rupireddy)
Generate progress messages in the server log during slow server starts (Nitin Jadhav, Robert Haas)
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.
Add additional information to VACUUM VERBOSE
and autovacuum logging messages (Peter Geoghegan)
The new setting is log_destination = jsonlog
.
The new wait events are used when calling archive_command
, archive_cleanup_command
, restore_command
and recovery_end_command
.
Previously, view accesses were always treated as being done by the view's owner. That's still the default.
Previously only superusers could perform such backups.
The new function has_parameter_privilege()
reports on this privilege.
Previously checkpoints could only be run by superusers.
Previously these views could only be accessed by superusers.
Previously this function could only be run by superusers.
This is only supported on Linux.
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.
The previous default choice, posix
, can result in spurious failures on this platform.
Run the checkpointer and bgwriter processes during crash recovery (Thomas Munro)
This helps to speed up long crash recoveries.
Allow WAL processing to pre-fetch needed file contents (Thomas Munro)
Allow archiving via loadable modules (Nathan Bossart)
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.
Allow publication content to be filtered using a WHERE
clause (Hou Zhijie, Euler Taveira, Peter Smith, Ajin Cherian, Tomas Vondra, Amit Kapila)
Rows not satisfying the WHERE
clause are not published.
Allow publication content to be restricted to specific columns (Tomas Vondra, Álvaro Herrera, Rahila Syed)
Add support for prepared (two-phase) transactions to logical replication (Peter Smith, Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich)
Prevent logical replication of empty transactions (Ajin Cherian, Hou Zhijie, Euler Taveira)
Previously, publishers would send empty transactions to subscribers if subscribed tables were not modified.
Add SQL functions to monitor the directory contents of logical replication slots (Bharath Rupireddy)
Allow subscribers to stop the application of logical replication changes on error (Osumi Takamichi, Mark Dilger)
Adjust subscriber server variables to match the publisher so datetime and float8 values are interpreted consistently (Japin Li)
Some publishers might be relying on inconsistent behavior.
In some cases a partition could appear more than once.
This is similar to INSERT ... ON CONFLICT
but more batch-oriented.
The new option causes the column names to be output, and optionally verified on input.
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.
Previously, all of the columns in the foreign key were always affected.
Track dependencies on individual columns in the results of functions returning composite types (Tom Lane)
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.
This allows rounding of values to the left of the decimal point, e.g., '1234'::numeric(4, -2)
returns 1200.
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 (Jacob Champion)
Also update from Unicode 5.0 to 14.0.0. There is now an automated way to keep Postgres updated with Unicode releases.
Add regular expression functions for compatibility with other relational systems (Gilles Darold, Tom Lane)
The upper-case equivalents of these were already supported.
This allows the conversion to be considered stable rather than volatile, and it saves a kernel call per invocation.
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.
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.
Fix enforcement of PL/pgSQL variable CONSTANT
markings (Tom Lane)
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 (Jelte Fennema)
This allows configured TCP timeouts to apply to query cancel connections.
Prevent libpq event callback failures from forcing an error result (Tom Lane)
Improve performance of psql's \copy
command, by sending data in larger chunks (Heikki Linnakangas)
Add \dconfig
command to report server variables (Mark Dilger, Tom Lane)
This is similar to the server-side SHOW
command, but it can process patterns to show multiple variables conveniently.
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 (Pavel Stehule, Thomas Munro)
This is only supported on Unix and is controlled by the PSQL_WATCH_PAGER
environment variable.
Make psql include intra-query double-hyphen comments in queries sent to the server (Tom Lane, Greg Nancarrow)
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.
Adjust psql so that Readline's meta-#
command will insert a double-hyphen comment marker (Tom Lane)
Previously a pound marker was inserted, unless the user had taken the trouble to configure a non-default comment marker.
Make psql output all results when multiple queries are passed to the server at once (Fabien Coelho)
Previously, only the last query result was displayed. The old behavior can be restored by setting the SHOW_ALL_RESULTS
psql variable to off
.
After an error is detected in --single-transaction
mode, change the final COMMIT
command to ROLLBACK
only if ON_ERROR_STOP
is set (Michael Paquier)
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
.
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 (Tom Lane)
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.
Make pg_dump dump public
schema ownership changes and security labels (Noah Misch)
Improve performance of dumping databases with many objects (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)
The new options are server
to write the backup locally and blackhole
to discard the backup (for testing).
Allow pg_basebackup to do server-side gzip, LZ4, and Zstandard compression and client-side LZ4 and Zstandard compression of base backup files (Dipesh Pandit, Jeevan Ladhe)
Client-side gzip
compression was already supported.
Allow pg_basebackup to compress on the server side and decompress on the client side before storage (Dipesh Pandit)
This is accomplished by specifying compression on the server side and plain output format.
Allow pg_basebackup's --compress
option to control the compression location (server or client), compression method, and compression options (Michael Paquier, Robert Haas)
This is enabled via --compress=lz4
and requires binaries to be built using --with-lz4
.
Add additional capabilities to pg_receivewal's --compress
option (Georgios Kokolatos)
Improve pg_receivewal's ability to restart at the proper WAL location (Ronan Dunklau)
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.
Store pg_upgrade's log and temporary files in a subdirectory of the new cluster called pg_upgrade_output.d
(Justin Pryzby)
Previously such files were left in the current directory, requiring manual cleanup. Now they are automatically removed on successful completion of pg_upgrade.
Disable default status reporting during pg_upgrade operation if the output is not a terminal (Andres Freund)
The status reporting output can be enabled for non-tty usage by using --verbose
.
Make pg_upgrade report all databases with invalid connection settings (Jeevan Ladhe)
Previously only the first database with an invalid connection setting was reported.
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 (Michael Paquier)
This is recommended only for testing.
Limit support of pg_upgrade to old servers running PostgreSQL 9.2 or later (Tom Lane)
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 (Bharath Rupireddy)
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.
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 (Heikki Linnakangas)
This is enabled by specifying the --rmgr
option multiple times.
Add support for continuous integration testing using cirrus-ci (Andres Freund, Thomas Munro, Melanie Plageman)
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 (Peter Eisentraut)
An ABI field mismatch will generate an error at load time.
Some other internal-use-only types have also been assigned to this category.
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)
On Windows, export all the server's global variables using PGDLLIMPORT
markers (Robert Haas)
Previously, only specific variables were accessible to extensions on Windows.
Require GNU make version 3.81 or later to build PostgreSQL (Tom Lane)
Require Perl version 5.8.3 or later (Dagfinn Ilmari Mannsåker)
Require Python version 3.2 or later (Andres Freund)
Improve amcheck sanity checks for TOAST tables (Mark Dilger)
These can be used for exclusion constraints.
Previously, improper negative values could be returned in certain cases.
Add JIT counters to pg_stat_statements (Magnus Hagander)
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 (Hayato Kuroda)
Allow parallel commit on postgres_fdw servers (Etsuro Fujita)
This is enabled with the CREATE SERVER
option parallel_commit
.
The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues.
Adam Brusselback
Adam Mackler
Adrian Ho
Ahsan Hadi
Ajin Cherian
Alastair McKinley
Aleksander Alekseev
Ales Zeleny
Alex Kingsborough
Alex Kozhemyakin
Alexander Korotkov
Alexander Kukushkin
Alexander Lakhin
Alexander Nawratil
Alexander Pyhalov
Alexey Borzov
Alexey Ermakov
Aliaksandr Kalenik
Álvaro Herrera
Amit Kapila
Amit Khandekar
Amit Langote
Amul Sul
Anastasia Lubennikova
Anders Kaseorg
Andreas Dijkman
Andreas Grob
Andreas Seltenreich
Andrei Zubkov
Andres Freund
Andrew Alsup
Andrew Bille
Andrew Dunstan
Andrew Gierth
Andrew Kesper
Andrey Borodin
Andrey Lepikhov
Andrey Sokolov
Andy Fan
Anton Melnikov
Anton Voloshin
Antonin Houska
Arjan van de Ven
Arne Roland
Arthur Zakirov
Ashutosh Bapat
Ashutosh Sharma
Ashwin Agrawal
Asif Rehman
Asim Praveen
Atsushi Torikoshi
Aya Iwata
Bauyrzhan Sakhariyev
Benoit Lobréau
Bernd Dorn
Bertrand Drouvot
Bharath Rupireddy
Björn Harrtell
Boris Kolpackov
Boris Korzun
Brad Nicholson
Brar Piening
Bruce Momjian
Bruno da Silva
Bryn Llewellyn
Carl Sopchak
Cary Huang
Chapman Flack
Chen Jiaoqian
Chris Bandy
Chris Lowder
Christian Quest
Christoph Berg
Christoph Heiss
Christophe Pettus
Christopher Painter-Wakefield
Claudio Freire
Clemens Zeidler
Corey Huinker
Dag Lem
Dagfinn Ilmari Mannsåker
Dan Kubb
Daniel Cherniy
Daniel Gustafsson
Daniel Polski
Daniel Vérité
Daniel Westermann
Daniele Varrazzo
Daniil Anisimov
Danny Shemesh
Darafei Praliaskouski
Daria Lepikhova
Dave Cramer
Dave Page
David Christensen
David Fetter
David G. Johnston
David Rowley
David Steele
David Zhang
Dean Rasheed
Dian Fay
Dilip Kumar
Dipesh Pandit
Dmitry Dolgov
Dmitry Koval
Dmitry Marakasov
Dominique Devienne
Dong Wook
Drew DeVault
Eduard Català
Egor Chindyaskin
Egor Rogov
Ekaterina Kiryanova
Elena Indrupskaya
Elvis Pranskevichus
Emmanuel Quincerot
Emre Hasegeli
Eric Mutta
Erica Zhang
Erik Rijkers
Erki Eessaar
Etsuro Fujita
Euler Taveira
Fabien Coelho
Fabrice Chapuis
Fabrice Fontaine
Fabrízio de Royes Mello
Feike Steenbergen
Filip Gospodinov
Florin Irion
Floris Van Nee
Frédéric Yhuel
Gabriela Serventi
Gaurab Dey
Geoff Winkless
Geoffrey Blake
Georgios Kokolatos
Gilles Darold
Greg Nancarrow
Greg Rychlewski
Greg Sabino Mullane
Greg Stark
Gregory Smith
Guillaume Lelarge
Gunnar Bluth
Gurjeet Singh
Haiyang Wang
Haiying Tang
Hannu Krosing
Hans Buschmann
Hayato Kuroda
Heath Lord
Heikki Linnakangas
Herwig Goemans
Himanshu Upadhyaya
Holly Roberts
Hou Zhijie
Hubert Lubaczewski
Ian Barwick
Ian Campbell
Ibrar Ahmed
Ildus Kurbangaliev
Ilya Anfimov
Itamar Gafni
Jacob Champion
Jaime Casanova
Jakub Wartak
James Coleman
James Hilliard
James Inform
Jan Piotrowski
Japin Li
Jason Harvey
Jason Kim
Jean-Christophe Arnu
Jeevan Ladhe
Jeff Davis
Jeff Janes
Jehan-Guillaume de Rorthais
Jelte Fennema
Jeremy Evans
Jeremy Schneider
Jian Guo
Jian He
Jimmy Yih
Jiri Fejfar
Jitka Plesníková
Joe Conway
Joe Wildish
Joel Jacobson
Joey Bodoia
John Naylor
Jonathan Katz
Josef Simanek
Joseph Koshakow
Josh Soref
Joshua Brindle
Juan José Santamaría Flecha
Julien Rouhaud
Julien Roze
Junwang Zhao
Jürgen Purtz
Justin Pryzby
Ken Kato
Kevin Burke
Kevin Grittner
Kevin Humphreys
Kevin McKibbin
Kevin Sweet
Kevin Zheng
Klaudie Willis
Konstantin Knizhnik
Konstantina Skovola
Kosei Masumura
Kotaro Kawamoto
Koyu Tanigawa
Kuntal Ghosh
Kyotaro Horiguchi
Lars Kanis
Lauren Fliksteen
Laurent Hasson
Laurenz Albe
Leslie Lemaire
Liam Bowen
Lingjie Qiang
Liu Huailing
Louis Jachiet
Lukas Fittl
Ma Liangzhu
Maciek Sakrejda
Magnus Hagander
Mahendra Singh Thalor
Maksim Milyutin
Marc Bachmann
Marcin Krupowicz
Marcus Gartner
Marek Szuba
Marina Polyakova
Mario Emmenlauer
Mark Dilger
Mark Murawski
Mark Wong
Markus Wanner
Markus Winand
Martijn van Oosterhout
Martin Jurca
Martin Kalcher
Martín Marqués
Masahiko Sawada
Masahiro Ikeda
Masao Fujii
Masaya Kawamoto
Masayuki Hirose
Matthias van de Meent
Matthijs van der Vleuten
Maxim Orlov
Maxim Yablokov
Melanie Plageman
Michael Banck
Michael Harris
Michael J. Sullivan
Michael Meskes
Michael Mühlbeyer
Michael Paquier
Michael Powers
Mike Fiedler
Mike Oh
Mikhail Kulagin
Miles Delahunty
Naoki Okano
Nathan Bossart
Nathan Long
Nazir Bilal Yavuz
Neha Sharma
Neil Chen
Nicola Contu
Nicolas Lutic
Nikhil Benesch
Nikhil Shetty
Nikhil Sontakke
Nikita Glukhov
Nikolai Berkoff
Nikolay Samokhvalov
Nikolay Shaplov
Nitin Jadhav
Noah Misch
Noboru Saito
Noriyoshi Shinoda
Olaf Bohlen
Olly Betts
Onder Kalaci
Oskar Stenberg
Otto Kekalainen
Paul Guo
Paul Jungwirth
Paul Martinez
Pavan Deolasee
Pavel Borisov
Pavel Luzanov
Pavel Stehule
Peter Eisentraut
Peter Geoghegan
Peter Slavov
Peter Smith
Petr Jelínek
Phil Florent
Phil Krylov
Pierre-Aurélien Georges
Prabhat Sahu
Quan Zongliang
Rachel Heaton
Rahila Syed
Rajakavitha Kodhandapani
Rajkumar Raghuwanshi
Ranier Vilela
Rei Kamigishi
Reid Thompson
Rémi Lapeyre
Renan Soares Lopes
Richard Guo
Richard Wesley
RKN Sai Krishna
Robert Haas
Robert Treat
Roberto Mello
Robins Tharakan
Roger Mason
Roman Zharkov
Ronan Dunklau
Rui Zhao
Ryan Kelly
Ryo Matsumura
Ryohei Takahashi
Sadhuprasad Patro
Sait Talha Nisanci
Sami Imseih
Sandeep Thakkar
Sebastian Kemper
Sehrope Sarkuni
Sergei Kornilov
Sergei Shoulbakov
Sergey Shinderuk
Shay Rojansky
Shenhao Wang
Shi Yu
Shinya Kato
Shruthi Gowda
Simon Perepelitsa
Simon Riggs
Sirisha Chamarthi
Soumyadeep Chakraborty
Stan Hu
Stas Kelvich
Stefen Hillman
Stephen Frost
Steve Chavez
Sumanta Mukherjee
Suraj Khamkar
Suraj Kharage
Sven Klemm
Takamichi Osumi
Takayuki Tsunakawa
Takeshi Ideriha
Tatsuhiro Nakamori
Tatsuhito Kasahara
Tatsuo Ishii
Tatsuro Yamada
Teja Mupparti
Teodor Sigaev
Thibaud Walkowiak
Thom Brown
Thomas McKay
Thomas Munro
Tim McNamara
Timo Stolz
Timur Khanjanov
Tom Lane
Tomas Barton
Tomas Vondra
Tony Reix
Troy Frericks
Tushar Ahuja
Victor Wagner
Victor Yegorov
Vignesh C
Vik Fearing
Vincas Dargis
Vitaly Burovoy
Vitaly Voronov
Vladimir Sitnikov
Wang Ke
Wei Sun
Wei Wang
Whale Song
Will Mortensen
Wolfgang Walther
Yanliang Lei
Yaoguang Chen
Yogendra Suralkar
YoungHwan Joo
Yugo Nagata
Yukun Wang
Yura Sokolov
Yusuke Egashira
Yuzuko Hosoya
Zhang Mingli
Zhang Wenjie
Zhihong Yu
Zhiyong Wu
Record and check the collation version of each (Peter Eisentraut)
Allow collations to be set as the default for clusters and databases (Peter Eisentraut)
Add system view to report pg_ident.conf
information (Julien Rouhaud)
Allow on partitioned tables (Justin Pryzby)
Fix on partitioned tables to properly rename triggers on all partitions (Arne Roland, Álvaro Herrera)
Allow btree indexes on system and tables to efficiently store duplicates (Peter Geoghegan)
Improve lookup performance of indexes that were built using sorting (Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin)
Allow the starts-with operator and the starts_with()
function to use btree indexes if using the C collation (Tom Lane)
Previously these could only use indexes.
Allow to record statistics for a parent with all its children (Tomas Vondra, Justin Pryzby)
Add server variable to allow the user to specify the expected size of the working table of a (Simon Riggs)
Allow hash lookup for clauses with many constants (David Rowley, James Coleman)
This will improve text-heavy operations like .
Improve performance for sorts that exceed (Heikki Linnakangas)
Allow WAL to use LZ4 and Zstandard compression (Andrey Borodin, Justin Pryzby)
This is controlled by the server setting.
Add support for writing WAL using on macOS (Thomas Munro)
Allow to be more aggressive in setting the oldest frozen and multi transaction id (Peter Geoghegan)
Allow a query referencing multiple to perform parallel foreign table scans in more cases (Andrey Lepikhov, Etsuro Fujita)
Improve the performance of that use row_number()
, rank()
, dense_rank()
and count()
(David Rowley)
This changes the default of to on
and that of 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.
The messages report the cause of the delay. The time interval for notification is controlled by the new server variable .
Store data in shared memory (Kyotaro Horiguchi, Andres Freund, Melanie Plageman)
Add output for temporary file block I/O (Masahiko Sawada)
Allow in JSON format (Sehrope Sarkuni, Michael Paquier)
Allow to reset the counters of relations shared across all databases (Sadhuprasad Patro)
Add for local shell commands (Fujii Masao)
Allow table accesses done by a to optionally be controlled by privileges of the view's caller (Christoph Heiss)
Allow members of the predefined role to perform server-side base backups (Dagfinn Ilmari Mannsåker)
Allow to grant permissions to change individual server variables via SET
and ALTER SYSTEM
(Mark Dilger)
Add predefined role that allows members to run CHECKPOINT
(Jeff Davis)
Allow members of the predefined role to access the views and (Bharath Rupireddy)
Allow to grant permissions on (Jeff Davis)
Add server variable to report the size of allocated shared memory (Nathan Bossart)
Add server variable to report the number of huge memory pages required (Nathan Bossart)
Honor server variable in single-user mode (Jeff Davis)
On Solaris, make the default setting of be sysv
(Thomas Munro)
Allow to properly report runtime-computed values (Nathan Bossart)
Previously runtime-computed values , , and would report values that would not be accurate on the running server. However, this does not work on a running server.
Add support for LZ4 and Zstandard compression of server-side (Jeevan Ladhe, Robert Haas)
This is controlled by the server variable .
Previously, archiving was only done by calling shell commands. The new server variable can be set to specify a library to be called for archiving.
No longer require to be run before START_REPLICATION
(Jeff Davis)
Allow of all tables in a schema (Vignesh C, Hou Zhijie, Amit Kapila)
Allow skipping of transactions on a subscriber using (Masahiko Sawada)
The new option is called TWO_PHASE
. pg_recvlogical now supports a new --two-phase
option during slot creation.
The new functions are , pg_ls_logicalmapdir()
, and pg_ls_replslotdir()
. They can be run by members of the predefined pg_monitor
role.
This is enabled with the subscriber option and avoids possible infinite error loops during stream application.
Add system view to report on subscriber activity (Masahiko Sawada)
The new function allows resetting these statistics counters.
Suppress duplicate entries in the system view (Hou Zhijie)
Add SQL command to adjust one table to match another (Simon Riggs, Pavan Deolasee, Álvaro Herrera, Amit Langote)
Add support for HEADER
option in text format (Rémi Lapeyre)
Add new WAL-logged method for (Dilip Kumar)
Allow to set the database OID (Shruthi Gowda, Antonin Houska)
Prevent , , and from occasionally failing during concurrent use on Windows (Thomas Munro)
Allow foreign key actions to affect only specified columns (Paul Martinez)
Allow to modify a table's ACCESS METHOD
(Justin Pryzby, Jeff Davis)
Properly call object access hooks when causes table rewrites (Michael Paquier)
Allow creation of unlogged (Peter Eisentraut)
Allow the scale of a value to be negative, or greater than its precision (Dean Rasheed, Tom Lane)
Improve overflow detection when casting values to (Joe Koshakow)
Add multirange input to (Paul Jungwirth)
Add and MAX()
aggregates for the data type (Ken Kato)
The new functions are , regexp_instr()
, regexp_like()
, and regexp_substr()
. Some new optional arguments were also added to regexp_replace()
.
Add the ability to compute the distance between (Tom Lane)
Add format codes of
, tzh
, and tzm
(Nitin Jadhav)
When applying to a time with time zone
value, use the transaction start time rather than wall clock time to determine whether DST applies (Aleksander Alekseev, Tom Lane)
Ignore NULL array elements in and setweight()
functions with array arguments (Jean-Christophe Arnu)
Add support for petabyte units to and pg_size_bytes()
(David Christensen)
Change to output references to other sessions' temporary schemas using the actual schema name (Tom Lane)
Previously, a variable could be used as a output parameter or refcursor OPEN
variable despite being marked CONSTANT
.
Allow to retry after serialization and deadlock failures (Yugo Nagata, Marina Polyakova)
This will also improve the performance of .
Limit support of pg_dump and to servers running PostgreSQL 9.2 or later (Tom Lane)
Add new option --target
to control the base backup location (Robert Haas)
Add the LZ4 compression method to (Georgios Kokolatos)
Add option --config-file
to simplify use when server configuration files are stored outside the data directory (Gunnar Bluth)
Add documentation for and pg_char_to_encoding()
(Ian Lawrence Barwick)
Document the starts-with operator (Tom Lane)
Add configure option to enable Zstandard builds (Jeevan Ladhe, Robert Haas, Michael Paquier)
Create a new value for "char"
(Tom Lane)
Add new protocol message to specify a new COPY
method to be used for base backups (Robert Haas)
now uses this method.
Add new protocol message and COMPRESSION_DETAIL
to specify the compression method and options (Robert Haas)
Add function to get the flags of server variables (Justin Pryzby)
Require OpenSSL to build the extension (Peter Eisentraut)
Allow to check sequences (Mark Dilger)
Add new module as an example of a custom backup target (Robert Haas)
Add new module as an example of performing archiving via a library (Nathan Bossart)
Allow indexes on boolean columns (Emre Hasegeli)
Fix 's page_header()
to handle 32-kilobyte page sizes (Quan Zongliang)
Add counters for temporary file block I/O to (Masahiko Sawada)
Add new module (Bharath Rupireddy)
This gives SQL-level output similar to .
Indicate the permissive/enforcing state in log messages (Dave Page)
Previously the remote session's 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.