+ Non-Unicode zero-length identifiers were already disallowed.
+ function as stable, not immutable, since it depends on
+ linkend="guc-intervalstyle">IntervalStyle
+ (Tom Lane)
- For example, report 1.99 years as 2
- years, not 1 year 11 months.
+ This will, for example, cause creation of indexes relying on the
+ text output of interval values to fail.
- Specifically, functions justify_interval(),
+ The affected functions are justify_interval(),
justify_hours(), and
- justify_days() are affected.
+ justify_days().
- Previously, login roles could add/remove members of its own role,
+ Previously, a login role could add/remove members of its own role,
even without ADMIN OPTION privilege.
- UPDATE and DELETE perform
- SELECT, so require the subscription owner to
- have table SELECT permission.
+ UPDATE and DELETE commands
+ typically involve reading the table as well, so require the
+ subscription owner to have table SELECT
+ permission.
When EXPLAIN
- references the temporary object schema, refer to it as
+ references the session's temporary object schema, refer to it as
pg_temp (Amul Sul)
- Previously the actual schema name was used.
+ Previously the actual schema name was reported, leading to
+ inconsistencies across sessions.
- Previously such cases would have one row for each index.
+ Previously such cases would show one row for each index.
- Disallow setting of server
- variables matching the prefixes of installed extension
+ Disallow setting custom
+ options that match the name of an installed extension, but
+ are not one of the extension's declared variables
(Florin Irion, Tom Lane)
- This also deletes any matching server variables during extension
- load.
+ 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 unnecessary server variable
+ Remove obsolete server variable
stats_temp_directory (Andres Freund, Kyotaro
Horiguchi)
- This will cause random() to differ from what
- was emitted by prior versions for the same seed values.
+ This will cause random()'s results to differ
+ from what was emitted by prior versions, even for the same seed
+ value.
+
+
+
+
+
+
+
libpq's
+ linkend="libpq-PQsendQuery">PQsendQuery()
+ 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.
-
Reduce casting of constants in
- linkend="postgres-fdw">postgres_fdw queries (Dian Fay)
+
Avoid unnecessary casting of constants in queries sent by
+ linkend="postgres-fdw">postgres_fdw (Dian Fay)
- If column types were mismatched between local and remote databases,
- such casting could cause errors.
+ When column types are intentionally different between local and
+ remote databases, such casts could cause errors.
- Remove xml2's function
- xml_is_well_formed() (Tom Lane)
+ Remove xml2's
+ xml_is_well_formed() function (Tom Lane)
- This is designed to detect collation version
- mismatches to avoid data corruption. Function
+ 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 database
- to match the operating system collation version.
+ ALTER DATABASE ... REFRESH sets the recorded
+ database collation version to match the operating system collation
+ version.
Previously, only
libc-based
- collations could be set at the cluster and database levels.
-
ICU collations were previously limited
- to CREATE
- COLLATION and referenced by the
- COLLATE clause.
+ collations could be selected at the cluster and database levels.
+
ICU collations could only be used via explicit
+ COLLATE clauses.
- Specifically this helps if only a small number of the many
- partitions are relevant.
+ This change helps when only a few of many partitions are relevant.
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.
+ Now they can be used if such partitions are pruned during planning.
- 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.
+ 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.
Fix ALTER TRIGGER
RENAME on partitioned tables to properly rename
- triggers an all partitions (Arne Roland, Álvaro Herrera)
+ triggers on all partitions (Arne Roland, Álvaro Herrera)
- Improve lookup performance of
- linkend="gist">
GiST indexes built using
- sorting (Aliaksandr Kalenik, Sergei Shoulbakov, Andrey Borodin)
+ Improve lookup performance
+ that were built using sorting (Aliaksandr Kalenik, Sergei
+ Shoulbakov, Andrey Borodin)
- Previously NULL values were always indexed
+ 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.
- Allow
+ Allow
the
linkend="functions-string-other">^@
- and starts_with() to use btree indexes if
- using a C collation (Tom Lane)
+ starts-with operator and the starts_with()
+ function to use btree indexes if using the C collation (Tom Lane)
- Regular statistics already tracked parent and parent/all-children
- statistics separately.
+ Regular statistics already tracked parent and
+ parent-plus-all-children statistics separately.
Add server variable
linkend="guc-recursive-worktable-factor">recursive_worktable_factor
- to allow the user to specify the expected recursive query worktable
- size (Simon Riggs)
-
-
- WHAT IS A WORKTABLE? NOT DEFINED.
+ to allow the user to specify the expected size of the working
+ table of a recursive
+ query (Simon Riggs)
+
+
+
+ Allow SELECT DISTINCT to be parallelized
+ (David Rowley)
+
+
+
-
-
- Add two-phase information to the logical replication stream
- (Ajin Cherian)
-
The new
- Previously, write transactions would send empty transactions to
+ Previously, publishers would send empty transactions to
subscribers if subscribed tables were not modified.
-
Specifically, the functions are
+
The new functions are
linkend="functions-admin-genfile-table">pg_ls_logicalsnapdir(),
pg_ls_logicalmapdir(), and
pg_ls_replslotdir(). They can be run by
The new function
linkend="monitoring-stats-functions">pg_stat_reset_subscription_stats()
- allows the resetting of subscriber statistics.
+ allows resetting these statistics counters.
-
Remove incorrect duplicate partitions in system view
+
Suppress duplicate entries in the
linkend="view-pg-publication-tables">pg_publication_tables
- (Hou Zhijie)
+ system view (Hou Zhijie)
+
+
+ In some cases a partition child table could appear more than once.
-
-
SELECT, INSERT
-
-
-
-
-
-
- Allow SELECT DISTINCT to be parallelized
- (David Rowley)
-
-
-
-
-
-
-
Utility Commands
- Add
SQL MERGE command to
- adjust one table to match another (Simon Riggs, Pavan Deolasee,
- Álvaro Herrera, Amit Langote)
+ Add
SQL
+ linkend="sql-merge">MERGE
+ command to adjust one table to match another (Simon Riggs, Pavan
+ Deolasee, Álvaro Herrera, Amit Langote)
- This is the new default for database creation and avoids the need
- for checkpoints during database creation; the old method is still
- available.
+ 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.
+
+
+
+ Allow creation of unlogged
+ linkend="sql-createsequence">sequences (Peter Eisentraut)
+
+
+
-
-
- Allow the creation of unlogged
- linkend="sql-createsequence">sequences (Peter Eisentraut)
-
-
-
- On Unix platforms, have client applications like
- linkend="app-psql">
psql
- check HOME environment variable for the user's
- home directory before checking the operating system definition
- (Anders Kaseorg)
+ Allow
+ linkend="pgbench">
pgbench to
+ retry after serialization and deadlock failures (Yugo Nagata,
+ Marina Polyakova)
2021-07-14 [eec57115e] In psql \copy from, send data to server in larger chunks
-->
-
- Improve performance of
psql's \copy
- command (Heikki Linnakangas)
+
+ Improve performance
+ command, by sending data in larger chunks (Heikki Linnakangas)
- Add
psql command \getenv
- to assign the value of an environment variable to a
-
psql variable (Tom Lane)
+ 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
'+' option to psql's
- \lo_list/\dl to show object
- privileges (Pavel Luzanov)
+ Add \getenv command
+ to assign the value of an environment variable to a
+
psql variable (Tom Lane)
- 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 + option to the
+ \lo_list and \dl commands to
+ show large-object privileges (Pavel Luzanov)
- Add
pager option for psql's \watch
+ Add a pager option for the \watch
command (Pavel Stehule, Thomas Munro)
- This is only supported on Unix, and is controlled by
- PSQL_WATCH_PAGER.
+ This is only supported on Unix, and is controlled by the
+ PSQL_WATCH_PAGER environment variable.
-
Have psql send intra-query double-hyphen
- comments to the server (Tom Lane, Greg Nancarrow)
+
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
+ before being sent. Double-hyphen comments that are before any
query text are not sent, and are not recorded as separate
- Adjust
psql's readline meta-# to insert
- a double-hyphen comment marker (Tom Lane)
+ Adjust
psql so that Readline's
+ meta-# command will insert a double-hyphen
+ comment marker (Tom Lane)
- Previously an unhelpful pound marker was inserted.
+ Previously a pound marker was inserted, but that's pretty
+ unhelpful in SQL.
-
Have psql output all results if multiple
+
Make psql output all results when multiple
queries are passed to the server at once (Fabien Coelho)
- This can be disabled by setting SHOW_ALL_RESULTS.
+ Previously, only the last query result was displayed. The old
+ behavior can be restored by setting
+ the
SHOW_ALL_RESULTS psql
+ variable to off.
- Limit support of
psql to servers running
-
PostgreSQL 9.2 and later (Tom Lane)
+ 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.
-
-
-
-
Server Applications
+
-
+
-
- Add new
- linkend="app-pgbasebackup">
pg_basebackup
- option 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).
-
-
+
+ public schema ownership changes and security
+ labels (Noah Misch)
+
+
-
- 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)
-
+
+ Improve performance of dumping databases with many objects
+ (Tom Lane)
+
+
+ This will also improve the performance of
+ linkend="pgupgrade">
pg_upgrade.
+
+
+
+
+
+
+ Improve parallel
pg_dump's performance
+ for tables with large
TOAST tables (Tom Lane)
+
+
+
+
+
+
+ Add dump/restore option
+ to force restore to only use the default table access method
+ (Justin Pryzby)
+
+
+
+
+
+
+ Limit support of
pg_dump and
+ linkend="app-pg-dumpall">
pg_dumpall
+ to servers running
PostgreSQL 9.2 or
+ later (Tom Lane)
+
+
+
+
+
+
+
+
+
+
+
Server Applications
+
+
+
+
+
+
+ Add new
+ linkend="app-pgbasebackup">
pg_basebackup
+ option to control the base backup location
+ (Robert Haas)
+
+
+ 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
- to simplify use when server
+ Add
+ linkend="app-pgrewind">
pg_rewind
+ option to simplify use when server
configuration files are stored outside the data directory (Gunnar
Bluth)
-
-
-
- Allow
- linkend="pgbench">
pgbench to
- retry after serialization and deadlock failures (Yugo Nagata,
- Marina Polyakova)
-
-
-
-
-
-
- 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
- linkend="pgupgrade">
pg_upgrade.
-
-
-
-
-
-
- Improve the parallel
pg_dump performance
- of
TOAST tables (Tom Lane)
-
-
-
- Add dump/restore option
- to force restore to only use the default table access method
- (Justin Pryzby)
+ Store
pg_upgrade's log and
+ temporary files in a subdirectory of the new cluster called
+ pg_upgrade_output.d (Justin Pryzby)
-
-
-
-
- Limit support of
pg_dump and
- linkend="app-pg-dumpall">
pg_dumpall
- to servers running
PostgreSQL 9.2 and
- later (Tom Lane)
+ Previously such files were left in the current directory,
+ requiring manual cleanup. It's still necessary to remove them
+ manually afterwards, but now one can just remove that whole
+ subdirectory.
-
-
-
-
-
-
-
-
-
-
- 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.
-
-
-
- Require OpenSSL to build
- linkend="pgcrypto">
pgcrypto
- binaries (Peter Eisentraut)
+ Require GNU
make version 3.81 or later
+ to build
PostgreSQL (Tom Lane)
- Require GNU
make version 3.81 or later
- to build
PostgreSQL (Tom Lane)
+ Require OpenSSL to build the
+ linkend="pgcrypto">
pgcrypto
+ extension (Peter Eisentraut)
- Add new module
- linkend="pgwalinspect">
pg_walinspect
- (Bharath Rupireddy)
-
-
- This gives
SQL-level output similar to
- linkend="pgwaldump">
pg_waldump.
+ Allow
+ linkend="amcheck">
amcheck to
+ check sequences (Mark Dilger)
- Add module
- linkend="basic-archive">
basic_archive
- to perform archiving via a library (Nathan Bossart)
+ Improve
amcheck sanity checks for
+
TOAST tables (Mark Dilger)
- Add module
+ Add
new module
linkend="basebackup-to-shell">basebackup_to_shell
- as a custom backup target (Robert Haas) contrib module.
+ as an example of a custom backup target (Robert Haas)
- Add
- linkend="
pgstatstatements">pg_stat_statements
- output for temporary file block I/O (Masahiko Sawada)
+ Add
new module
+ linkend="
basic-archive">basic_archive
+ as an example of performing archiving via a library (Nathan Bossart)
- Add
JIT counters to pg_stat_statements (Magnus
- Hagander)
+ Allow
+ linkend="btree-gist">
btree_gist
+ indexes on boolean columns (Emre Hasegeli)
+
+
+ These can be used for exclusion constraints.
- Allow
- linkend="amcheck">
amcheck to
- check sequences (Mark Dilger)
+ Fix
+ linkend="pageinspect">
pageinspect's
+ page_header() to handle 32-kilobyte page sizes
+ (Quan Zongliang)
+
+
+ Previously, improper negative values could be returned in certain
+ cases.
- Improve
amcheck sanity checks for
-
TOAST tables (Mark Dilger)
+ Add counters for temporary file block I/O to
+ linkend="pgstatstatements">
pg_stat_statements
+ (Masahiko Sawada)
- Allow
- linkend="btree-gist">
btree_gist
- indexes on boolean columns (Emre Hasegeli)
-
-
- These can be used for exclusion constraints.
+ Add
JIT counters to pg_stat_statements (Magnus
+ Hagander)
- Indicate the permissive/enforcing state in
- linkend="sepgsql">
sepgsql log
- messages (Dave Page)
+ Add new module
+ linkend="pgwalinspect">
pg_walinspect
+ (Bharath Rupireddy)
+
+
+ This gives
SQL-level output similar to
+ linkend="pgwaldump">
pg_waldump.
- Fix
- linkend="pageinspect">
pageinspect's
- page_header() to handle 32 kilobyte page sizes
- (Quan Zongliang)
-
-
- Previously improper negative values could be returned in certain
- cases.
+ Indicate the permissive/enforcing state in
+ linkend="sepgsql">
sepgsql log
+ messages (Dave Page)
- Previously the remote
+ Previously the remote
session's
linkend="guc-application-name">application_name
- could only be set on the remote server or via
+ could only be set on the remote server or via a
postgres_fdw connection specification.
- postgres_fdw.application_name also supports
- escape sequences for customization.
+ postgres_fdw.application_name supports some
+ escape sequences for customization, making it easier to tell such
+ connections apart on the remote server.
This is enabled with the CREATE SERVER option
- parallel_commit when using postgres_fdw.
+ parallel_commit.