E.1. Release 15
Prev | Up | Appendix E. Release Notes | Home | Next

## E.1. Release 15

Release date: AS OF 2022-06-11

### E.1.1. Overview

PostgreSQL 15 contains many new features and enhancements, including:

The above items and other new features of PostgreSQL 15 are explained in more detail in the sections below.

### E.1.2. Migration to Version 15

A dump/restore using pg_dumpall or use of pg_upgrade or logical replication is required for those wishing to migrate data from any previous release. See Section 19.6 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 `public` schema (Noah Misch)

  The new default is one of the secure schema usage patterns that Section 5.9.6 has recommended since the security release for CVE-2018-1058. The change applies to newly-created databases in existing clusters and for new clusters. Upgrading a cluster or restoring a database dump will preserve 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 zero need to defend against insider threats, granting `CREATE` permission will yield the behavior of prior releases.

- Change the owner of the `public` schema to `pg_database_owner` (Noah Misch)

  Previously it was the literal user name of the bootstrap superuser. Databases restored from previous Postgres releases will be restored with their current owner specification.

- Remove long-deprecated exclusive backup mode (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 requires a continuous database connection during the backup. 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 `hash_mem_multiplier` default to 2.0 (Peter Geoghegan)

  This allows query hash operations to use double the amount of `work_mem` memory as other operations.

- Remove server-side language `plpython2u` and generic Python language `plpythonu` (Andres Freund)

- Mark the `interval` output function as stable, not immutable, since it depends on `IntervalStyle` (Tom Lane)

  This will cause the creation of indexes relying on the text output of `interval` values to fail.

- Generate an error if `array_to_tsvector()` is passed an empty 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 `chr()` is supplied with a negative argument (Peter Eisentraut)

- Prevent Unicode zero-length identifiers, e.g., U&"" (Peter Eisentraut)

  Non-Unicode zero-length identifiers were already prevented.

- Remove pg_dump's `--no-synchronized-snapshots` option since all supported server versions support synchronized snapshots (Tom Lane)

- Prevent `CREATE OR REPLACE VIEW` from changing the collation of an output column (Tom Lane)

- Prevent numeric literals from having non-numeric trailing characters (Peter Eisentraut)

  Previously literals like `123abc` would be interpreted as `123` and `abc`.

- Adjust JSON 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()`.

- Improve consistency of interval parsing with trailing periods (Tom Lane)

  Some platforms disallowed trailing periods.

- When specifying fractional interval values in units greater than months, round to the nearest month (Bruce Momjian)

  For example, report `1.99 years` as `2 years`, not `1 year 11 months`.

- Detect integer overflow in interval justification functions (Joe Koshakow)

  Specifically, functions `justify_interval()`, `justify_hours()`, and `justify_days()` are affected.

- Remove the default `ADMIN OPTION` privilege a login role has on its own role membership (Robert Haas)

  Previously, login roles could add/remove members of its own role, even without `ADMIN OPTION` privilege.

- Allow logical replication 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` logical replication operations on tables where the subscription owner does not have `SELECT` permission on the table (Jeff Davis)

  `UPDATE` and `DELETE` perform `SELECT`, so require the subscription owner to have table `SELECT` permission.

- When `EXPLAIN` references the temporary object schema, refer to it as `pg_temp` (Amul Sul)

  Previously the actual schema name was used.

- Modify SPI's `SPI_commit()` and `SPI_commit_and_chain()` to automatically start a new transaction at completion (Peter Eisentraut, Tom Lane)

  BACKPATCHED?

- Fix `pg_statio_all_tables` to sum values for the rare case of TOAST tables with multiple indexes (Andrei Zubkov)

  Previously such cases would have one row for each index.

- Disallow setting of server variables matching the prefixes of installed extension (Florin Irion, Tom Lane)

  This also deletes any matching server variables during extension load.

- Remove unnecessary server variable `stats_temp_directory` (Andres Freund, Kyotaro Horiguchi)

- Improve the algorithm used to compute `random()` (Fabien Coelho)

  This will cause `random()` to differ from what was emitted by prior versions for the same seed values.

- Reduce casting of constants in postgres_fdw queries (Dian Fay)

  If column types were mismatched between local and remote databases, such casting could cause errors.

- Remove xml2's function `xml_is_well_formed()` (Tom Lane)

  This function has been implemented in the core backend since Postgres 9.1.

- Allow custom scan providers 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.

### E.1.3. Changes

Below you will find a detailed account of the changes between PostgreSQL 15 and the previous major release.

#### E.1.3.1. Server

- Record and check the collation of each database (Peter Eisentraut)

  This is designed to detect collation mismatches to avoid data corruption. Function `pg_database_collation_actual_version()` reports the underlying operating system collation version, and `ALTER DATABASE ... REFRESH` sets the database to match the operating system collation version. DETAILS?

- Allow ICU collations to be set as the default for clusters and databases (Peter Eisentraut)

  Previously, ICU collations could only be specified in `CREATE COLLATION` and used with the `COLLATE` clause.

- Add system view `pg_ident_file_mappings` to report `pg_ident.conf` information (Julien Rouhaud)

##### E.1.3.1.1. Partitioning

- Improve planning time for queries referencing partitioned tables (David Rowley)

  Specifically this helps if only a small number of the 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 these partitions are pruned.

- Improve foreign key behavior of updates on partitioned tables that move rows between partitions (Amit Langote)

  Previously, such updates ran delete actions on the source partition and insert actions on the target partition. PostgreSQL will now run update actions on the referenced partition root.

- Allow `CLUSTER` on partitioned tables (Justin Pryzby)

- Fix `ALTER TRIGGER RENAME` on partitioned tables to properly rename triggers an all partitions (Arne Roland, Álvaro Herrera)

  Also prohibit cloned triggers from being renamed.

##### E.1.3.1.2. Indexes

- Allow btree indexes on system and TOAST tables to efficiently store duplicates (Peter Geoghegan)

  Previously de-duplication was disabled for these types of indexes.

- Improve lookup performance of GiST indexes built using sorting (Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin)

- Allow unique constraints and indexes to treat `NULL` values as not distinct (Peter Eisentraut)

  Previously `NULL` values were always indexed as distinct values, but this can now be changed by creating constraints and indexes using `UNIQUE NULLS NOT DISTINCT`.

- Allow `^@` and `starts_with()` to use btree indexes if using a C collation (Tom Lane)

  Previously these could only use SP-GiST indexes.

##### E.1.3.1.3. Optimizer

- Allow extended statistics to record statistics for a parent with all its children (Tomas Vondra, Justin Pryzby)

  Regular statistics already tracked parent and parent/all-children statistics separately.

- Allow `GROUP BY` sorting to optimize column order (Dmitry Dolgov, Teodor Sigaev, Tomas Vondra)

  This optimization can be disabled using the server variable `enable_group_by_reordering`.

- Add server variable `recursive_worktable_factor` to allow the user to specify the expected recursive query worktable size (Simon Riggs)

  WHAT IS A WORKTABLE? NOT DEFINED.

##### E.1.3.1.4. General Performance

- Allow hash lookup for `NOT IN` clauses with many constants (David Rowley, James Coleman)

  Previously the code always sequentially scanned the list of values.

- Improve validation of UTF-8 text (even if only ASCII) by processing 16 bytes at a time (John Naylor, Heikki Linnakangas)

  This will improve text-heavy operations like `COPY FROM`.

- Improve performance for sorts that exceed `work_mem` (Heikki Linnakangas)

  Specifically, switch to a batch sorting algorithm that uses more output streams internally.

- 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 (Andrey Borodin, Justin Pryzby)

  This is controlled by the `wal_compression` server setting.

- Add direct I/O support to macOS (Thomas Munro)

  This only works if `max_wal_senders=0` and `wal_level=minimal`, and only for WAL.

- 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()`, and `count()` (David Rowley)

- Improve the performance of spinlocks on high-core-count ARM64 systems (Geoffrey Blake)

##### E.1.3.1.5. Monitoring

- Enable default logging of checkpoints and slow autovacuum operations (Bharath Rupireddy)

  Specifically, this changes the default of `log_checkpoints` to on and `log_autovacuum_min_duration` to 10 minutes. This will cause idle servers to generate log output, which might cause problems on resource-constrained servers with insufficient log file removal. The defaults should be changed in such cases.

- Generate periodic log message during slow server starts (Nitin Jadhav, Robert Haas)

  The messages report the cause of the delay. The time interval for notification is controlled by the new server variable `log_startup_progress_interval`.

- Store cumulative statistics system data in shared memory (Kyotaro Horiguchi, Andres Freund, Melanie Plageman)

  Previously this was updated via UDP packets, stored in the file system, and read by sessions. There is no longer a statistics collector process.

- 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 (Sehrope Sarkuni, Michael Paquier)

  The new setting is `log_destination=jsonlog`.

- Allow `pg_stat_reset_single_table_counters()` to reset the counters of relations shared across all databases (B Sadhu, Prasad Patro)

- Add wait events for local shell commands (Fujii Masao)

  Specifically the new wait events are related to commands `archive_command`, `archive_cleanup_command`, `restore_command` and `recovery_end_command`.

##### E.1.3.1.6. Privileges

- Allow view access to be controlled by privileges of the view user (Christoph Heiss)

  Previously, view access could only be based on the view owner.

- Allow members of the `pg_write_server_files` predefined role to perform server-side base backups (Dagfinn Ilmari Mannsåker)

  Previously only the superusers could perform such backups.

- Allow `GRANT` to assign permission to change server variables via `SET` and `ALTER SYSTEM` (Mark Dilger)

  The new function `has_parameter_privilege()` reports on this privilege.

- Add predefined role `pg_checkpointer` that allows members to run `CHECKPOINT` (Jeff Davis)

  Previously checkpoints could only be run by superusers.

- Allow members of the `pg_read_all_stats` predefined role to access the views `pg_backend_memory_contexts` and `pg_shmem_allocations` (Bharath Rupireddy)

  Previously these views could only be accessed by superusers.

- Allow `GRANT` to assign permissions on `pg_log_backend_memory_contexts()` (Jeff Davis)

  Previously this function could only be run by superusers.

##### E.1.3.1.7. Server Configuration

- 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 (Nathan Bossart)

  This is only supported on Linux.

- Allow `postgres -C` to properly report runtime-computed values (Nathan Bossart)

  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.

#### E.1.3.2. Streaming Replication and Recovery

- Add support for LZ4 and Zstandard compression of server-side base backups (Jeevan Ladhe, Robert Haas)

- Run checkpointer and bgwriter during crash recovery (Thomas Munro)

- Allow WAL processing to pre-fetch needed file contents (Thomas Munro)

  This is controlled by the server variable `recovery_prefetch`.

- Add server variable `archive_library` to specify the library to be called for archiving (Nathan Bossart)

  Previously only shell commands could be called to perform archiving.

- No longer require `IDENTIFY_SYSTEM` to be run before `START_REPLICATION` (Jeff Davis)

##### E.1.3.2.1. Logical Replication

- Allow publication of all tables in a schema (Vignesh C, Hou Zhijie, Amit Kapila)

  For example, this syntax is now supported: `CREATE PUBLICATION pub1 FOR ALL 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)

