↑↓ select ↵ open ⌫ change scope Open full search

PG.CENTER connects PostgreSQL documentation, reference, and ecosystem knowledge. Maintained by Pigsty.

DocumentationVersion comparison

POSTGRESQL · VERSION COMPARE

PostgreSQL 9.2 release changes

All features, fixes, and compatibility notes in this release, with related records from other versions.

All changes in this release
All changes in this release

Includes changes after the source version through the target. A major version name means its initial release.

From PostgreSQL 9.0 onward: 17 major branches and 352 release notes. Updated 2026-09-26.

Complete release changes

9.2

2012-09-10

Export JSON
238changesFeatures, fixes, improvements
1releaseGrouped by release
0CVEsVulnerability IDs mentioned in these notes

9.2.0 HistoricalSupport ends 2017-11-09

PostgreSQL 9.2

Migration and compatibility

A dump/restore using pg_dump, or use of pg_upgrade, is required for those wishing to migrate data from any previous release.

Version 9.2 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:

CompatibilityRemove the spclocation field from pg_tablespace

System Catalogs

Remove the spclocation field from pg_tablespace (Magnus Hagander)

This field was duplicative of the symbolic links that actually define tablespace locations, and thus risked errors of omission when moving a tablespace. This change allows tablespace directories to be moved while the server is down, by manually adjusting the symbolic links. To replace this field, we have added pg_tablespace_location() to allow querying of the symbolic links.

CompatibilityMove tsvector most-common-element statistics to new pg_stats columns

System Catalogs

Move tsvector most-common-element statistics to new pg_stats columns (Alexander Korotkov)

Consult most_common_elems and most_common_elem_freqs for the data formerly available in most_common_vals and most_common_freqs for a tsvector column.

CompatibilityRemove hstore's => operator

Functions

Remove hstore's => operator (Robert Haas)

Users should now use hstore(text, text). Since PostgreSQL 9.0, a warning message has been emitted when an operator named => is created because the SQL standard reserves that token for another use.

CompatibilityEnsure that xpath() escapes special characters in string values

Functions

Ensure that xpath() escapes special characters in string values (Florian Pflug)

Without this it is possible for the result not to be valid XML.

CompatibilityMake pg_relation_size() and friends return NULL if the object does not exist

Functions

Make pg_relation_size() and friends return NULL if the object does not exist (Phil Sorber)

This prevents queries that call these functions from returning errors immediately after a concurrent DROP.

CompatibilityMake EXTRACT(EPOCH FROM timestamp without time zone) measure the epoch from local midnight, not UTC midnight

Functions

Make EXTRACT(EPOCH FROM timestamp without time zone) measure the epoch from local midnight, not UTC midnight (Tom Lane)

This change reverts an ill-considered change made in release 7.3. Measuring from UTC midnight was inconsistent because it made the result dependent on the timezone setting, which computations for timestamp without time zone should not be. The previous behavior remains available by casting the input value to timestamp with time zone.

CompatibilityProperly parse time strings with trailing yesterday, today, and tomorrow

Functions

Properly parse time strings with trailing yesterday, today, and tomorrow (Dean Rasheed)

Previously, SELECT '04:00:00 yesterday'::timestamp returned yesterday's date at midnight.

CompatibilityFix to_date() and to_timestamp() to wrap incomplete dates toward 2020

Functions

Fix to_date() and to_timestamp() to wrap incomplete dates toward 2020 (Bruce Momjian)

Previously, supplied years and year masks of less than four digits wrapped inconsistently.

CompatibilityPrevent ALTER DOMAIN from working on non-domain types

Object Modification

Prevent ALTER DOMAIN from working on non-domain types (Peter Eisentraut)

Owner and schema changes were previously possible on non-domain types.

CompatibilityNo longer forcibly lowercase procedural language names in CREATE FUNCTION

Object Modification

No longer forcibly lowercase procedural language names in CREATE FUNCTION (Robert Haas)

While unquoted language identifiers are still lowercased, strings and quoted identifiers are no longer forcibly down-cased. Thus for example CREATE FUNCTION ... LANGUAGE 'C' will no longer work; it must be spelled 'c', or better omit the quotes.

CompatibilityChange system-generated names of foreign key enforcement triggers

Object Modification

Change system-generated names of foreign key enforcement triggers (Tom Lane)

This change ensures that the triggers fire in the correct order in some corner cases involving self-referential foreign key constraints.

CompatibilityProvide consistent backquote, variable expansion, and quoted substring behavior in psql meta-command arguments

Command-Line Tools

Provide consistent backquote, variable expansion, and quoted substring behavior in psql meta-command arguments (Tom Lane)

Previously, such references were treated oddly when not separated by whitespace from adjacent text. For example 'FOO'BAR was output as FOO BAR (unexpected insertion of a space) and FOO'BAR'BAZ was output unchanged (not removing the quotes as most would expect).

CompatibilityNo longer treat clusterdb table names as double-quoted; no longer treat reindexdb table and index names as double-quoted

Command-Line Tools

No longer treat clusterdb table names as double-quoted; no longer treat reindexdb table and index names as double-quoted (Bruce Momjian)

Users must now include double-quotes in the command arguments if quoting is wanted.

Compatibilitycreateuser no longer prompts for option settings by default

Command-Line Tools

createuser no longer prompts for option settings by default (Peter Eisentraut)

Use --interactive to obtain the old behavior.

CompatibilityDisable prompting for the user name in dropuser unless --interactive is specified

Command-Line Tools

Disable prompting for the user name in dropuser unless --interactive is specified (Peter Eisentraut)

CompatibilityAdd server parameters for specifying the locations of server-side SSL files

Server Settings

Add server parameters for specifying the locations of server-side SSL files (Peter Eisentraut)

This allows changing the names and locations of the files that were previously hard-coded as server.crt, server.key, root.crt, and root.crl in the data directory. The server will no longer examine root.crt or root.crl by default; to load these files, the associated parameters must be set to non-default values.

CompatibilityRemove the silent_mode parameter

Server Settings

Remove the silent_mode parameter (Heikki Linnakangas)

Similar behavior can be obtained with pg_ctl start -l postmaster.log.

CompatibilityRemove the wal_sender_delay parameter, as it is no longer needed

Server Settings

Remove the wal_sender_delay parameter, as it is no longer needed (Tom Lane)

CompatibilityRemove the custom_variable_classes parameter

Server Settings

Remove the custom_variable_classes parameter (Tom Lane)

The checking provided by this setting was dubious. Now any setting can be prefixed by any class name.

CompatibilityRename pg_stat_activity.procpid to pid, to match other system tables

Monitoring

Rename pg_stat_activity.procpid to pid, to match other system tables (Magnus Hagander)

CompatibilityCreate a separate pg_stat_activity column to report process state

Monitoring

Create a separate pg_stat_activity column to report process state (Scott Mead, Magnus Hagander)

The previous query and query_start values now remain available for an idle session, allowing enhanced analysis.

CompatibilityRename pg_stat_activity.current_query to query because it is not cleared when the query completes

Monitoring

Rename pg_stat_activity.current_query to query because it is not cleared when the query completes (Magnus Hagander)

CompatibilityChange all SQL-level statistics timing values to be float8 columns measured in milliseconds

Monitoring

Change all SQL-level statistics timing values to be float8 columns measured in milliseconds (Tom Lane)

This change eliminates the designed-in assumption that the values are accurate to microseconds and no more (since the float8 values can be fractional). The columns affected are pg_stat_user_functions.total_time, pg_stat_user_functions.self_time, pg_stat_xact_user_functions.total_time, and pg_stat_xact_user_functions.self_time. The statistics functions underlying these columns now also return float8 milliseconds, rather than bigint microseconds. contrib/pg_stat_statements' total_time column is now also measured in milliseconds.

FeaturesAllow queries to retrieve data only from indexes, avoiding heap access

Server / Performance

Allow queries to retrieve data only from indexes, avoiding heap access (Robert Haas, Ibrar Ahmed, Heikki Linnakangas, Tom Lane)

This feature is often called index-only scans. Heap access can be skipped for heap pages containing only tuples that are visible to all sessions, as reported by the visibility map; so the benefit applies mainly to mostly-static data. The visibility map was made crash-safe as a necessary part of implementing this feature.

FeaturesAdd the SP-GiST (Space-Partitioned GiST) index access method

Server / Performance

Add the SP-GiST (Space-Partitioned GiST) index access method (Teodor Sigaev, Oleg Bartunov, Tom Lane)

SP-GiST is comparable to GiST in flexibility, but supports unbalanced partitioned search structures rather than balanced trees. For suitable problems, SP-GiST can be faster than GiST in both index build time and search time.

FeaturesAllow group commit to work effectively under heavy load

Server / Performance

Allow group commit to work effectively under heavy load (Peter Geoghegan, Simon Riggs, Heikki Linnakangas)

Previously, batching of commits became ineffective as the write workload increased, because of internal lock contention.

FeaturesAllow uncontended locks to be managed using a new fast-path lock mechanism

Server / Performance

Allow uncontended locks to be managed using a new fast-path lock mechanism (Robert Haas)

PerformanceReduce overhead of creating virtual transaction ID locks

Server / Performance

Reduce overhead of creating virtual transaction ID locks (Robert Haas)

PerformanceReduce the overhead of serializable isolation level locks

Server / Performance

Reduce the overhead of serializable isolation level locks (Dan Ports)

PerformanceImprove PowerPC and Itanium spinlock performance

Server / Performance

Improve PowerPC and Itanium spinlock performance (Manabu Ori, Robert Haas, Tom Lane)

PerformanceReduce overhead for shared invalidation cache messages

Server / Performance

Reduce overhead for shared invalidation cache messages (Robert Haas)

FeaturesMove the frequently accessed members of the PGPROC shared memory array to a separate array

Server / Performance

Move the frequently accessed members of the PGPROC shared memory array to a separate array (Pavan Deolasee, Heikki Linnakangas, Robert Haas)

PerformanceImprove COPY performance by adding tuples to the heap in batches

Server / Performance

Improve COPY performance by adding tuples to the heap in batches (Heikki Linnakangas)

PerformanceImprove GiST index performance for geometric data types by producing better trees with less memory allocation overhead

Server / Performance

Improve GiST index performance for geometric data types by producing better trees with less memory allocation overhead (Alexander Korotkov)

FeaturesImprove GiST index build times

Server / Performance

Improve GiST index build times (Alexander Korotkov, Heikki Linnakangas)

FeaturesAllow hint bits to be set sooner for temporary and unlogged tables

Server / Performance

Allow hint bits to be set sooner for temporary and unlogged tables (Robert Haas)

FeaturesAllow sorting to be performed by inlined, non-SQL-callable comparison functions

Server / Performance

Allow sorting to be performed by inlined, non-SQL-callable comparison functions (Peter Geoghegan, Robert Haas, Tom Lane)

FeaturesMake the number of CLOG buffers scale based on shared_buffers

Server / Performance

Make the number of CLOG buffers scale based on shared_buffers (Robert Haas, Simon Riggs, Tom Lane)

PerformanceImprove performance of buffer pool scans that occur when tables or databases are dropped

Server / Performance

Improve performance of buffer pool scans that occur when tables or databases are dropped (Jeff Janes, Simon Riggs)

PerformanceImprove performance of checkpointer's fsync-request queue when many tables are being dropped or truncated

Server / Performance

Improve performance of checkpointer's fsync-request queue when many tables are being dropped or truncated (Tom Lane)

FeaturesPass the safe number of file descriptors to child processes on Windows

Server / Performance

Pass the safe number of file descriptors to child processes on Windows (Heikki Linnakangas)

This allows Windows sessions to use more open file descriptors than before.

FeaturesCreate a dedicated background process to perform checkpoints

Server / Process Management

Create a dedicated background process to perform checkpoints (Simon Riggs)

Formerly the background writer did both dirty-page writing and checkpointing. Separating this into two processes allows each goal to be accomplished more predictably.

FeaturesImprove asynchronous commit behavior by waking the walwriter sooner

Server / Process Management

Improve asynchronous commit behavior by waking the walwriter sooner (Simon Riggs)

Previously, only wal_writer_delay triggered WAL flushing to disk; now filling a WAL buffer also triggers WAL writes.

FeaturesAllow the bgwriter, walwriter, checkpointer, statistics collector, log collector, and archiver background processes to sleep more efficiently during periods of inactivity

Server / Process Management

Allow the bgwriter, walwriter, checkpointer, statistics collector, log collector, and archiver background processes to sleep more efficiently during periods of inactivity (Peter Geoghegan, Tom Lane)

This series of changes reduces the frequency of process wake-ups when there is nothing to do, dramatically reducing power consumption on idle servers.

FeaturesAllow the planner to generate custom plans for specific parameter values even when using prepared statements

Server / Optimizer

Allow the planner to generate custom plans for specific parameter values even when using prepared statements (Tom Lane)

In the past, a prepared statement always had a single "generic" plan that was used for all parameter values, which was frequently much inferior to the plans used for non-prepared statements containing explicit constant values. Now, the planner attempts to generate custom plans for specific parameter values. A generic plan will only be used after custom plans have repeatedly proven to provide no benefit. This change should eliminate the performance penalties formerly seen from use of prepared statements (including non-dynamic statements in PL/pgSQL).

FeaturesImprove the planner's ability to use nested loops with inner index scans

Server / Optimizer

Improve the planner's ability to use nested loops with inner index scans (Tom Lane)

The new "parameterized path" mechanism allows inner index scans to use values from relations that are more than one join level up from the scan. This can greatly improve performance in situations where semantic restrictions (such as outer joins) limit the allowed join orderings.

FeaturesImprove the planning API for foreign data wrappers

Server / Optimizer

Improve the planning API for foreign data wrappers (Etsuro Fujita, Shigeru Hanada, Tom Lane)

Wrappers can now provide multiple access "paths" for their tables, allowing more flexibility in join planning.

FeaturesRecognize self-contradictory restriction clauses for non-table relations

Server / Optimizer

Recognize self-contradictory restriction clauses for non-table relations (Tom Lane)

This check is only performed when constraint_exclusion is on.

FeaturesAllow indexed_col op ANY(ARRAY[...]) conditions to be used in plain index scans and index-only scans

Server / Optimizer