- Allow publications 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 transactions to built-in logical replication (Peter Smith, Ajin Cherian, Amit Kapila, Nikhil Sontakke, Stas Kelvich)

- Add two-phase information to the logical replication stream (Ajin Cherian)

  The new `CREATE_REPLICATION_SLOT` option is called `TWO_PHASE`. pg_recvlogical now supports a new `--two-phase` option during slot creation.

- Prevent logical replication of empty transactions (Ajin Cherian, Hou Zhijie, Euler Taveira)

  Previously, write transactions 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)

  Specifically, the functions are `pg_ls_logicalsnapdir()`, `pg_ls_logicalmapdir()`, and `pg_ls_replslotdir()`. They can be run by members of the predefined `pg_monitor` role.

- Allow subscribers to stop the application of logical replication changes on error (Osumi Takamichi, Mark Dilger)

  This is enabled with the subscriber option `disable_on_error` and avoids possible infinite error loops during stream application.

- 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.

- Add system view `pg_stat_subscription_stats` to report on subscriber activity (Masahiko Sawada)

  The new function `pg_stat_reset_subscription_stats()` allows the resetting of subscriber statistics.

- Remove incorrect duplicate partitions in system view `pg_publication_tables` (Hou Zhijie)

#### E.1.3.3. `SELECT`, `INSERT`