Allow indexed_col op ANY(ARRAY[...]) conditions to be used in plain index scans and index-only scans (Tom Lane)

Formerly such conditions could only be used in bitmap index scans.

FeaturesSupport MIN/MAX index optimizations on boolean columns

Server / Optimizer

Support MIN/MAX index optimizations on boolean columns (Marti Raudsepp)

FeaturesAccount for set-returning functions in SELECT target lists when setting row count estimates

Server / Optimizer

Account for set-returning functions in SELECT target lists when setting row count estimates (Tom Lane)

Bug fixesFix planner to handle indexes with duplicated columns more reliably

Server / Optimizer

Fix planner to handle indexes with duplicated columns more reliably (Tom Lane)

FeaturesCollect and use element-frequency statistics for arrays

Server / Optimizer

Collect and use element-frequency statistics for arrays (Alexander Korotkov, Tom Lane)

This change improves selectivity estimation for the array <@, &&, and @> operators (array containment and overlaps).

FeaturesAllow statistics to be collected for foreign tables

Server / Optimizer

Allow statistics to be collected for foreign tables (Etsuro Fujita)

FeaturesImprove cost estimates for use of partial indexes

Server / Optimizer

Improve cost estimates for use of partial indexes (Tom Lane)

FeaturesImprove the planner's ability to use statistics for columns referenced in subqueries

Server / Optimizer

Improve the planner's ability to use statistics for columns referenced in subqueries (Tom Lane)

FeaturesImprove statistical estimates for subqueries using DISTINCT

Server / Optimizer

Improve statistical estimates for subqueries using DISTINCT (Tom Lane)

FeaturesDo not treat role names and samerole specified in pg_hba.conf as automatically including superusers

Server / Authentication

Do not treat role names and samerole specified in pg_hba.conf as automatically including superusers (Andrew Dunstan)

This makes it easier to use reject lines with group roles.

FeaturesAdjust pg_hba.conf processing to handle token parsing more consistently

Server / Authentication

Adjust pg_hba.conf processing to handle token parsing more consistently (Brendan Jurd, Álvaro Herrera)

FeaturesDisallow empty pg_hba.conf files

Server / Authentication

Disallow empty pg_hba.conf files (Tom Lane)

This was done to more quickly detect misconfiguration.

FeaturesMake superuser privilege imply replication privilege

Server / Authentication

Make superuser privilege imply replication privilege (Noah Misch)

This avoids the need to explicitly assign such privileges.

FeaturesAttempt to log the current query string during a backend crash

Server / Monitoring

Attempt to log the current query string during a backend crash (Marti Raudsepp)

FeaturesMake logging of autovacuum I/O activity more verbose

Server / Monitoring

Make logging of autovacuum I/O activity more verbose (Greg Smith, Noah Misch)

This logging is triggered by log_autovacuum_min_duration.

FeaturesMake WAL replay report failures sooner

Server / Monitoring

Make WAL replay report failures sooner (Fujii Masao)

There were some cases where failures were only reported once the server went into master mode.

FeaturesAdd pg_xlog_location_diff() to simplify WAL location comparisons

Server / Monitoring

Add pg_xlog_location_diff() to simplify WAL location comparisons (Euler Taveira de Oliveira)

This is useful for computing replication lag.

FeaturesSupport configurable event log application names on Windows

Server / Monitoring

Support configurable event log application names on Windows (MauMau, Magnus Hagander)

This allows different instances to use the event log with different identifiers, by setting the event_source server parameter, which is similar to how syslog_ident works.

FeaturesChange "unexpected EOF" messages to DEBUG1 level, except when there is an open transaction

Server / Monitoring

Change "unexpected EOF" messages to DEBUG1 level, except when there is an open transaction (Magnus Hagander)

This change reduces log chatter caused by applications that close database connections ungracefully.

FeaturesTrack temporary file sizes and file counts in the pg_stat_database system view

Server / Statistical Views

Track temporary file sizes and file counts in the pg_stat_database system view (Tomas Vondra)

FeaturesAdd a deadlock counter to the pg_stat_database system view

Server / Statistical Views

Add a deadlock counter to the pg_stat_database system view (Magnus Hagander)

FeaturesAdd a server parameter track_io_timing to track I/O timings

Server / Statistical Views

Add a server parameter track_io_timing to track I/O timings (Ants Aasma, Robert Haas)

FeaturesReport checkpoint timing information in pg_stat_bgwriter

Server / Statistical Views

Report checkpoint timing information in pg_stat_bgwriter (Greg Smith, Peter Geoghegan)

FeaturesSilently ignore nonexistent schemas specified in search_path

Server / Server Settings

Silently ignore nonexistent schemas specified in search_path (Tom Lane)

This makes it more convenient to use generic path settings, which might include some schemas that don't exist in all databases.

FeaturesAllow superusers to set deadlock_timeout per-session, not just per-cluster

Server / Server Settings

Allow superusers to set deadlock_timeout per-session, not just per-cluster (Noah Misch)

This allows deadlock_timeout to be reduced for transactions that are likely to be involved in a deadlock, thus detecting the failure more quickly. Alternatively, increasing the value can be used to reduce the chances of a session being chosen for cancellation due to a deadlock.

FeaturesAdd a server parameter temp_file_limit to constrain temporary file space usage per session

Server / Server Settings

Add a server parameter temp_file_limit to constrain temporary file space usage per session (Mark Kirkwood)

FeaturesAllow a superuser to SET an extension's superuser-only custom variable before loading the associated extension

Server / Server Settings

Allow a superuser to SET an extension's superuser-only custom variable before loading the associated extension (Tom Lane)

The system now remembers whether a SET was performed by a superuser, so that proper privilege checking can be done when the extension is loaded.

FeaturesAdd postmaster -C option to query configuration parameters

Server / Server Settings

Add postmaster -C option to query configuration parameters (Bruce Momjian)

This allows pg_ctl to better handle cases where PGDATA or -D points to a configuration-only directory.

FeaturesReplace an empty locale name with the implied value in CREATE DATABASE

Server / Server Settings

Replace an empty locale name with the implied value in CREATE DATABASE (Tom Lane)

This prevents cases where pg_database.datcollate or datctype could be interpreted differently after a server restart.

FeaturesAllow multiple errors in postgresql.conf to be reported, rather than just the first one

Server / Server Settings / postgresql.conf

Allow multiple errors in postgresql.conf to be reported, rather than just the first one (Alexey Klyukin, Tom Lane)

FeaturesAllow a reload of postgresql.conf to be processed by all sessions, even if there are some settings that are invalid for particular sessions

Server / Server Settings / postgresql.conf

Allow a reload of postgresql.conf to be processed by all sessions, even if there are some settings that are invalid for particular sessions (Alexey Klyukin)

Previously, such not-valid-within-session values would cause all setting changes to be ignored by that session.

FeaturesAdd an include_if_exists facility for configuration files

Server / Server Settings / postgresql.conf

Add an include_if_exists facility for configuration files (Greg Smith)

This works the same as include, except that an error is not thrown if the file is missing.

FeaturesIdentify the server time zone during initdb, and set postgresql.conf entries timezone and log_timezone accordingly

Server / Server Settings / postgresql.conf

Identify the server time zone during initdb, and set postgresql.conf entries timezone and log_timezone accordingly (Tom Lane)

This avoids expensive time zone probes during server start.

Bug fixesFix pg_settings to report postgresql.conf line numbers on Windows

Server / Server Settings / postgresql.conf

Fix pg_settings to report postgresql.conf line numbers on Windows (Tom Lane)

FeaturesAllow streaming replication slaves to forward data to other slaves (cascading replication)

Replication and Recovery

Allow streaming replication slaves to forward data to other slaves (cascading replication) (Fujii Masao)

Previously, only the master server could supply streaming replication log files to standby servers.

FeaturesAdd new synchronous_commit mode remote_write

Replication and Recovery

Add new synchronous_commit mode remote_write (Fujii Masao, Simon Riggs)

This mode waits for the standby server to write transaction data to its own operating system, but does not wait for the data to be flushed to the standby's disk.

FeaturesAdd a pg_receivexlog tool to archive WAL file changes as they are written, rather than waiting for completed WAL files

Replication and Recovery

Add a pg_receivexlog tool to archive WAL file changes as they are written, rather than waiting for completed WAL files (Magnus Hagander)

FeaturesAllow pg_basebackup to make base backups from standby servers

Replication and Recovery

Allow pg_basebackup to make base backups from standby servers (Jun Ishizuka, Fujii Masao)

This feature lets the work of making new base backups be off-loaded from the primary server.

FeaturesAllow streaming of WAL files while pg_basebackup is performing a backup

Replication and Recovery

Allow streaming of WAL files while pg_basebackup is performing a backup (Magnus Hagander)

This allows passing of WAL files to the standby before they are discarded on the primary.

FeaturesCancel the running query if the client gets disconnected

Queries

Cancel the running query if the client gets disconnected (Florian Pflug)

If the backend detects loss of client connection during a query, it will now cancel the query rather than attempting to finish it.

FeaturesRetain column names at run time for row expressions

Queries

Retain column names at run time for row expressions (Andrew Dunstan, Tom Lane)

This change allows better results when a row value is converted to hstore or json type: the fields of the resulting value will now have the expected names.

FeaturesImprove column labels used for sub-SELECT results

Queries

Improve column labels used for sub-SELECT results (Marti Raudsepp)

Previously, the generic label ?column? was used.

FeaturesImprove heuristics for determining the types of unknown values

Queries

Improve heuristics for determining the types of unknown values (Tom Lane)

The longstanding rule that an unknown constant might have the same type as the value on the other side of the operator using it is now applied when considering polymorphic operators, not only for simple operator matches.

FeaturesWarn about creating casts to or from domain types

Queries

Warn about creating casts to or from domain types (Robert Haas)

Such casts have no effect.

FeaturesWhen a row fails a CHECK or NOT NULL constraint, show the row's contents as error detail

Queries

When a row fails a CHECK or NOT NULL constraint, show the row's contents as error detail (Jan Kundrát)

This should make it easier to identify which row is problematic when an insert or update is processing many rows.

FeaturesProvide more reliable operation during concurrent DDL

Object Manipulation

Provide more reliable operation during concurrent DDL (Robert Haas, Noah Misch)

This change adds locking that should eliminate "cache lookup failed" errors in many scenarios. Also, it is no longer possible to add relations to a schema that is being concurrently dropped, a scenario that formerly led to inconsistent system catalog contents.

FeaturesAdd CONCURRENTLY option to DROP INDEX

Object Manipulation

Add CONCURRENTLY option to DROP INDEX (Simon Riggs)

This allows index removal without blocking other sessions.

FeaturesAllow foreign data wrappers to have per-column options

Object Manipulation

Allow foreign data wrappers to have per-column options (Shigeru Hanada)

FeaturesImprove pretty-printing of view definitions

Object Manipulation

Improve pretty-printing of view definitions (Andrew Dunstan)

FeaturesAllow CHECK constraints to be declared NOT VALID

Object Manipulation / Constraints

Allow CHECK constraints to be declared NOT VALID (Álvaro Herrera)

Adding a NOT VALID constraint does not cause the table to be scanned to verify that existing rows meet the constraint. Subsequently, newly added or updated rows are checked. Such constraints are ignored by the planner when considering constraint_exclusion, since it is not certain that all rows meet the constraint.

The new ALTER TABLE VALIDATE command allows NOT VALID constraints to be checked for existing rows, after which they are converted into ordinary constraints.

FeaturesAllow CHECK constraints to be declared NO INHERIT

Object Manipulation / Constraints

Allow CHECK constraints to be declared NO INHERIT (Nikhil Sontakke, Alex Hunsaker, Álvaro Herrera)

This makes them enforceable only on the parent table, not on child tables.

FeaturesAdd the ability to rename constraints

Object Manipulation / Constraints

Add the ability to rename constraints (Peter Eisentraut)

FeaturesReduce need to rebuild tables and indexes for certain ALTER TABLE ... ALTER COLUMN TYPE operations

Object Manipulation / ALTER

Reduce need to rebuild tables and indexes for certain ALTER TABLE ... ALTER COLUMN TYPE operations (Noah Misch)

Increasing the length limit for a varchar or varbit column, or removing the limit altogether, no longer requires a table rewrite. Similarly, increasing the allowable precision of a numeric column, or changing a column from constrained numeric to unconstrained numeric, no longer requires a table rewrite. Table rewrites are also avoided in similar cases involving the interval, timestamp, and timestamptz types.

FeaturesAvoid having ALTER TABLE revalidate foreign key constraints in some cases where it is not necessary

Object Manipulation / ALTER

Avoid having ALTER TABLE revalidate foreign key constraints in some cases where it is not necessary (Noah Misch)

FeaturesAdd IF EXISTS options to some ALTER commands

Object Manipulation / ALTER

Add IF EXISTS options to some ALTER commands (Pavel Stehule)

For example, ALTER FOREIGN TABLE IF EXISTS foo RENAME TO bar.

FeaturesAdd ALTER FOREIGN DATA WRAPPER ... RENAME and ALTER SERVER ... RENAME

Object Manipulation / ALTER

Add ALTER FOREIGN DATA WRAPPER ... RENAME and ALTER SERVER ... RENAME (Peter Eisentraut)

FeaturesAdd ALTER DOMAIN ... RENAME

Object Manipulation / ALTER

Add ALTER DOMAIN ... RENAME (Peter Eisentraut)

You could already rename domains using ALTER TYPE.

FeaturesThrow an error for ALTER DOMAIN ... DROP CONSTRAINT on a nonexistent constraint

Object Manipulation / ALTER

Throw an error for ALTER DOMAIN ... DROP CONSTRAINT on a nonexistent constraint (Peter Eisentraut)

An IF EXISTS option has been added to provide the previous behavior.

FeaturesAllow CREATE TABLE (LIKE ...) from foreign tables, views, and composite types

Object Manipulation / CREATE TABLE

Allow CREATE TABLE (LIKE ...) from foreign tables, views, and composite types (Peter Eisentraut)

For example, this allows a table to be created whose schema matches a view.

Bug fixesFix CREATE TABLE (LIKE ...) to avoid index name conflicts when copying index comments

Object Manipulation / CREATE TABLE