- Allow `SELECT DISTINCT` to be parallelized (David Rowley)

#### E.1.3.4. Utility Commands

- Add SQL `MERGE` command to adjust one table to match another (Simon Riggs, Pavan Deolasee, Álvaro Herrera, Amit Langote)

  This is similar to `INSERT ... ON CONFLICT` but more batch-oriented.

- Add support for `HEADER` option in `COPY` text format (Rémi Lapeyre)

  The new option causes the column names to be output, and optionally verified on input.

- Add new WAL-logged method for database creation (Dilip Kumar)

  This is the new default for database creation and avoids the need for checkpoints during database creation; the old method is still available.

- Allow `CREATE DATABASE` to set the database OID (Shruthi KC, 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 (Paul Martinez)

  Previously, all of the columns in the foreign key were always affected.

- 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)

#### E.1.3.5. Data Types

- Allow `numeric` scale to be negative or greater than precision (Dean Rasheed, Tom Lane)

  This allows rounding of values to the left of the decimal point, e.g., `'1234'::numeric(4, -2)` returns 1200.

- Improve overflow detection when casting values to interval (Joe Koshakow)

- Allow the creation of unlogged sequences (Peter Eisentraut)

- 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.

#### E.1.3.6. Functions

- 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 (Gilles Darold, Tom Lane)

  Specifically, the new functions are `regexp_count()`, `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 `polygons` (Tom Lane)

- Add `to_char()` format codes `of`, `tzh`, and `tzm` format codes (Nitin Jadhav)

  The upper-case versions of these were already supported.

- Improve the optimization of `timetz_zone()` by stabilizing its value at transaction start (Aleksander Alekseev, Tom Lane)

  HOW IS THIS USED?

- Allow `tsvector_delete_arr()` and `tsvector_setweight_by_filter()` to accept empty array elements (Jean-Christophe Arnu)

  These lexemes are not stored so the acceptance of empty array elements is not a problem. NOT DOCUMENTED, USER API?

- 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 non-local temporary schemas using the actual schema name (Tom Lane)

  Previously this function referred to temporary schemas as `pg_temp`.

##### E.1.3.6.1. JSON

- Add SQL/JSON-standard JSON constructors (Nikita Glukhov)

  The construction functions are `json()`, `json_scalar()`, and `json_serialize()`, `json_array()`, `json_arrayagg()`, `json_object()`, and `json_objectagg()`. They have a few functional advantages over the existing JSON functions.

- Add SQL/JSON query functions `json_exists()`, `json_query()`, and `json_value()` (Nikita Glukhov)

- Add JSON predicates to test `JSON`/`JSONB` values (Nikita Glukhov)

  The clauses are `IS JSON` [ `VALUE` | `ARRAY` | `OBJECT` | `SCALAR` | [`WITH` | `WITHOUT` ] `UNIQUE KEYS` ].

- Add function `JSON_TABLE()` to cause JSON data to be treated as a table (Nikita Glukhov)

#### E.1.3.7. PL/pgSQL

- Fix enforcement of PL/pgSQL variable `CONSTANT` markings (Tom Lane)

  Previously, a variable used as a `CALL` output parameter or refcursor `OPEN` variable would not enforce `CONSTANT`.

#### E.1.3.8. libpq

- 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)

#### E.1.3.9. Client Applications

- On Unix platforms, have client applications like psql check `HOME` environment variable for the user's home directory before checking the operating system definition (Anders Kaseorg)

##### E.1.3.9.1. psql

- Improve performance of psql's \copy command (Heikki Linnakangas)

- Add psql command \getenv to assign the value of an environment variable to a psql variable (Tom Lane)

- Add '+' option to psql's `\lo_list`/`\dl` to show object privileges (Pavel Luzanov)

- Add psql \dconfig to report server variables (Mark Dilger, Tom Lane)

  This is similar to the server-side `SHOW` command but can process patterns.

- Add pager option for psql's \watch command (Pavel Stehule, Thomas Munro)

  This is only supported on Unix, and is controlled by `PSQL_WATCH_PAGER`.

- Have psql send intra-query double-hyphen comments to the server (Tom Lane, Greg Nancarrow)

  Previously such comments were removed from the query before being sent. Double-hyphen comments that are before query text are not sent, and are not recorded as separate psql history entries.

- Adjust psql's readline meta-# to insert a double-hyphen comment marker (Tom Lane)

  Previously an unhelpful pound marker was inserted.

- Have psql output all results if multiple queries are passed to the server at once (Fabien Coelho)

  This can be disabled by setting `SHOW_ALL_RESULTS`.

- 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 to servers running PostgreSQL 9.2 and later (Tom Lane)

#### E.1.3.10. Server Applications

- Add new pg_basebackup option `--target` to control the base backup location (Robert Haas)

  New output 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)

- Add the LZ4 compression method to pg_receivewal (Georgios Kokolatos)

  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.

- Add pg_rewind option `--config-file` to simplify use when server configuration files are stored outside the data directory (Gunnar Bluth)

- Allow pgbench to retry after serialization and deadlock failures (Yugo Nagata, Marina Polyakova)

##### E.1.3.10.1. pg_dump

- Have pg_dump dump `public` schema ownership changes and security labels (Noah Misch)

  It also dumps `public` schema comments.

- Improve performance of dumping databases with many objects (Tom Lane)

  This will also improve the performance of pg_upgrade.

- Improve the parallel pg_dump performance of 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 and later (Tom Lane)

##### E.1.3.10.2. 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`.