Fix CREATE TABLE (LIKE ...) to avoid index name conflicts when copying index comments (Tom Lane)

Bug fixesFix CREATE TABLE ... AS EXECUTE to handle WITH NO DATA and column name specifications

Object Manipulation / CREATE TABLE

Fix CREATE TABLE ... AS EXECUTE to handle WITH NO DATA and column name specifications (Tom Lane)

FeaturesAdd a security_barrier option for views

Object Manipulation / Object Permissions

Add a security_barrier option for views (KaiGai Kohei, Robert Haas)

This option prevents optimizations that might allow view-protected data to be exposed to users, for example pushing a clause involving an insecure function into the WHERE clause of the view. Such views can be expected to perform more poorly than ordinary views.

FeaturesAdd a new LEAKPROOF function attribute to mark functions that can safely be pushed down into security_barrier views

Object Manipulation / Object Permissions

Add a new LEAKPROOF function attribute to mark functions that can safely be pushed down into security_barrier views (KaiGai Kohei)

FeaturesAdd support for privileges on data types

Object Manipulation / Object Permissions

Add support for privileges on data types (Peter Eisentraut)

This adds support for the SQL-conforming USAGE privilege on types and domains. The intent is to be able to restrict which users can create dependencies on types, since such dependencies limit the owner's ability to alter the type.

FeaturesCheck for INSERT privileges in SELECT INTO / CREATE TABLE AS

Object Manipulation / Object Permissions

Check for INSERT privileges in SELECT INTO / CREATE TABLE AS (KaiGai Kohei)

Because the object is being created by SELECT INTO or CREATE TABLE AS, the creator would ordinarily have insert permissions; but there are corner cases where this is not true, such as when ALTER DEFAULT PRIVILEGES has removed such permissions.

FeaturesAllow VACUUM to more easily skip pages that cannot be locked

Utility Operations

Allow VACUUM to more easily skip pages that cannot be locked (Simon Riggs, Robert Haas)

This change should greatly reduce the incidence of VACUUM getting "stuck" waiting for other sessions.

FeaturesMake EXPLAIN (BUFFERS) count blocks dirtied and written

Utility Operations

Make EXPLAIN (BUFFERS) count blocks dirtied and written (Robert Haas)

FeaturesMake EXPLAIN ANALYZE report the number of rows rejected by filter steps

Utility Operations

Make EXPLAIN ANALYZE report the number of rows rejected by filter steps (Marko Tiikkaja)

FeaturesAllow EXPLAIN ANALYZE to avoid timing overhead when time values are not wanted

Utility Operations

Allow EXPLAIN ANALYZE to avoid timing overhead when time values are not wanted (Tomas Vondra)

This is accomplished by setting the new TIMING option to FALSE.

FeaturesAdd support for range data types

Data Types

Add support for range data types (Jeff Davis, Tom Lane, Alexander Korotkov)

A range data type stores a lower and upper bound belonging to its base data type. It supports operations like contains, overlaps, and intersection.

FeaturesAdd a JSON data type

Data Types

Add a JSON data type (Robert Haas)

This type stores JSON (JavaScript Object Notation) data with proper validation.

FeaturesAdd array_to_json() and row_to_json()

Data Types

Add array_to_json() and row_to_json() (Andrew Dunstan)

FeaturesAdd a SMALLSERIAL data type

Data Types

Add a SMALLSERIAL data type (Mike Pultz)

This is like SERIAL, except it stores the sequence in a two-byte integer column (int2).

FeaturesAllow domains to be declared NOT VALID

Data Types

Allow domains to be declared NOT VALID (Álvaro Herrera)

This option can be set at domain creation time, or via ALTER DOMAIN ... ADD CONSTRAINT ... NOT VALID. ALTER DOMAIN ... VALIDATE CONSTRAINT fully validates the constraint.

FeaturesSupport more locale-specific formatting options for the money data type

Data Types

Support more locale-specific formatting options for the money data type (Tom Lane)

Specifically, honor all the POSIX options for ordering of the value, sign, and currency symbol in monetary output. Also, make sure that the thousands separator is only inserted to the left of the decimal point, as required by POSIX.

FeaturesAdd bitwise "and", "or", and "not" operators for the macaddr data type

Data Types

Add bitwise "and", "or", and "not" operators for the macaddr data type (Brendan Jurd)

FeaturesAllow xpath() to return a single-element XML array when supplied a scalar value

Data Types

Allow xpath() to return a single-element XML array when supplied a scalar value (Florian Pflug)

Previously, it returned an empty array. This change will also cause xpath_exists() to return true, not false, for such expressions.

FeaturesImprove XML error handling to be more robust

Data Types

Improve XML error handling to be more robust (Florian Pflug)

FeaturesAllow non-superusers to use pg_cancel_backend() and pg_terminate_backend() on other sessions belonging to the same user

Functions

Allow non-superusers to use pg_cancel_backend() and pg_terminate_backend() on other sessions belonging to the same user (Magnus Hagander, Josh Kupershmidt, Dan Farina)

Previously only superusers were allowed to use these functions.

FeaturesAllow importing and exporting of transaction snapshots

Functions

Allow importing and exporting of transaction snapshots (Joachim Wieland, Tom Lane)

This allows multiple transactions to share identical views of the database state. Snapshots are exported via pg_export_snapshot() and imported via SET TRANSACTION SNAPSHOT. Only snapshots from currently-running transactions can be imported.

FeaturesSupport COLLATION FOR on expressions

Functions

Support COLLATION FOR on expressions (Peter Eisentraut)

This returns a string representing the collation of the expression.

FeaturesAdd pg_opfamily_is_visible()

Functions

Add pg_opfamily_is_visible() (Josh Kupershmidt)

FeaturesAdd a numeric variant of pg_size_pretty() for use with pg_xlog_location_diff()

Functions

Add a numeric variant of pg_size_pretty() for use with pg_xlog_location_diff() (Fujii Masao)

FeaturesAdd a pg_trigger_depth() function

Functions

Add a pg_trigger_depth() function (Kevin Grittner)

This reports the current trigger call depth.

FeaturesAllow string_agg() to process bytea values

Functions

Allow string_agg() to process bytea values (Pavel Stehule)

Bug fixesFix regular expressions in which a back-reference occurs within a larger quantified subexpression

Functions

Fix regular expressions in which a back-reference occurs within a larger quantified subexpression (Tom Lane)

For example, ^(\w+)( \1)+$. Previous releases did not check that the back-reference actually matched the first occurrence.

FeaturesAdd information schema views role_udt_grants, udt_privileges, and user_defined_types

Information Schema

Add information schema views role_udt_grants, udt_privileges, and user_defined_types (Peter Eisentraut)

FeaturesAdd composite-type attributes to the information schema element_types view

Information Schema

Add composite-type attributes to the information schema element_types view (Peter Eisentraut)

FeaturesImplement interval_type columns in the information schema

Information Schema

Implement interval_type columns in the information schema (Peter Eisentraut)

Formerly these columns read as nulls.

FeaturesImplement collation-related columns in the information schema attributes, columns, domains, and element_types views

Information Schema

Implement collation-related columns in the information schema attributes, columns, domains, and element_types views (Peter Eisentraut)

FeaturesImplement the with_hierarchy column in the information schema table_privileges view

Information Schema

Implement the with_hierarchy column in the information schema table_privileges view (Peter Eisentraut)

FeaturesAdd display of sequence USAGE privileges to information schema

Information Schema

Add display of sequence USAGE privileges to information schema (Peter Eisentraut)

FeaturesMake the information schema show default privileges

Information Schema

Make the information schema show default privileges (Peter Eisentraut)

Previously, non-empty default permissions were not represented in the views.

FeaturesAllow the PL/pgSQL OPEN cursor command to supply parameters by name

Server-Side Languages / PL/pgSQL Server-Side Language

Allow the PL/pgSQL OPEN cursor command to supply parameters by name (Yeb Havinga)

FeaturesAdd a GET STACKED DIAGNOSTICS PL/pgSQL command to retrieve exception info

Server-Side Languages / PL/pgSQL Server-Side Language

Add a GET STACKED DIAGNOSTICS PL/pgSQL command to retrieve exception info (Pavel Stehule)

PerformanceSpeed up PL/pgSQL array assignment by caching type information

Server-Side Languages / PL/pgSQL Server-Side Language

Speed up PL/pgSQL array assignment by caching type information (Pavel Stehule)

PerformanceImprove performance and memory consumption for long chains of ELSIF clauses

Server-Side Languages / PL/pgSQL Server-Side Language

Improve performance and memory consumption for long chains of ELSIF clauses (Tom Lane)

FeaturesOutput the function signature, not just the name, in PL/pgSQL error messages

Server-Side Languages / PL/pgSQL Server-Side Language

Output the function signature, not just the name, in PL/pgSQL error messages (Pavel Stehule)

FeaturesAdd PL/Python SPI cursor support

Server-Side Languages / PL/Python Server-Side Language

Add PL/Python SPI cursor support (Jan Urbanski)

This allows PL/Python to read partial result sets.

FeaturesAdd result metadata functions to PL/Python

Server-Side Languages / PL/Python Server-Side Language

Add result metadata functions to PL/Python (Peter Eisentraut)

Specifically, this adds result object functions .colnames, .coltypes, and .coltypmods.

FeaturesRemove support for Python 2.2

Server-Side Languages / PL/Python Server-Side Language

Remove support for Python 2.2 (Peter Eisentraut)

FeaturesAllow SQL-language functions to reference parameters by name

Server-Side Languages / SQL Server-Side Language

Allow SQL-language functions to reference parameters by name (Matthew Draper)

To use this, simply name the function arguments and then reference the argument names in the SQL function body.

FeaturesAdd initdb options --auth-local and --auth-host

Client Applications

Add initdb options --auth-local and --auth-host (Peter Eisentraut)

This allows separate control of local and host pg_hba.conf authentication settings. --auth still controls both.

FeaturesAdd --replication/--no-replication flags to createuser to control replication permission

Client Applications

Add --replication/--no-replication flags to createuser to control replication permission (Fujii Masao)

FeaturesAdd the --if-exists option to dropdb and dropuser

Client Applications

Add the --if-exists option to dropdb and dropuser (Josh Kupershmidt)

FeaturesGive command-line tools the ability to specify the name of the database to connect to, and fall back to template1 if a postgres database connection fails

Client Applications

Give command-line tools the ability to specify the name of the database to connect to, and fall back to template1 if a postgres database connection fails (Robert Haas)

FeaturesAdd a display mode to auto-expand output based on the display width

Client Applications / psql

Add a display mode to auto-expand output based on the display width (Peter Eisentraut)

This adds the auto option to the \x command, which switches to the expanded mode when the normal output would be wider than the screen.

FeaturesAllow inclusion of a script file that is named relative to the directory of the file from which it was invoked

Client Applications / psql

Allow inclusion of a script file that is named relative to the directory of the file from which it was invoked (Gurjeet Singh)

This is done with a new command \ir.

FeaturesAdd support for non-ASCII characters in psql variable names

Client Applications / psql

Add support for non-ASCII characters in psql variable names (Tom Lane)

FeaturesAdd support for major-version-specific .psqlrc files

Client Applications / psql

Add support for major-version-specific .psqlrc files (Bruce Momjian)

psql already supported minor-version-specific .psqlrc files.

FeaturesProvide environment variable overrides for psql history and startup file locations

Client Applications / psql

Provide environment variable overrides for psql history and startup file locations (Andrew Dunstan)

PSQL_HISTORY and PSQLRC now determine these file names if set.

FeaturesAdd a \setenv command to modify the environment variables passed to child processes

Client Applications / psql

Add a \setenv command to modify the environment variables passed to child processes (Andrew Dunstan)

FeaturesName psql's temporary editor files with a .sql extension

Client Applications / psql

Name psql's temporary editor files with a .sql extension (Peter Eisentraut)

This allows extension-sensitive editors to select the right mode.

FeaturesAllow psql to use zero-byte field and record separators

Client Applications / psql

Allow psql to use zero-byte field and record separators (Peter Eisentraut)

Various shell tools use zero-byte (NUL) separators, e.g. find.

FeaturesMake the \timing option report times for failed queries

Client Applications / psql

Make the \timing option report times for failed queries (Magnus Hagander)

Previously times were reported only for successful queries.

FeaturesUnify and tighten psql's treatment of \copy and SQL COPY

Client Applications / psql

Unify and tighten psql's treatment of \copy and SQL COPY (Noah Misch)

This fix makes failure behavior more predictable and honors \set ON_ERROR_ROLLBACK.

FeaturesMake \d on a sequence show the table/column name owning it

Client Applications / Informational Commands

Make \d on a sequence show the table/column name owning it (Magnus Hagander)

FeaturesShow statistics target for columns in \d+

Client Applications / Informational Commands

Show statistics target for columns in \d+ (Magnus Hagander)

FeaturesShow role password expiration dates in \du

Client Applications / Informational Commands

Show role password expiration dates in \du (Fabrízio de Royes Mello)

FeaturesDisplay comments for casts, conversions, domains, and languages

Client Applications / Informational Commands

Display comments for casts, conversions, domains, and languages (Josh Kupershmidt)

These are included in the output of \dC+, \dc+, \dD+, and \dL respectively.

FeaturesDisplay comments for SQL/MED objects

Client Applications / Informational Commands

Display comments for SQL/MED objects (Josh Kupershmidt)

These are included in the output of \des+, \det+, and \dew+ for foreign servers, foreign tables, and foreign data wrappers respectively.

FeaturesChange \dd to display comments only for object types without their own backslash command

Client Applications / Informational Commands

Change \dd to display comments only for object types without their own backslash command (Josh Kupershmidt)

FeaturesIn psql tab completion, complete SQL keywords in either upper or lower case according to the new COMP_KEYWORD_CASE setting

Client Applications / Tab Completion

In psql tab completion, complete SQL keywords in either upper or lower case according to the new COMP_KEYWORD_CASE setting (Peter Eisentraut)

FeaturesAdd tab completion support for EXECUTE

Client Applications / Tab Completion

Add tab completion support for EXECUTE (Andreas Karlsson)

FeaturesAllow tab completion of role references in GRANT/REVOKE

Client Applications / Tab Completion