- Have pg_upgrade report all databases with invalid connection settings (Jeevan Ladhe)

  Previously only the first database with an invalid connection setting was reported.

- Store pg_upgrade temporary files in a new cluster subdirectory called `pg_upgrade_output.d` (Justin Pryzby)

  Previously temporary files were stored in the current directory.

- Have pg_upgrade preserve tablespace and database OIDs, and relfilenodes between old and new clusters (Shruthi KC, Antonin Houska)

- Add a `--no-sync` option to pg_upgrade (Michael Paquier)

  This useful only for testing.

- Limit support of pg_upgrade to old servers running PostgreSQL 9.2 and later (Tom Lane)

##### E.1.3.10.3. pg_waldump

- Allow pg_waldump to be filtered by relation file node, block number, fork number, and full page images (David Christensen, Thomas Munro)

- Have 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.

#### E.1.3.11. Documentation

- Add documentation for `pg_encoding_to_char()` and `pg_char_to_encoding()` (Ian Lawrence Barwick)

- Document the `^@` starts-with operator (Tom Lane)

#### E.1.3.12. Source Code

- 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 module field which can be customized for non-community PostgreSQL distributions (Peter Eisentraut)

  A module field mismatch would generate an error.

- Create a new `pg_type.typcategory` value for `"char"` (Tom Lane)

  Some other internal-use-only values have also been assigned to this column.

- Add new protocol message `TARGET` to specify a new `COPY` method to be for base backups (Robert Haas)

  Modify pg_basebackup to use this method.

- 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 their own WAL resource managers (Jeff Davis)

- Add function `pg_settings_get_flags()` to get the flags of server-side variables (Justin Pryzby)

- Export all server variables on Windows using `PGDLLIMPORT` (Robert Haas)

  Previously only specific variables where exported.

- Require OpenSSL to build pgcrypto binaries (Peter Eisentraut)

- Disallow building with Python 2 (Andres Freund)

- Adjust configure to require Perl version 5.8.3 or later (Dagfinn Ilmari Mannsåker)

#### E.1.3.13. Additional Modules

- Add new module pg_walinspect (Bharath Rupireddy)

  This gives SQL-level output similar to pg_waldump.

- Add module basic_archive to perform archiving via a library (Nathan Bossart)

- Add module basebackup_to_shell as a custom backup target (Robert Haas) contrib module.

- Add pg_stat_statements output for temporary file block I/O (Masahiko Sawada)

- Add JIT counters to pg_stat_statements (Magnus Hagander)

- Allow amcheck to check sequences (Mark Dilger)

- Improve amcheck sanity checks for TOAST tables (Mark Dilger)

- Allow btree_gist indexes on boolean columns (Emre Hasegeli)

  These can be used for exclusion constraints.

- Indicate the permissive/enforcing state in sepgsql log messages (Dave Page)

- Fix pageinspect's `page_header()` to handle 32 kilobyte page sizes (Quan Zongliang)

  Previously improper negative values could be returned in certain cases.

##### E.1.3.13.1. postgres_fdw

- 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)

  Previously the remote `application_name` could only be set on the remote server or via postgres_fdw connection specification. `postgres_fdw.application_name` also supports escape sequences for customization.

- Allow parallel commit on postgres_fdw servers (Etsuro Fujita)

  This is enabled with the `CREATE SERVER` option `parallel_commit` when using postgres_fdw.

### E.1.4. Acknowledgments

The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues.

Prev | Up | Next
Appendix E. Release Notes | Home | E.2. Prior Releases