Allow tab completion of role references in GRANT/REVOKE (Peter Eisentraut)

FeaturesAllow tab completion of file names to supply quotes, when necessary

Client Applications / Tab Completion

Allow tab completion of file names to supply quotes, when necessary (Noah Misch)

FeaturesChange tab completion support for TABLE to also include views

Client Applications / Tab Completion

Change tab completion support for TABLE to also include views (Magnus Hagander)

FeaturesAdd an --exclude-table-data option to pg_dump

Client Applications / pg_dump

Add an --exclude-table-data option to pg_dump (Andrew Dunstan)

This allows dumping of a table's definition but not its data, on a per-table basis.

FeaturesAdd a --section option to pg_dump and pg_restore

Client Applications / pg_dump

Add a --section option to pg_dump and pg_restore (Andrew Dunstan)

Valid values are pre-data, data, and post-data. The option can be given more than once to select two or more sections.

FeaturesMake pg_dumpall dump all roles first, then all configuration settings on roles

Client Applications / pg_dump

Make pg_dumpall dump all roles first, then all configuration settings on roles (Phil Sorber)

This allows a role's configuration settings to mention other roles without generating an error.

FeaturesAllow pg_dumpall to avoid errors if the postgres database is missing in the new cluster

Client Applications / pg_dump

Allow pg_dumpall to avoid errors if the postgres database is missing in the new cluster (Robert Haas)

FeaturesDump foreign server user mappings in user name order

Client Applications / pg_dump

Dump foreign server user mappings in user name order (Peter Eisentraut)

This helps produce deterministic dump files.

FeaturesDump operators in a predictable order

Client Applications / pg_dump

Dump operators in a predictable order (Peter Eisentraut)

FeaturesTighten rules for when extension configuration tables are dumped by pg_dump

Client Applications / pg_dump

Tighten rules for when extension configuration tables are dumped by pg_dump (Tom Lane)

FeaturesMake pg_dump emit more useful dependency information

Client Applications / pg_dump

Make pg_dump emit more useful dependency information (Tom Lane)

The dependency links included in archive-format dumps were formerly of very limited use, because they frequently referenced objects that appeared nowhere in the dump. Now they represent actual dependencies (possibly indirect) among the dumped objects.

PerformanceImprove pg_dump's performance when dumping many database objects

Client Applications / pg_dump

Improve pg_dump's performance when dumping many database objects (Tom Lane)

FeaturesAllow libpq connection strings to have the format of a URI

libpq

Allow libpq connection strings to have the format of a URI (Alexander Shulgin)

The syntax begins with postgres://. This can allow applications to avoid implementing their own parser for URIs representing database connections.

FeaturesAdd a connection option to disable SSL compression

libpq

Add a connection option to disable SSL compression (Laurenz Albe)

This can be used to remove the overhead of SSL compression on fast networks.

FeaturesAdd a single-row processing mode for better handling of large result sets

libpq

Add a single-row processing mode for better handling of large result sets (Kyotaro Horiguchi, Marko Kreen)

Previously, libpq always collected the entire query result in memory before passing it back to the application.

FeaturesAdd const qualifiers to the declarations of the functions PQconnectdbParams, PQconnectStartParams, and PQpingParams

libpq

Add const qualifiers to the declarations of the functions PQconnectdbParams, PQconnectStartParams, and PQpingParams (Lionel Elie Mamane)

FeaturesAllow the .pgpass file to include escaped characters in the password field

libpq

Allow the .pgpass file to include escaped characters in the password field (Robert Haas)

FeaturesMake library functions use abort() instead of exit() when it is necessary to terminate the process

libpq

Make library functions use abort() instead of exit() when it is necessary to terminate the process (Peter Eisentraut)

This choice does not interfere with the normal exit codes used by the program, and generates a signal that can be caught by the caller.

FeaturesRemove dead ports

Source Code

Remove dead ports (Peter Eisentraut)

The following platforms are no longer supported: dgux, nextstep, sunos4, svr4, ultrix4, univel, bsdi.

FeaturesAdd support for building with MS Visual Studio 2010

Source Code

Add support for building with MS Visual Studio 2010 (Brar Piening)

FeaturesEnable compiling with the MinGW-w64 32-bit compiler

Source Code

Enable compiling with the MinGW-w64 32-bit compiler (Lars Kanis)

FeaturesInstall plpgsql.h into include/server during installation

Source Code

Install plpgsql.h into include/server during installation (Heikki Linnakangas)

FeaturesImprove the latch facility to include detection of postmaster death

Source Code

Improve the latch facility to include detection of postmaster death (Peter Geoghegan, Heikki Linnakangas, Tom Lane)

This eliminates one of the main reasons that background processes formerly had to wake up to poll for events.

FeaturesUse C flexible array members, where supported

Source Code

Use C flexible array members, where supported (Peter Eisentraut)

FeaturesImprove the concurrent transaction regression tests (isolationtester)

Source Code

Improve the concurrent transaction regression tests (isolationtester) (Noah Misch)

FeaturesModify thread_test to create its test files in the current directory, rather than /tmp

Source Code

Modify thread_test to create its test files in the current directory, rather than /tmp (Bruce Momjian)

FeaturesImprove flex and bison warning and error reporting

Source Code

Improve flex and bison warning and error reporting (Tom Lane)

FeaturesAdd memory barrier support

Source Code

Add memory barrier support (Robert Haas)

This is currently unused.

FeaturesModify pgindent to use a typedef file

Source Code

Modify pgindent to use a typedef file (Bruce Momjian)

FeaturesAdd a hook for processing messages due to be sent to the server log

Source Code

Add a hook for processing messages due to be sent to the server log (Martin Pihlak)

FeaturesAdd object access hooks for DROP commands

Source Code

Add object access hooks for DROP commands (KaiGai Kohei)

FeaturesCentralize DROP handling for some object types

Source Code

Centralize DROP handling for some object types (KaiGai Kohei)

FeaturesAdd a pg_upgrade test suite

Source Code

Add a pg_upgrade test suite (Peter Eisentraut)

FeaturesSync regular expression code with TCL 8.5.11 and improve internal processing

Source Code

Sync regular expression code with TCL 8.5.11 and improve internal processing (Tom Lane)

FeaturesMove CRC tables to libpgport, and provide them in a separate include file

Source Code

Move CRC tables to libpgport, and provide them in a separate include file (Daniel Farina)

FeaturesAdd options to git_changelog for use in major release note creation

Source Code

Add options to git_changelog for use in major release note creation (Bruce Momjian)

FeaturesSupport Linux's /proc/self/oom_score_adj API

Source Code

Support Linux's /proc/self/oom_score_adj API (Tom Lane)

FeaturesImprove efficiency of dblink by using libpq's new single-row processing mode

Additional Modules

Improve efficiency of dblink by using libpq's new single-row processing mode (Kyotaro Horiguchi, Marko Kreen)

This improvement does not apply to dblink_send_query()/dblink_get_result().

FeaturesSupport force_not_null option in file_fdw

Additional Modules

Support force_not_null option in file_fdw (Shigeru Hanada)

FeaturesImplement dry-run mode for pg_archivecleanup

Additional Modules

Implement dry-run mode for pg_archivecleanup (Gabriele Bartolini)

This only outputs the names of files to be deleted.

FeaturesAdd new pgbench switches --unlogged-tables, --tablespace, and --index-tablespace

Additional Modules

Add new pgbench switches --unlogged-tables, --tablespace, and --index-tablespace (Robert Haas)

Bug fixesChange pg_test_fsync to test for a fixed amount of time, rather than a fixed number of cycles

Additional Modules

Change pg_test_fsync to test for a fixed amount of time, rather than a fixed number of cycles (Bruce Momjian)

The -o/cycles option was removed, and -s/seconds added.

FeaturesAdd a pg_test_timing utility to measure clock monotonicity and timing overhead

Additional Modules

Add a pg_test_timing utility to measure clock monotonicity and timing overhead (Ants Aasma, Greg Smith)

FeaturesAdd a tcn (triggered change notification) module to generate NOTIFY events on table changes

Additional Modules

Add a tcn (triggered change notification) module to generate NOTIFY events on table changes (Kevin Grittner)

FeaturesAdjust pg_upgrade environment variables

Additional Modules / pg_upgrade

Adjust pg_upgrade environment variables (Bruce Momjian)

Rename data, bin, and port environment variables to begin with PG, and support PGPORTOLD/PGPORTNEW, to replace PGPORT.

FeaturesOverhaul pg_upgrade logging and failure reporting

Additional Modules / pg_upgrade

Overhaul pg_upgrade logging and failure reporting (Bruce Momjian)

Create four append-only log files, and delete them on success. Add -r/--retain option to unconditionally retain these files. Also remove pg_upgrade options -g/-G/-l options as unnecessary, and tighten log file permissions.

FeaturesMake pg_upgrade create a script to incrementally generate more accurate optimizer statistics

Additional Modules / pg_upgrade

Make pg_upgrade create a script to incrementally generate more accurate optimizer statistics (Bruce Momjian)

This reduces the time needed to generate minimal cluster statistics after an upgrade.

FeaturesAllow pg_upgrade to upgrade an old cluster that does not have a postgres database

Additional Modules / pg_upgrade

Allow pg_upgrade to upgrade an old cluster that does not have a postgres database (Bruce Momjian)

FeaturesAllow pg_upgrade to handle cases where some old or new databases are missing, as long as they are empty

Additional Modules / pg_upgrade

Allow pg_upgrade to handle cases where some old or new databases are missing, as long as they are empty (Bruce Momjian)

FeaturesAllow pg_upgrade to handle configuration-only directory installations

Additional Modules / pg_upgrade

Allow pg_upgrade to handle configuration-only directory installations (Bruce Momjian)

FeaturesIn pg_upgrade, add -o/-O options to pass parameters to the servers

Additional Modules / pg_upgrade

In pg_upgrade, add -o/-O options to pass parameters to the servers (Bruce Momjian)

This is useful for configuration-only directory installs.

FeaturesChange pg_upgrade to use port 50432 by default

Additional Modules / pg_upgrade

Change pg_upgrade to use port 50432 by default (Bruce Momjian)

This helps avoid unintended client connections during the upgrade.

FeaturesReduce cluster locking in pg_upgrade

Additional Modules / pg_upgrade

Reduce cluster locking in pg_upgrade (Bruce Momjian)

Specifically, only lock the old cluster if link mode is used, and do it right after the schema is restored.

FeaturesAllow pg_stat_statements to aggregate similar queries via SQL text normalization

Additional Modules / pg_stat_statements

Allow pg_stat_statements to aggregate similar queries via SQL text normalization (Peter Geoghegan, Tom Lane)

Users with applications that use non-parameterized SQL will now be able to monitor query performance without detailed log analysis.

FeaturesAdd dirtied and written block counts and read/write times to pg_stat_statements

Additional Modules / pg_stat_statements

Add dirtied and written block counts and read/write times to pg_stat_statements (Robert Haas, Ants Aasma)

FeaturesPrevent pg_stat_statements from double-counting PREPARE and EXECUTE commands

Additional Modules / pg_stat_statements

Prevent pg_stat_statements from double-counting PREPARE and EXECUTE commands (Tom Lane)

FeaturesSupport SECURITY LABEL on global objects

Additional Modules / sepgsql

Support SECURITY LABEL on global objects (KaiGai Kohei, Robert Haas)

Specifically, add security labels to databases, tablespaces, and roles.

FeaturesAllow sepgsql to honor database labels

Additional Modules / sepgsql

Allow sepgsql to honor database labels (KaiGai Kohei)

FeaturesPerform sepgsql permission checks during the creation of various objects

Additional Modules / sepgsql

Perform sepgsql permission checks during the creation of various objects (KaiGai Kohei)

FeaturesAdd sepgsql_setcon() and related functions to control the sepgsql security domain

Additional Modules / sepgsql

Add sepgsql_setcon() and related functions to control the sepgsql security domain (KaiGai Kohei)

PerformanceAdd a user space access cache to sepgsql to improve performance

Additional Modules / sepgsql

Add a user space access cache to sepgsql to improve performance (KaiGai Kohei)

FeaturesAdd a rule to optionally build HTML documentation using the stylesheet from the website

Documentation

Add a rule to optionally build HTML documentation using the stylesheet from the website (Magnus Hagander)

Use gmake STYLE=website draft.

FeaturesImprove EXPLAIN documentation

Documentation

Improve EXPLAIN documentation (Tom Lane)

FeaturesDocument that user/database names are preserved with double-quoting by command-line tools like vacuumdb

Documentation

Document that user/database names are preserved with double-quoting by command-line tools like vacuumdb (Bruce Momjian)

FeaturesDocument the actual string returned by the client for MD5 authentication

Documentation

Document the actual string returned by the client for MD5 authentication (Cyan Ogilvie)

FeaturesDeprecate use of GLOBAL and LOCAL in CREATE TEMP TABLE

Documentation

Deprecate use of GLOBAL and LOCAL in CREATE TEMP TABLE (Noah Misch)

PostgreSQL has long treated these keyword as no-ops, and continues to do so; but in future they might mean what the SQL standard says they mean, so applications should avoid using them.

How is this comparison generated?

The comparison follows PostgreSQL release notes from just after the source through the target version. For a major upgrade, maintenance releases from each older branch are included only up to the next major release date, and never after the target date. A major version such as 18 means its initial release, 18.0. Previews and development snapshots are labeled separately.

Entries come from the original English manuals. Release coverage and commit evidence are verified against upstream sources. Every entry retains its complete explanation and source link. Categories aid browsing; read the full notes for impact, conditions, and migration steps.

Fixes can be backported to several branches. Confirmed duplicates are merged conservatively, with every branch explanation retained. A note describing several independent fixes is excluded only when all are already present in the source. Major-release features remain distinct from related maintenance patches unless their complete original descriptions match. Uncertain matches are retained. This is a release-note history, not an exhaustive comparison of compiled binaries.

CVE results are calculated independently from the PostgreSQL security registry and vulnerability records. A CVE counts as gained protection only when the source is affected and the target is fixed or unaffected. Remaining vulnerabilities are listed separately. Security entries and distinct CVEs are counted separately.

Interaction inspired by pgversions.com and pgversionreport. Content comes from PostgreSQL release notes. See the release notes archive.