--- /dev/null
+versions:
+ min: 8.1
+ max: 17
+featurematrix:
+ Backend:
+ - name: 64-bit large objects
+ versions:
+ '9.3': 'Yes'
+ description: Large objects are now 64-bit and can now be up to 4TB where before
+ it was up to 2GB.
+ - name: Advisory locks
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/explicit-locking.html#ADVISORY-LOCKS
+ - name: Custom background workers
+ versions:
+ '9.3': 'Yes'
+ description: Background worker processes can now be added that can attach to PostgreSQL's
+ shared memory.
+ - name: Disk based FSM
+ versions:
+ '8.4': 'Yes'
+ description: replaces the shared memory fixed size free space map with an on-disk
+ implemenation
+ - name: Dynamic Background Workers
+ versions:
+ '9.4': 'Yes'
+ description: Allows background workers to be started and stopped dynamically by
+ any user process.
+ - name: EXPLAIN (BUFFERS) support
+ versions:
+ '9.0': 'Yes'
+ description: adds the ability to show buffer-usage statistics for a query
+ - name: EXPLAIN (MEMORY)
+ versions:
+ '17': 'Yes'
+ description: The `EXPLAIN` option `MEMORY` reports optimizer memory usage .
+ - name: EXPLAIN (SERIALIZE) support
+ versions:
+ '17': 'Yes'
+ description: The `EXPLAIN` option `SERIALIZE` reports the cost of converting data
+ for network transmission.
+ - name: EXPLAIN (WAL) support
+ versions:
+ '13': 'Yes'
+ description: "[EXPLAIN](https://www.postgresql.org/docs/13/sql-explain.html) can\
+ \ now track WAL usage information along with [auto_explain](https://www.postgresql.org/docs/13/auto-explain.html),\
+ \ [autovacuum](https://www.postgresql.org/docs/13/routine-vacuuming.html#AUTOVACUUM),\
+ \ and [pg_stat_statements](https://www.postgresql.org/docs/13/pgstatstatements.html).\r\
+ \n\r\nFor more information, please see the documentation on [EXPLAIN](https://www.postgresql.org/docs/13/sql-explain.html)."
+ - name: '"jsonlog" logging format'
+ versions:
+ '15': 'Yes'
+ description: PostgreSQL logs can now be output in [JSON](https://www.postgresql.org/docs/15/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-JSONLOG)
+ using the [`jsonlog`](https://www.postgresql.org/docs/15/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-JSONLOG)
+ parameter when setting [`log_destination`](https://www.postgresql.org/docs/15/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-WHERE).
+ This provides a "structured log" that can be used by other utilities for storage
+ and analysis.
+ - name: Loadable plugin infrastructure for monitoring the planner
+ versions:
+ '8.3': 'Yes'
+ description: allows plugins to augment or even replace the planner (like for providing
+ an index advisor)
+ - name: Payload support for LISTEN/NOTIFY
+ versions:
+ '9.0': 'Yes'
+ description: '[`NOTIFY`](https://www.postgresql.org/docs/current/sql-notify.html)
+ can send payload data, which can be received by [`LISTEN`](https://www.postgresql.org/docs/current/sql-listen.html)'
+ - name: pg_stat_checkpointer system view
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/monitoring-stats.html#MONITORING-PG-STAT-CHECKPOINTER-VIEW
+ - name: pg_stat_io - I/O metrics view
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/monitoring-stats.html#MONITORING-PG-STAT-IO-VIEW
+ - name: pg_wait_events system view
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/view-pg-wait-events.html
+ - name: Server statistics in shared memory
+ versions:
+ '15': 'Yes'
+ description: '[Server-level statistics](https://www.postgresql.org/docs/current/monitoring-stats.html)
+ are stored in shared memory. This eliminates the separate statistics collector
+ process.'
+ - name: SQL-standard information schema
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/information-schema.html
+ - name: Support for anonymous shared memory
+ versions:
+ '9.3': 'Yes'
+ description: Previously sizing shared memory often required adjusting kernel parameters
+ to accommodate the change. This is no longer necessary.
+ - name: XML, JSON and YAML output for EXPLAIN
+ versions:
+ '9.0': 'Yes'
+ description: Adds XML, JSON and YAML output to EXPLAIN to help with automatic
+ processing of plans
+ Data Types, Functions, & Operators:
+ - name: Arrays of compound types
+ versions:
+ '8.3': 'Yes'
+ description: allows the creation of arrays of arbitrary complex compound types
+ - name: Array support
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/arrays.html
+ - name: ENUM data type
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/datatype-enum.html
+ - name: GUID/UUID data type
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/datatype-uuid.html
+ - name: macaddr8 data type
+ versions:
+ '10': 'Yes'
+ url: https://www.postgresql.org/docs/10/static/datatype-net-types.html#datatype-macaddr8
+ - name: Multiranges
+ versions:
+ '14': 'Yes'
+ url: https://www.postgresql.org/docs/14/rangetypes.html#RANGETYPES-BUILTIN
+ - name: NULLs in Array
+ versions:
+ '8.2': 'Yes'
+ description: array elements can contain NULL
+ - name: Phrase search
+ versions:
+ '9.6': 'Yes'
+ description: Fulltext search for phrases and word proximity.
+ - name: Range types
+ versions:
+ '9.2': 'Yes'
+ url: https://www.postgresql.org/docs/9.2/static/rangetypes.html
+ - name: smallserial type
+ versions:
+ '9.2': 'Yes'
+ description: A serial data type that uses smallint (2 byte integer) as its base
+ type, giving it a reduced numeric range, but a smaller data footprint.
+ - name: Type modifier support
+ versions:
+ '8.3': 'Yes'
+ description: allows user defined datatypes to specify a type modifier
+ - name: XML data type
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/datatype-xml.html
+ Indexing & Constraints:
+ - name: Block-range (BRIN) indexes
+ versions:
+ '9.5': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/brin-intro.html
+ - name: B-tree bottom-up index deletion
+ versions:
+ '14': 'Yes'
+ url: https://www.postgresql.org/docs/14/btree-implementation.html#BTREE-DELETION
+ - name: B-tree deduplication
+ versions:
+ '13': 'Yes'
+ url: https://www.postgresql.org/docs/13/btree-implementation.html#BTREE-DEDUPLICATION
+ - name: Concurrent GiST indexes
+ versions:
+ '8.1': 'Yes'
+ description: Advanced locking for concurrent modification of GiST indexes
+ - name: Covering Indexes for B-trees (INCLUDE)
+ versions:
+ '11': 'Yes'
+ description: "Allows additional columns to be included in as \"non-key\" columns\
+ \ in an index, and if requirements are met, can return data from these columns\
+ \ in an index-only scan.\r\n\r\nFore more information, please see the documentation\
+ \ on [Index-Only Scans & Covering Indexes](https://www.postgresql.org/docs/current/indexes-index-only-scans.html)."
+ - name: Covering indexes for GiST (INCLUDE)
+ versions:
+ '12': 'Yes'
+ description: "Allows additional columns to be included in as \"non-key\" columns\
+ \ in a GiST index, and if requirements are met, can return data from these columns\
+ \ in an index-only scan.\r\n\r\nFore more information, please see the documentation\
+ \ on [Index-Only Scans & Covering Indexes](https://www.postgresql.org/docs/current/indexes-index-only-scans.html)."
+ - name: Deferrable unique constraints
+ versions:
+ '9.0': 'Yes'
+ description: allows unique constraint checking to be deferred until the end of
+ the transaction
+ - name: Exclusion constraints
+ versions:
+ '9.0': 'Yes'
+ description: generalizes the concept of uniqueness to support any indexable commutative
+ operator, not just equality
+ - name: GIN (Generalized Inverted Index) Indexes
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/gin.html
+ - name: GIN indexes partial match
+ versions:
+ '8.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/gin-implementation.html#GIN-PARTIAL-MATCH
+ - name: GIN Index performance and size improvements
+ versions:
+ '9.4': 'Yes'
+ description: GIN Indexes now take up significantly less space and perform a lot
+ faster than pre-9.4 releases.
+ - name: GiST (Generalized Search Tree) Indexes
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/gist.html
+ - name: Indexes on expressions
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/indexes-expressional.html
+ - name: Index-only scans
+ versions:
+ '9.2': 'Yes'
+ description: Also known as "covering indexes", allows data in indexes to satisfy
+ queries where all columns in a given query are covered by the index. This removes
+ the requirement of having to visit the table pages, which was required previously
+ to get visibility information, but now the visibility map is used instead.
+ - name: Index-only scans on GiST
+ versions:
+ '9.5': 'Yes'
+ description: GiST indexes now support index-only scans.
+ - name: Index support for IS NULL
+ versions:
+ '8.3': 'Yes'
+ description: allows index usage with IS NULL expressions
+ - name: In-memory Bitmap Indexes
+ versions:
+ '8.1': 'Yes'
+ description: enabled the planner to combine multiple indexes using an in-memory
+ bitmap
+ - name: K-nearest neighbor GiST support
+ versions:
+ '9.1': 'Yes'
+ description: allows nearest-neighbor support to contrib/pg_trgm and contrib/btree_gist
+ - name: K-nearest neighbor SP-GiST Support
+ versions:
+ '12': 'Yes'
+ description: Add support for K-nearest neighbor (K-NN) searches on SP-GiST indexes
+ when the distance operator `<->` is defined.
+ - name: Non-blocking CREATE INDEX
+ versions:
+ '8.2': 'Yes'
+ description: online index creation without locking the table
+ - name: Parallel B-tree index scans
+ versions:
+ '10': 'Yes'
+ description: B-tree index pages can be searched by separate parallel workers.
+ - name: Parallelized CREATE INDEX for BRIN indexes
+ versions:
+ '17': 'Yes'
+ description: ''
+ - name: Parallelized CREATE INDEX for B-tree indexes
+ versions:
+ '11': 'Yes'
+ description: ''
+ - name: Space-Partitioned GiST (SP-GiST) Indexes
+ versions:
+ '9.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/spgist.html
+ - name: SP-GiST indexes for range types
+ versions:
+ '9.3': 'Yes'
+ description: GiST and SP-GiST indexes can be created for table columns of range
+ types.
+ - name: UNIQUE NULLS NOT DISTINCT
+ versions:
+ '15': 'Yes'
+ description: By default, `NULL` values are treated as distinct entries. Specifying
+ `NULLS NOT DISTINCT` on unique indexes / constraints will cause `NULL` to be
+ treated as not distinct, or in other words, equivalently.
+ - name: WAL support for hash indexes
+ versions:
+ '10': 'Yes'
+ description: Hash indexes have write-ahead log support, which makes them both
+ crash safe and replicable.
+ SQL:
+ - name: ANY_VALUE aggregate
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/functions-aggregate.html#id-1.5.8.27.5.2.4.1.1.1.1
+ - name: FETCH FIRST .. WITH TIES
+ versions:
+ '13': 'Yes'
+ url: https://www.postgresql.org/docs/13/sql-select.html#SQL-LIMIT
+ - name: GROUPING SETS, CUBE and ROLLUP support
+ versions:
+ '9.5': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/queries-table-expressions.html#QUERIES-GROUPING-SETS
+ - name: INSERT/UPDATE/DELETE RETURNING
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-insert.html
+ - name: LATERAL clause
+ versions:
+ '9.3': 'Yes'
+ description: SQL-standard LATERAL option for FROM-clause subqueries and function
+ calls.
+ - name: MERGE
+ versions:
+ '15': 'Yes'
+ url: https://www.postgresql.org/docs/15/sql-merge.html
+ - name: MERGE ... RETURNING
+ versions:
+ '17': 'Yes'
+ description: '[MERGE](https://www.postgresql.org/docs/current/sql-merge.html)
+ can now use a `RETURNING` clause to return modified rows and what action was
+ used to modify them using the `merge_action()` function.'
+ - name: Multirow VALUES
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-values.html
+ - name: Non-decimal integer literals
+ versions:
+ '16': 'Yes'
+ description: Support for non-decimal integer literals, for example `0xff`, `0o777`,
+ and `0b101010`.
+ - name: ORDER BY NULLS FIRST/LAST
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-select.html
+ - name: range_agg range type aggregation function
+ versions:
+ '14': 'Yes'
+ description: Range types can be aggregated (e.g. in `GROUP BY` clauses) using
+ the [`range_agg`](https://www.postgresql.org/docs/15/functions-aggregate.html)
+ function.
+ - name: Recursive Queries
+ versions:
+ '8.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/queries-with.html
+ - name: regexp_count, regexp_instr, regexp_like
+ versions:
+ '15': 'Yes'
+ description: "- `regexp_count`: counts the number of places that match the regular\
+ \ expression in a string\r\n- `regexp_instr `: returns the starting of the Nth\
+ \ match of a regular expression in a sting\r\n- `regexp_like`: returns true\
+ \ if a regular expression has a match in a string.\r\n\r\n[https://www.postgresql.org/docs/15/functions-matching.html#FUNCTIONS-POSIX-REGEXP](https://www.postgresql.org/docs/15/functions-matching.html#FUNCTIONS-POSIX-REGEXP)"
+ - name: Row-wise comparison
+ versions:
+ '8.2': 'Yes'
+ description: ''
+ - name: SELECT FOR NO KEY UPDATE/SELECT FOR KEY SHARE lock modes
+ versions:
+ '9.3': 'Yes'
+ description: These prevent non-key-field row updates from locking foreign key
+ rows.
+ - name: SQL standard interval handling
+ versions:
+ '8.4': 'Yes'
+ description: ''
+ - name: SYSTEM_USER
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/functions-info.html#id-1.5.8.32.3.4.2.2.24.1.1.1
+ - name: TABLE statement
+ versions:
+ '8.4': 'Yes'
+ description: "SQL standard shorthand version for `SELECT * FROM`\r\n\r\nFor more\
+ \ information, please see the documentation on [`SELECT`](https://www.postgresql.org/docs/current/sql-select.html)"
+ - name: Underscores (_) for thousands separators
+ versions:
+ '16': 'Yes'
+ description: Underscores (\_) can be used as thousand separators, for example,
+ `5_432_000`
+ - name: unnest/array_agg
+ versions:
+ '8.4': 'Yes'
+ description: "`unnest` allows for arrays to be \"unnested\" and expanded into\
+ \ a set of rows.\r\n\r\nConversely, `array_agg` can take the output of a set\
+ \ of rows and aggregate them into an array.\r\n\r\nFor more information:\r\n\
+ \r\n- [Array Functions](https://www.postgresql.org/docs/current/functions-array.html)\r\
+ \n- [Aggregation Functions](https://www.postgresql.org/docs/current/functions-aggregate.html)"
+ - name: Upsert (INSERT ... ON CONFLICT DO ...)
+ versions:
+ '9.5': 'Yes'
+ description: "Support for upsert functionality which allows either no action to\
+ \ be taken when a conflict is encountered, or convert the INSERT to an UPDATE.\r\
+ \n\r\nFor more information, please see the [INSERT](https://www.postgresql.org/docs/current/sql-insert.html)\
+ \ documentation."
+ - name: Window functions
+ versions:
+ '8.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/tutorial-window.html
+ - name: WITHIN GROUP clause
+ versions:
+ '9.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-AGGREGATES
+ - name: WITH ORDINALITY clause
+ versions:
+ '9.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/queries-table-expressions.html#QUERIES-TABLEFUNCTIONS
+ - name: WITH Queries (Common Table Expressions)
+ versions:
+ '8.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/queries-with.html
+ - name: Writable WITH Queries (Common Table Expressions)
+ versions:
+ '9.1': 'Yes'
+ description: Allows INSERT/UPDATE/DELETE in WITH clauses which can be used in
+ conjunction with a RETURNING clause to to pass data up to the containing query.
+ Data Definition Language (DDL):
+ - name: ALTER object IF EXISTS
+ versions:
+ '9.2': 'Yes'
+ description: Many objects now support IF EXISTS clauses on ALTER statements, such
+ as tables, foreign tables, indexes, sequences etc.
+ - name: ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX
+ versions:
+ '9.1': 'Yes'
+ description: This allows a primary key or unique constraint to be defined using
+ an existing unique index, including a concurrently created unique index.
+ - name: ALTER TABLE ... SET ACCESS METHOD
+ versions:
+ '15': 'Yes'
+ description: '[`ALTER TABLE`](https://www.postgresql.org/docs/15/sql-altertable.html)
+ can specify a different [access method](https://www.postgresql.org/docs/15/tableam.html),
+ also known as a storage interface.'
+ - name: ALTER TABLE ... SET LOGGED / UNLOGGED
+ versions:
+ '9.5': 'Yes'
+ description: Allows tables to switch between logged and unlogged states.
+ - name: Changing column types (ALTER TABLE .. ALTER COLUMN TYPE)
+ versions:
+ '8.1': 'Yes'
+ description: allows online changes of a column datatype to a different one
+ - name: CREATE ACCESS METHOD
+ versions:
+ '12': 'Yes'
+ url: https://www.postgresql.org/docs/12/sql-create-access-method.html
+ - name: CREATE TABLE ... (LIKE) with foreign tables, views and composite types
+ versions:
+ '9.2': 'Yes'
+ description: ''
+ - name: DROP object IF EXISTS
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-commands.html
+ - name: ON COMMIT clause for CREATE TEMPORARY TABLE
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-createtable.html
+ - name: REINDEX CONCURRENTLY
+ versions:
+ '12': 'Yes'
+ url: https://www.postgresql.org/docs/current/sql-reindex.html#SQL-REINDEX-CONCURRENTLY
+ - name: Stored Generated Columns
+ versions:
+ '12': 'Yes'
+ url: https://www.postgresql.org/docs/current/ddl-generated-columns.html
+ - name: Typed tables
+ versions:
+ '9.0': 'Yes'
+ description: 'Adds support for syntax: CREATE TABLE name OF type'
+ Performance:
+ - name: Abbreviated Keys
+ versions:
+ '9.5': 'Yes'
+ description: The abbreviated keys optimization can be expected to greatly enhance
+ the performance of sorts in PostgreSQL, including those used for CREATE INDEX.
+ Reportedly, in some cases, CREATE INDEX on text columns can be as much as an
+ entire order of magnitude faster (3x is a more typical improvement). Numeric
+ sorts also support the optimization.
+ - name: Asynchronous Commit
+ versions:
+ '8.3': 'Yes'
+ description: Delays writes to WAL for committed transactions
+ - name: Automatic plan invalidation
+ versions:
+ '8.3': 'Yes'
+ description: automatic invalidation of cached exceutions plans
+ - name: Background Checkpointer
+ versions:
+ '9.2': 'Yes'
+ description: Originally the background writer held responsibility for writing
+ checkpoints, but it has now been moved into its own separate process and the
+ background writer is now only responsible for writing dirty pages to disk. This
+ provides advantages related to performance and power-reduction.
+ - name: Background Writer
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/runtime-config-resource.html
+ - name: Base backup throttling
+ versions:
+ '9.4': 'Yes'
+ description: pg_basebackup now supports throttling of backups with -r <rate> or
+ --max-rate <rate>, allowing control of the data transfer rate of the base backup.
+ - name: CREATE STATISTICS - most-common values (MCV) statistics
+ versions:
+ '12': 'Yes'
+ description: CREATE STATISTICS can collection statistics on the most common value,
+ which can improve optimizations for columns that contain nonuniform distributions.
+ - name: CREATE STATISTICS - multicolumn
+ versions:
+ '10': 'Yes'
+ description: "CREATE STATISTICS provides the ability to collect statistics over\
+ \ multiple columns, which can be used by the optimizer to generate better query\
+ \ plans.\r\n\r\nhttps://www.postgresql.org/docs/current/sql-createstatistics.html"
+ - name: CREATE STATISTICS - "OR" and "IN/ANY" statistics
+ versions:
+ '13': 'Yes'
+ description: Extend statistics can help the query planner provided better plans
+ for queries that have "OR".clauses as well as "IN/ANY" lookups over lists. For
+ more information, please see https://www.postgresql.org/docs/13/planner-stats.html#PLANNER-STATS-EXTENDED
+ - name: Cross datatype hashing support
+ versions:
+ '8.3': 'Yes'
+ description: allows hashing to be used across compatible but not identical datatypes
+ - name: Distributed checkpointing
+ versions:
+ '8.3': 'Yes'
+ description: automatic smoothening of checkpoints to reduce sudden I/O spikes
+ - name: Foreign keys marked as NOT VALID
+ versions:
+ '9.1': 'Yes'
+ description: This introduces a new option to the creation of foreign keys called
+ NOT VALID, which can later be modified to VALIDATED and validation checks performed.
+ Together these allow you to add a foreign key with minimal impact on read and
+ write operations.
+ - name: Frozen page map
+ versions:
+ '9.6': 'Yes'
+ description: Frozen page data in visibility map to prevent re-vacuuming already-frozen
+ pages during wraparound.
+ - name: Full Text Search
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/textsearch.html
+ - name: Hash aggregation can use disk
+ versions:
+ '13': 'Yes'
+ description: "The query planner can now consider using hash aggregation if it\
+ \ expects the aggregate to exceed working memory.\r\n\r\nThis can be controlled\
+ \ by two configuration parameters:\r\n\r\n- [enable_hashagg](https://www.postgresql.org/docs/13/runtime-config-query.html#GUC-ENABLE-HASHAGG)\r\
+ \n- [hash_mem_multiplier](https://www.postgresql.org/docs/13/runtime-config-resource.html#GUC-HASH-MEM-MULTIPLIER)"
+ - name: Hashing support for DISTINCT/UNION/INTERSECT/EXCEPT
+ versions:
+ '8.4': 'Yes'
+ description: allows hashing to be used in query plans involving DISTINCT/UNION/EXCEPT/INTERSECT
+ - name: Hashing support for FULL OUTER JOIN, LEFT OUTER JOIN and RIGHT OUTER JOIN
+ versions:
+ '9.1': 'Yes'
+ description: allows FULL OUTER JOIN to be implemented as a hash join, and allow
+ either side of a LEFT OUTER JOIN or RIGHT OUTER JOIN to be hashed
+ - name: Heap Only Tuples (HOT)
+ versions:
+ '8.3': 'Yes'
+ description: optimization for heavily updated tables
+ - name: Improved performance for sorts exceeding working memory
+ versions:
+ '15': 'Yes'
+ description: Sorts for data sets that exceed [`work_mem`](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM)
+ now use a batch sorting algorithm that uses more output streams and improves
+ performance.
+ - name: Improved window function performance
+ versions:
+ '15': 'Yes'
+ description: Performance optimizations for executing [window functions](https://www.postgresql.org/docs/current/functions-window.html)
+ `row_number()`, `rank()`, and `count()`.
+ - name: Incremental sort
+ versions:
+ '13': 'Yes'
+ url: https://www.postgresql.org/docs/13/runtime-config-query.html#GUC-ENABLE-INCREMENTAL-SORT
+ - name: Incremental sort for SELECT DISTINCT
+ versions:
+ '16': 'Yes'
+ description: Queries with `SELECT DISTINCT` can use [incremental sort](https://www.postgresql.org/docs/16/runtime-config-query.html#GUC-ENABLE-INCREMENTAL-SORT).
+ - name: Incremental sort for window functions
+ versions:
+ '14': 'Yes'
+ description: '[Window functions](https://www.postgresql.org/docs/14/functions-window.html)
+ can use incremental sorting'
+ - name: Inlined WITH Queries (Common Table Expressions)
+ versions:
+ '12': 'Yes'
+ description: "A WITH query that is neither recursive nor has any side-effects\
+ \ (e.g. an INSERT/UPDATE/DELETE) can be executed inline, which can lead to performance\
+ \ improvements. This behavior can be forced on a query by using the \"NOT MATERIALIZED\"\
+ \ clause, e.g.\r\n\r\n```\r\nWITH cte AS NOT MATERIALIZED (\r\n SELECT *\
+ \ FROM a\r\n)\r\nSELECT * FROM cte\r\nJOIN b ON b.id = cte.id;\r\n```\r\n\r\n\
+ For more information, please visit [https://www.postgresql.org/docs/12/queries-with.html](https://www.postgresql.org/docs/12/queries-with.html)"
+ - name: Inlining of SQL-functions
+ versions:
+ '8.1': 'Yes'
+ description: allows the planner to inline most SQL functions into the whole query
+ - name: Just-in-Time (JIT) compilation for expression evaluation and tuple deforming
+ versions:
+ '11': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/jit.html
+ - name: Load balancing for libpq / psql
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/libpq-connect.html#LIBPQ-CONNECT-LOAD-BALANCE-HOSTS
+ - name: LZ4 compression for TOAST tables
+ versions:
+ '14': 'Yes'
+ description: The compression method for [TOAST](https://www.postgresql.org/docs/14/storage-toast.html)
+ tables is now selectable and adds support for lz4 compression.
+ - name: Multi-core scalability for read-only workloads
+ versions:
+ '9.2': 'Yes'
+ description: Improve concurrent read-only workloads on multi-core servers. Previously
+ this had limited scalability offering performance benefits only up to a few
+ cores, but now performance gains are seen utilising all cores in 32 and 64 core
+ servers.
+ - name: Multiple temporary tablespaces
+ versions:
+ '8.3': 'Yes'
+ description: allows multiple tablespaces to be defined for temporary operations
+ - name: Outer Join reordering
+ versions:
+ '8.2': 'Yes'
+ description: enables the query planner to reorder out joins
+ - name: Parallel bitmap heap scans
+ versions:
+ '10': 'Yes'
+ description: A single index scan can dispatch parallel workers to process different
+ areas of the heap.
+ - name: Parallel FULL and RIGHT joins
+ versions:
+ '16': 'Yes'
+ description: Ability to execute in parallell `FULL` and `RIGHT OUTER` joins.
+ - name: Parallel full table scans (sequential scans)
+ versions:
+ '9.6': 'Yes'
+ url: https://www.postgresql.org/docs/current/parallel-plans.html#PARALLEL-SCANS
+ - name: Parallel hash joins
+ versions:
+ '11': 'Yes'
+ url: https://www.postgresql.org/docs/current/parallel-plans.html#PARALLEL-JOINS
+ - name: Parallel JOIN, aggregate
+ versions:
+ '9.6': 'Yes'
+ description: Ability to execute some kinds of JOINs, as well as aggregates, using
+ multiple parallel processes.
+ - name: Parallel merge joins
+ versions:
+ '10': 'Yes'
+ description: Merge joins can be performed in parallel.
+ - name: Parallel query
+ versions:
+ '9.6': 'Yes'
+ description: Ability to execute multiple query nodes in parallel processes.
+ - name: Parallel "SELECT DISTINCT"
+ versions:
+ '15': 'Yes'
+ description: A query using [`SELECT DISTINCT`](https://www.postgresql.org/docs/current/queries-select-lists.html#QUERIES-DISTINCT)
+ can now be executed using parallelism.
+ - name: Partial sort capability (top-n sorting)
+ versions:
+ '8.3': 'Yes'
+ description: optimizes sort operations for ORDER BY x LIMIT ionsy like operat
+ - name: Query pipelining
+ versions:
+ '14': 'Yes'
+ url: https://www.postgresql.org/docs/14/libpq-pipeline-mode.html
+ - name: Reduced lock levels for ALTER TABLE commands
+ versions:
+ '9.4': 'Yes'
+ description: "The following commands now have reduced lock levels for reduced\
+ \ lock contention:\r\n\r\nVALIDATE CONSTRAINT\r\n\r\nCLUSTER ON\r\nSET WITHOUT\
+ \ CLUSTER\r\n\r\nALTER COLUMN SET STATISTICS\r\nALTER COLUMN SET ()\r\nALTER\
+ \ COLUMN RESET ()"
+ - name: SELECT ... FOR UPDATE/SHARE NOWAIT
+ versions:
+ '8.1': 'Yes'
+ description: ''
+ - name: Set costs specific to TABLESPACEs
+ versions:
+ '9.0': 'Yes'
+ description: Allows for setting seq_page_cost and random_page_cost on a per tablespace
+ level
+ - name: Shared row level locking
+ versions:
+ '8.1': 'Yes'
+ description: reduces deadlock scenarios with foreign keys
+ - name: SIMD support for ARM
+ versions:
+ '16': 'Yes'
+ description: Allows for SIMD execution of vector operations on ARM architecture,
+ including JSON string parsing, including subtransaction ID searches.
+ - name: SIMD support for x86
+ versions:
+ '16': 'Yes'
+ description: Allows for SIMD execution of vector operations on x86 architecture,
+ including JSON string parsing, ASCII string detection, and subtransaction ID
+ searches.
+ - name: SKIP LOCKED clause
+ versions:
+ '9.5': 'Yes'
+ description: Skips over rows that are currently locked without waiting.
+ - name: Synchronized sequential scanning
+ versions:
+ '8.3': 'Yes'
+ description: enabled sequential scans to piggyback on concurrently running scans
+ - name: TABLESAMPLE clause
+ versions:
+ '9.5': 'Yes'
+ description: Specifies that a sample of the table is to be used, which is useful
+ for use-cases such as approximate averages.
+ - name: Tablespaces
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-createtablespace.html
+ - name: Unlogged tables
+ versions:
+ '9.1': 'Yes'
+ description: 'Such tables provide better update performance than regular tables,
+ but are not crash-safe: their contents are automatically cleared in case of
+ a server crash. Their contents do not propagate to replication slaves, either.'
+ - name: WAL Buffer auto-tuning
+ versions:
+ '9.1': 'Yes'
+ description: wal_buffers is now auto-tuned by default based on the size of shared_buffers
+ JSON:
+ - name: Improved set of JSON functions and operators
+ versions:
+ '9.3': 'Yes'
+ description: New operators and functions to extract values from JSON data strings,
+ JSON data strings can now to be converted into records and new functions to
+ convert values, records, and hstore data to JSON.
+ - name: JSONB data type
+ versions:
+ '9.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/datatype-json.html
+ - name: JSONB-modifying operators and functions
+ versions:
+ '9.5': 'Yes'
+ description: New operators and functions which allow deleting, modifying or inserting
+ values into JSONB values, including at specific path locations.
+ - name: JSONB Subscripting
+ versions:
+ '14': 'Yes'
+ url: https://www.postgresql.org/docs/14/datatype-json.html#JSONB-SUBSCRIPTING
+ - name: JSON data type
+ versions:
+ '9.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/datatype-json.html
+ - name: SQL/JSON constructors
+ versions:
+ '16': 'Yes'
+ description: Adds SQL/JSON constructors, including `JSON_ARRAY()`, `JSON_ARRAYAGG()`,
+ `JSON_OBJECT()`, and `JSON_OBJECTAGG()`.
+ - name: 'SQL/JSON: datetime()'
+ versions:
+ '13': 'Yes'
+ description: "The SQL/JSON path `datetime()` function in JSON path expressions\
+ \ converts valid date and time formats (e.g. ISO 8601) to their corresponding\
+ \ PostgreSQL type.\r\n\r\nFor more information, see the [JSON path documentation](https://www.postgresql.org/docs/13/functions-json.html#FUNCTIONS-SQLJSON-OP-TABLE)"
+ - name: SQL/JSON IS JSON
+ versions:
+ '16': 'Yes'
+ description: "SQL/JSON syntax for testing the type of JSON object. For example:\r\
+ \n\r\n```\r\nSELECT js,\r\n js IS JSON \"json?\",\r\n js IS JSON SCALAR \"\
+ scalar?\",\r\n js IS JSON OBJECT \"object?\",\r\n js IS JSON ARRAY \"array?\"\
+ \r\nFROM (VALUES\r\n ('123'), ('\"abc\"'), ('{\"a\": \"b\"}'), ('[1,2]'),('abc'))\
+ \ foo(js);\r\n```"
+ - name: SQL/JSON JSON_TABLE
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/functions-json.html#FUNCTIONS-SQLJSON-TABLE
+ - name: SQL/JSON path expressions
+ versions:
+ '12': 'Yes'
+ url: https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-PATH
+ - name: SQL/JSON query functions
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/functions-json.html#FUNCTIONS-SQLJSON-QUERYING
+ Partitioning & Inheritance:
+ - name: Accelerated partition pruning
+ versions:
+ '12': 'Yes'
+ description: Performance improvements for queries on tables with thousands of
+ partitions when only a limited subset of partitions need to be accessed.
+ - name: Declarative table partitioning
+ versions:
+ '10': 'Yes'
+ url: https://www.postgresql.org/docs/10/static/ddl-partitioning.html#ddl-partitioning-declarative
+ - name: Default Partition
+ versions:
+ '11': 'Yes'
+ description: A default partition stores data that does not match the partition
+ key for any other partition, i.e. it is a "catch all" partition.
+ - name: Foreign Key references for partitioned tables
+ versions:
+ '12': 'Yes'
+ description: A foreign key can reference a partitioned table.
+ - name: Foreign table inheritance
+ versions:
+ '9.5': 'Yes'
+ description: Foreign tables can now inherit from other foreign tables or other
+ regular tables. The reverse also applies.
+ - name: Partitioning by a hash key
+ versions:
+ '11': 'Yes'
+ description: ''
+ - name: Partition pruning during query execution
+ versions:
+ '11': 'Yes'
+ description: Queries on partitioned tables can eliminate partitions during query
+ execution time, instead of only at query planning time. This allows PostgreSQL
+ to use information that becomes available during query execution to further
+ prune the number of partitions it needs to use, leading to improved query performance.
+ - name: Support for PRIMARY KEY, FOREIGN KEY, indexes, and triggers on partitioned
+ tables
+ versions:
+ '11': 'Yes'
+ description: ''
+ - name: Table Partitioning
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/ddl-partitioning.html
+ - name: UPDATE on a partition key
+ versions:
+ '11': 'Yes'
+ description: When a partition key is updated on a row, the row is moved to the
+ appropriate partition.
+ Views & Materialized Views:
+ - name: Materialized Views
+ versions:
+ '9.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/rules-materializedviews.html
+ - name: Materialized views with concurrent refresh
+ versions:
+ '9.4': 'Yes'
+ description: Materialized views which can be refreshed with REFRESH MATERIALIZED
+ VIEW CONCURRENTLY name;
+ - name: SECURITY INVOKER views
+ versions:
+ '15': 'Yes'
+ description: '[Views](https://www.postgresql.org/docs/15/sql-createview.html)
+ can be created using the `SECURITY INVOKER` parameter, which executes the view
+ with the privileges of the caller instead of the privileges of the owner.'
+ - name: Temporary VIEWs
+ versions:
+ '8.1': 'Yes'
+ description: allows the creation of temporary VIEWs
+ - name: Updatable views
+ versions:
+ '9.3': 'Yes'
+ description: Simple views can now have UPDATE/INSERT/DELETE performed against
+ them.
+ - name: WITH CHECK clause
+ versions:
+ '9.4': 'Yes'
+ description: Auto-updatable views can now specify whether an INSERT or UPDATE
+ would change the state of the row so that it would no longer be visible in the
+ view. Using WITH CHECK OPTION will prevent any such changes from occuring.
+ Replication:
+ - name: ALTER SUBSCRIPTION ... SKIP
+ versions:
+ '15': 'Yes'
+ description: '[`ALTER SUBSCRIPTION ... SKIP`] allows a subscriber to skip replaying
+ a transaction. For more information, please read the section on handling [conflicts](https://www.postgresql.org/docs/15/logical-replication-conflicts.html)
+ with logical replication.'
+ - name: Cascading streaming replication
+ versions:
+ '9.2': 'Yes'
+ description: Standbys can now stream to other standbys, reducing replication load
+ on the primary server.
+ - name: Configure max WAL retention for replication slots
+ versions:
+ '13': 'Yes'
+ url: https://www.postgresql.org/docs/13/runtime-config-replication.html#GUC-MAX-SLOT-WAL-KEEP-SIZE
+ - name: Failover support for logical replication slots
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/logical-replication-failover.html
+ - name: Logical replication
+ versions:
+ '10': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/logical-replication.html
+ - name: Logical replication avoids replication loops
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/sql-createsubscription.html#SQL-CREATESUBSCRIPTION-WITH-ORIGIN
+ - name: Logical replication column lists
+ versions:
+ '15': 'Yes'
+ description: '[Publications](https://www.postgresql.org/docs/15/logical-replication-publication.html)
+ for logical replication can now specify which columns to publish. Previously,
+ a publication would publish all columns in a table.'
+ - name: Logical replication for partitioned tables
+ versions:
+ '13': 'Yes'
+ description: Fully supports logical replication of partitioned tables.
+ - name: Logical replication from standbys
+ versions:
+ '16': 'Yes'
+ description: Logical replication publishers can be created from standby instances.
+ - name: Logical replication initial sync using binary protocol
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/sql-createsubscription.html#SQL-CREATESUBSCRIPTION-WITH-BINARY
+ - name: Logical replication lookups with additional indexes
+ versions:
+ '16': 'Yes'
+ description: "A logical replication subscriber can use indexes other than the\
+ \ `PRIMARY KEY` to perform lookups during\r\n`UPDATE` or `DELETE` operations,"
+ - name: Logical replication parallel apply of transactions
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/sql-createsubscription.html#SQL-CREATESUBSCRIPTION-WITH-STREAMING
+ - name: Logical replication publish all tables in schema
+ versions:
+ '15': 'Yes'
+ description: When creating a logical replication publication, a user can specify
+ to publish all the tables within a schema , e.g. [`CREATE PUBLICATION ... FOR
+ TABLES IN SCHEMA ...`](https://www.postgresql.org/docs/15/sql-createpublication.html).
+ - name: Logical replication row filtering
+ versions:
+ '15': 'Yes'
+ url: https://www.postgresql.org/docs/15/logical-replication-row-filter.html
+ - name: Logical replication slots migrate through pg_upgrade migrate
+ versions:
+ '17': 'Yes'
+ description: This allows logical replication to continue quickly after the upgrade.
+ This only works for old PostgreSQL clusters that are version 17 or later.
+ - name: Logical replication stream in-progress transactions
+ versions:
+ '14': 'Yes'
+ description: In-progress transactions can be streamed when using [logical replication](https://www.postgresql.org/docs/current/logical-replication.html),
+ versus having to wait for the transaction to be completed first.
+ - name: Logical replication subscriber can disable on error
+ versions:
+ '15': 'Yes'
+ description: Logical replication subscribers can be automatically disabled using
+ the [`disable_on_error`](https://www.postgresql.org/docs/15/logical-replication-conflicts.html)
+ setting.
+ - name: Quorum commit for synchronous replication
+ versions:
+ '10': 'Yes'
+ description: Using the synchronous_standby_names configuration parameter, synchronous
+ replication can be setup to allow for any number of standbys to confirm writes
+ have been committed, irrespective of their ordering. This is also known as "quorum
+ commit."
+ - name: Replication Slots
+ versions:
+ '9.4': 'Yes'
+ url: https://www.postgresql.org/docs/9.4/static/warm-standby.html#STREAMING-REPLICATION-SLOTS
+ - name: Streaming-only cascading replication
+ versions:
+ '9.3': 'Yes'
+ description: Cascading replication previously required that an xlog archive be
+ available in order for a standbys of the new primary to correctly switch to
+ the new timeline. This change removes this dependency.
+ - name: Streaming Replication
+ versions:
+ '9.0': 'Yes'
+ description: Integrated replication support based on streaming WAL data
+ - name: Synchronous replication
+ versions:
+ '9.1': 'Yes'
+ description: This allows the primary to wait for a standby to write the transaction
+ information to disk before acknowledging the commit. One standby at a time can
+ take the role of the synchronous standby, as controlled by the synchronous_standby_names
+ setting. Synchronous replication can be enabled or disabled on a per-transaction
+ basis using the synchronous_commit setting.
+ Backup, Restore, & Data Integrity:
+ - name: Archive modules
+ versions:
+ '15': 'Yes'
+ url: https://www.postgresql.org/docs/15/archive-modules.html
+ - name: Checksum on data pages
+ versions:
+ '9.3': 'Yes'
+ description: Clusters can now be created with checksums on pages to detect and
+ report page corruption.
+ - name: Enable/Disable page checksums in an offline cluster
+ versions:
+ '12': 'Yes'
+ description: "Page checksums can be enabled or disabled in an offline PostgreSQL\
+ \ cluster via the pg_checksums command:\r\n\r\nhttps://www.postgresql.org/docs/12/app-pgchecksums.html"
+ - name: Generic WAL facility
+ versions:
+ '9.6': 'Yes'
+ description: Consistent, simple API for WAL-logging of database objects, supporting
+ new index access methods and other storage objects.
+ - name: Hot Standby
+ versions:
+ '9.0': 'Yes'
+ description: allow read only connections during recovery
+ - name: lz4 and Zstandard (zstd) compression for WAL full page writes
+ versions:
+ '15': 'Yes'
+ url: https://www.postgresql.org/docs/15/runtime-config-wal.html#GUC-WAL-COMPRESSION
+ - name: min_wal_size / max_wal_size
+ versions:
+ '9.5': 'Yes'
+ description: "Replaces `checkpoint_segments` parameter.\r\n\r\nFor more information,\
+ \ please see the [WAL configuration](https://www.postgresql.org/docs/current/wal-configuration.html)\
+ \ documentation."
+ - name: Multiple synchronous standbys
+ versions:
+ '9.6': 'Yes'
+ description: Ability to require synch messages from multiple prioritized standbys
+ when committing a synchronous transaction.
+ - name: Named restore points
+ versions:
+ '9.1': 'Yes'
+ description: Create a named point for performing restore using pg_create_restore_point
+ - name: Parallel pg_dump
+ versions:
+ '9.3': 'Yes'
+ description: pg_dump now has a --jobs option to dump tables in parallel.
+ - name: Parallel restore
+ versions:
+ '8.4': 'Yes'
+ description: allows pg_restore to restore data from custom format dumps in parallel
+ - name: pg_basebackup client decompression
+ versions:
+ '15': 'Yes'
+ description: '[`pg_basebackup`](https://www.postgresql.org/docs/15/app-pgbasebackup.html)
+ can now decompress backups using `lz4` and `zstd` (Zstandard) compression.'
+ - name: pg_basebackup incremental backup
+ versions:
+ '17': 'Yes'
+ description: Incremental backups can be created using the `--incremental` option
+ for [`pg_basebackup`](https://www.postgresql.org/docs/current/app-pgbasebackup.html).
+ The new application [pg_combinebackup](https://www.postgresql.org/docs/17/app-pgcombinebackup.html)
+ allows manipulation of base and incremental file system backups.
+ - name: pg_basebackup server-side compression
+ versions:
+ '15': 'Yes'
+ description: '[`pg_basebackup`](https://www.postgresql.org/docs/current/app-pgbasebackup.html)
+ now supports server-side compression when creating a backup using the `--compress`
+ flag. This includes `gzip`, `lz4`, and `zstd` (Zstandard) compression.'
+ - name: pg_basebackup tool
+ versions:
+ '9.1': 'Yes'
+ description: pg_basebackup is a tool to take a base backup of a PostgreSQL cluster
+ - name: pg_dump, pg_dumpall, pg_restore --filter
+ versions:
+ '17': 'Yes'
+ description: Allow [pg_dump](https://www.postgresql.org/docs/current/app-pgdump.html),
+ [pg_dumpall](https://www.postgresql.org/docs/current/app-pg-dumpall.html), and
+ [pg_restore](https://www.postgresql.org/docs/current/app-pgrestore.html) to
+ specify include/exclude objects in a file using the `--filter` option.
+ - name: pg_receivewal (formerly pg_receivexlog)
+ versions:
+ '9.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/app-pgreceivewal.html
+ - name: Point-in-Time Recovery
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/continuous-archiving.html
+ - name: Pre-fetch WAL during recovery
+ versions:
+ '15': 'Yes'
+ url: https://www.postgresql.org/docs/15/runtime-config-wal.html#GUC-RECOVERY-PREFETCH
+ - name: remote_apply mode
+ versions:
+ '9.6': 'Yes'
+ description: Ability to require that synchronous replicas be caught up with the
+ master in applying changes before commit. Supports "consistent clustering".
+ - name: Time-delayed Standbys
+ versions:
+ '9.4': 'Yes'
+ description: A new setting called recovery_min_apply_delay will allow a standby
+ to lag behind the primary by a specified amount of time.
+ - name: Verify backup integrity (pg_verifybackup)
+ versions:
+ '13': 'Yes'
+ url: https://www.postgresql.org/docs/13/app-pgverifybackup.html
+ - name: Warm Standby
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/warm-standby.html
+ Data Import & Export:
+ - name: COPY from/to STDIN/STDOUT
+ versions:
+ '9.3': 'Yes'
+ description: COPY and psql's \copy now support piping from and to STDIN and STDOUT
+ respectively.
+ - name: COPY FROM ... WHERE
+ versions:
+ '12': 'Yes'
+ description: Specify which rows are loaded from a data source via a WHERE clause
+ when using COPY FROM
+ - name: COPY ... ON_ERROR
+ versions:
+ '17': 'Yes'
+ description: "The new `ON_ERROR` option for COPY provides the option to ignore\
+ \ and discard error rows. The default behavior is ON_ERROR stop the import.\r\
+ \n\r\nSee [`COPY`](https://www.postgresql.org/docs/current/sql-copy.html)."
+ - name: COPY with arbitrary SELECT
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-copy.html
+ - name: CSV support for COPY
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-copy.html
+ Configuration Management:
+ - name: ALTER SYSTEM
+ versions:
+ '9.4': 'Yes'
+ url: https://www.postgresql.org/docs/9.4/static/sql-altersystem.html
+ - name: Fractional input for "integer" values
+ versions:
+ '12': 'Yes'
+ description: "Fractional input for \"integer\" server variables is now accepted\
+ \ e.g.\r\n\r\nSET work_mem = '24.2MB'"
+ - name: Include directives for pg_hba.conf and pg_ident.conf
+ versions:
+ '16': 'Yes'
+ description: 'Both [`pg_hba.conf`](https://www.postgresql.org/docs/16/auth-pg-hba-conf.html)
+ and [`pg_ident.conf`](https://www.postgresql.org/docs/16/auth-username-maps.html)
+ support include directives that let you specify additional files for loading
+ rules. These include: `include`, `include_if_exists`, and `include_dir`.'
+ - name: Per user/database server configuration settings
+ versions:
+ '9.0': 'Yes'
+ description: provides for per user/database server configuration settings
+ - name: pg_config system view
+ versions:
+ '9.6': 'Yes'
+ description: New system view to display information about the PostgreSQL build,
+ storage, and build configuration options.
+ - name: Regular expression matching in pg_hba.conf and pg_ident.conf
+ versions:
+ '16': 'Yes'
+ description: Both [`pg_hba.conf`](https://www.postgresql.org/docs/16/auth-pg-hba-conf.html)
+ and [`pg_ident.conf`](https://www.postgresql.org/docs/16/auth-username-maps.html)
+ allow for regular expression matching on usernames. `pg_hba.conf` also supports
+ regular expression matching on database names.
+ Security:
+ - name: Channel binding for SCRAM authentication
+ versions:
+ '11': 'Yes'
+ url: https://www.postgresql.org/docs/current/sasl-authentication.html#SASL-SCRAM-SHA-256
+ - name: Client can require SCRAM channel binding
+ versions:
+ '13': 'Yes'
+ url: https://www.postgresql.org/docs/13/libpq-connect.html#LIBPQ-CONNECT-CHANNEL-BINDING
+ - name: Client-specified requirements for authentication
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/devel/libpq-connect.html#LIBPQ-CONNECT-REQUIRE-AUTH
+ - name: Column level permissions
+ versions:
+ '8.4': 'Yes'
+ description: allows specification of granular column-level permissions in addition
+ to table level grants
+ - name: Default permissions
+ versions:
+ '9.0': 'Yes'
+ description: allows the specification of default permissions for objects
+ - name: Direct TLS negotiation ("sslnegotiation")
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/libpq-connect.html#LIBPQ-CONNECT-SSLNEGOTIATION
+ - name: GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS
+ versions:
+ '9.0': 'Yes'
+ description: simplifies permission management by allowing mass changes of GRANTS
+ - name: GSSAPI client and server-side encryption
+ versions:
+ '12': 'Yes'
+ description: "Support for client and server-side connection encryption when using\
+ \ GSSAPI for authentication.\r\n\r\nhttps://www.postgresql.org/docs/12/gssapi-auth.html"
+ - name: GSSAPI support
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/gssapi-auth.html
+ - name: Kerberos credential delegation
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/runtime-config-connection.html#GUC-GSS-ACCEPT-DELEGATION
+ - name: krb5 authentication (without gssapi)
+ versions:
+ '8.1': 'Yes'
+ '9.4': Obsolete
+ description: native Kerberos 5 wire authentication (replaced with GSSAPI)
+ - name: Large object access controls
+ versions:
+ '9.0': 'Yes'
+ description: Access controls on large objects
+ - name: LDAP server discovery
+ versions:
+ '12': 'Yes'
+ description: "LDAP servers with DNS SRV can be discovered if PostgreSQL is built\
+ \ with OpenLDAP\r\n\r\nhttps://www.postgresql.org/docs/12/auth-ldap.html"
+ - name: Multifactor authentication via valid client SSL/TLS certificate
+ versions:
+ '12': 'Yes'
+ description: "If an authentication entry in the pg_hba.conf specifies the `clientcert=verify-full`,\
+ \ then the client must present a valid SSL certificate that matches the login\
+ \ name, or the client name based on a map.\r\n\r\n[https://www.postgresql.org/docs/12/ssl-tcp.html#SSL-CLIENT-CERTIFICATES](https://www.postgresql.org/docs/12/ssl-tcp.html#SSL-CLIENT-CERTIFICATES)"
+ - name: Native LDAP authentication
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-LDAP
+ - name: Native RADIUS authentication
+ versions:
+ '9.0': 'Yes'
+ description: adds support for authentictaing against a RADIUS server
+ - name: Per user/database connection limits
+ versions:
+ '8.1': 'Yes'
+ description: allows restrictions on the number of connections a given user or
+ database will be allowed to make or accept
+ - name: Predefined roles
+ versions:
+ '9.6': 'Yes'
+ url: https://www.postgresql.org/docs/current/predefined-roles.html
+ - name: Privileges for setting configuration parameters
+ versions:
+ '15': 'Yes'
+ description: Unprivileged users can be [granted permission](https://www.postgresql.org/docs/15/sql-grant.html)
+ to change server variables via [`SET`](https://www.postgresql.org/docs/current/sql-set.html)
+ and [`ALTER SYSTEM`](https://www.postgresql.org/docs/current/sql-altersystem.html)
+ - name: ROLES
+ versions:
+ '8.1': 'Yes'
+ description: replaces user and group concept by a more generalizes role based
+ concept
+ - name: Row-Level Security
+ versions:
+ '9.5': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-createpolicy.html
+ - name: SCRAM-SHA-256 Authentication
+ versions:
+ '10': 'Yes'
+ description: "As described in RFC 7677, SCRAM-SHA-256 authentication provides\
+ \ challenge-response scheme, that prevents password sniffing on untrusted connections.\
+ \ It is more secure than the md5 method, but might not be supported by older\
+ \ clients.\r\n\r\nSCRAM-SHA-256 authentication can be enabled in the host-based\
+ \ authentication configuration file."
+ - name: Search+bind mode operation for LDAP authentication
+ versions:
+ '9.0': 'Yes'
+ description: Allows searching for the user in the directory first, and then binds
+ with the DN found for this user
+ - name: security_barrier option on views
+ versions:
+ '9.2': 'Yes'
+ description: This prevents security_barrier views from being moved into other
+ scopes, preventing possible leakage of view-prohibited data.
+ - name: Security Service Provider Interface (SSPI)
+ versions:
+ '8.3': 'Yes'
+ description: full integration with the native authentication framework in Microsoft
+ Windows
+ - name: SSL certificate validation in libpq
+ versions:
+ '8.4': 'Yes'
+ description: certificate validation in libpq
+ - name: SSL client certificate authentication
+ versions:
+ '8.4': 'Yes'
+ description: allows authentication of clients by the use of an SSL certificate
+ - name: SSPI authentication via GSSAPI
+ versions:
+ '9.1': 'Yes'
+ description: allows Unix-based GSSAPI clients to do SSPI authentication with Windows
+ servers.
+ - name: Support using the client's OS trusted CA.
+ versions:
+ '16': 'Yes'
+ description: Specifying `sslroot=system` instructs PostgreSQL to use the trusted
+ certificate authority (CA) store provided by the client's operating system.
+ Transactions and Visibility:
+ - name: Cursors
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-declare.html
+ - name: Savepoints
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-savepoint.html
+ - name: Serializable Snapshot Isolation
+ versions:
+ '9.1': 'Yes'
+ description: This implements true serializable snapshot isolation. Previously,
+ asking for serializable isolation guaranteed only that a single MVCC snapshot
+ would be used for the entire transaction, which allowed certain documented anomalies.
+ - name: Two Phase commit
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-prepare-transaction.html
+ - name: Updatable cursors
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-declare.html
+ VACUUM and Maintenance:
+ - name: Inserted data can trigger autovacuum
+ versions:
+ '13': 'Yes'
+ description: This new behavior reduces the work necessary when the table needs
+ to be frozen and allows pages to be set as all-visible. All-visible pages allow
+ index-only scans to access fewer heap rows.
+ - name: Integrated autovacuum daemon
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/routine-vacuuming.html#AUTOVACUUM
+ - name: Page freezing optimizations
+ versions:
+ '16': 'Yes'
+ description: Improvements to the page freezing strategy helps the general performance
+ of vacuuming and other maintenance operations.
+ - name: Parallelized VACUUM for Indexes
+ versions:
+ '13': 'Yes'
+ description: "The VACUUM process can be parallelized for indexes. The number of\
+ \ VACUUM jobs for an index can be specified.\r\n\r\nFor more information, please\
+ \ see the [VACUUM documentation](https://www.postgresql.org/docs/current/sql-vacuum.html)"
+ - name: Parallel vacuumdb jobs
+ versions:
+ '9.5': 'Yes'
+ description: The vacuumdb tool now supports an option to define the number of
+ jobs in which to run VACUUM.
+ - name: Radix tree memory structure for vacuum
+ versions:
+ '17': 'Yes'
+ description: The internal structure for vacuum now uses a radix tree structure,
+ which reduces the amount of memory required for the vacuum process. Additionally,
+ vacuum is no longer limited to 1GB of memory even when `maintenance_work_mem`
+ or `autovacuum_work_mem` are set to higher values.
+ - name: Vacuum "emergency mode"
+ versions:
+ '14': 'Yes'
+ description: PostgreSQL will vacuum aggressively when it detects the possibility
+ of transaction ID wraparound. This is controlled with the [`vacuum_failsafe_age
+ `](https://www.postgresql.org/docs/14/runtime-config-client.html#GUC-VACUUM-FAILSAFE-AGE)
+ and [`vacuum_multixact_failsafe_age `](https://www.postgresql.org/docs/14/runtime-config-client.html#GUC-MULTIXACT-FAILSAFE-AGE)
+ configuration parameters.
+ - name: Visibility Map for Vacuuming
+ versions:
+ '8.4': 'Yes'
+ description: This reduces the overhead of vacuuming as the visibility map tracks
+ only the pages that need to be vacuumed.
+ Foreign Data Wrappers:
+ - name: Certificate authentication with postgres_fdw
+ versions:
+ '13': 'Yes'
+ description: "The [postgres_fdw](https://www.postgresql.org/docs/13/postgres-fdw.html)\
+ \ can now use the built-in [certificate authentication](https://www.postgresql.org/docs/current/auth-cert.html)\
+ \ mechanism.\r\n\r\nFor more information, please visit the [postgres_fdw documentation](https://www.postgresql.org/docs/13/postgres-fdw.html#id-1.11.7.42.10)"
+ - name: Foreign data wrapper query parallelism
+ versions:
+ '14': 'Yes'
+ description: Queries that reference multiple foreign tables can perform table
+ scans in parallel. This is implemented in the [`postgres_fdw`](https://www.postgresql.org/docs/14/postgres-fdw.html)
+ - name: Foreign data wrappers
+ versions:
+ '9.1': 'Yes'
+ description: Foreign data wrappers allow access to external data for querying.
+ - name: Foreign Tables
+ versions:
+ '9.1': 'Yes'
+ description: This allows data stored outside the database to be used like native
+ PostgreSQL-stored data.
+ - name: IMPORT FOREIGN SCHEMA
+ versions:
+ '9.5': 'Yes'
+ url: https://www.postgresql.org/docs/9.5/static/sql-importforeignschema.html
+ - name: Import foreign table partitions
+ versions:
+ '14': 'Yes'
+ description: '[`IMPORT FOREIGN SCHEMA`](https://www.postgresql.org/docs/14/sql-importforeignschema.html)
+ can import the schema of partitioned tables.'
+ - name: Parallel query execution on remote databases
+ versions:
+ '14': 'Yes'
+ description: Support for leveraging query parallelism on remote databases. This
+ is implemented in the [`postgres_fdw`](https://www.postgresql.org/docs/current/postgres-fdw.html)
+ available with PostgreSQL.
+ - name: postgres_fdw parallel commit
+ versions:
+ '15': 'Yes'
+ url: https://www.postgresql.org/docs/15/postgres-fdw.html#id-1.11.7.47.11.7
+ - name: postgres_fdw pushdown
+ versions:
+ '9.6': 'Yes'
+ description: Ability to push down JOIN, Sorts, UPDATEs and DELETEs to the remote
+ database in postgres_fdw driver, and theoretically in other drivers. Also some
+ generic operator/function pushdown.
+ - name: PostgreSQL Foreign Data Wrapper
+ versions:
+ '9.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/postgres-fdw.html
+ - name: Writable Foreign Data Wrappers
+ versions:
+ '9.3': 'Yes'
+ description: The foreign data wrapper infrastructure now supports INSERT/DELETE/UPDATE
+ operations which individual FDWs can now add support for.
+ Custom Functions, Stored Procedures, & Triggers:
+ - name: ALTER TABLE ENABLE/DISABLE TRIGGER
+ versions:
+ '8.1': 'Yes'
+ description: allows for disabling and enabling a specific or all triggers on a
+ given table
+ - name: ALTER TABLE / ENABLE REPLICA TRIGGER/RULE
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/sql-altertable.html
+ - name: BEGIN ATOMIC function bodies
+ versions:
+ '14': 'Yes'
+ description: "PostgreSQL functions and stored procedures can now be created using\
+ \ the SQL-standard `BEGIN ATOMIC` definition. Using `BEGIN ATOMIC` allows function\
+ \ bodies to be parsed on creation and also provides dependency. For example:\r\
+ \n\r\n```\r\nCREATE FUNCTION add(int, int)\r\nRETURNS int\r\nIMMUTABLE PARALLEL\
+ \ SAFE\r\nBEGIN ATOMIC;\r\n SELECT $1 + $2;\r\nEND;\r\n```"
+ - name: CALL syntax for executing procedures
+ versions:
+ '11': 'Yes'
+ url: https://www.postgresql.org/docs/11/static/sql-call.html
+ - name: Column level triggers
+ versions:
+ '9.0': 'Yes'
+ description: adds support for SQL standard column level trigger support, by allowing
+ triggers to only fire if specific columns are mentioned in the UPDATEs SET list
+ - name: CREATE PROCEDURE syntax for SQL stored procedures
+ versions:
+ '11': 'Yes'
+ url: https://www.postgresql.org/docs/11/static/sql-createprocedure.html
+ - name: Event triggers
+ versions:
+ '9.3': 'Yes'
+ description: Support for creating triggers for DDL events.
+ - name: FILTER clause for aggregate functions
+ versions:
+ '9.4': 'Yes'
+ description: 'Aggregate functions can now be filtered with the FILTER clause. For
+ example: count(col_a) FILTER (WHERE col_b > 5)'
+ - name: ORDER BY support within aggregates
+ versions:
+ '9.0': 'Yes'
+ description: allows controlling the order of values fed into an aggregate function
+ - name: Per function GUC settings
+ versions:
+ '8.3': 'Yes'
+ description: Server configuration parameters can now be set on a per-function
+ basis
+ - name: Per function statistics
+ versions:
+ '8.4': 'Yes'
+ description: runtime statistics for user-defined functions
+ - name: RETURN QUERY EXECUTE
+ versions:
+ '8.4': 'Yes'
+ description: allows for returning the result of a dynamically generated query
+ - name: RETURNS TABLE
+ versions:
+ '8.4': 'Yes'
+ description: SQL standard RETURNS TABLE clause for CREATE FUNCTION
+ - name: Statement level triggers
+ versions:
+ '8.1': 'Yes'
+ description: Triggers that fire on a per statement level instead of a per row
+ level
+ - name: Statement level TRUNCATE triggers
+ versions:
+ '8.4': 'Yes'
+ description: Trigger support for TRUNCATE
+ - name: Triggers on views
+ versions:
+ '9.1': 'Yes'
+ description: This adds support for INSTEAD OF triggers on views which can be used
+ to implement fully updatable views.
+ - name: Variadic functions
+ versions:
+ '8.4': 'Yes'
+ description: Allows a variable number of function parameters
+ - name: WHEN clause for CREATE TRIGGER
+ versions:
+ '9.0': 'Yes'
+ description: adds support for a boolean expression to be checked if a trigger
+ should be fired or not
+ Procedural Languages:
+ - name: CASE in pl/pgsql
+ versions:
+ '8.4': 'Yes'
+ description: allows the use of CASE as a conditional expression in addition to
+ IF-THEN
+ - name: CONTINUE statement for PL/pgSQL
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/plpgsql-control-structures.html#id-1.8.8.8.7.6
+ - name: CREATE TRANSFORM
+ versions:
+ '9.5': 'Yes'
+ url: https://www.postgresql.org/docs/9.5/static/sql-createtransform.html
+ - name: DO statement for pl/perl
+ versions:
+ '9.0': 'Yes'
+ description: allows the execution of anonymous code blocks in pl/perl
+ - name: DO statement for pl/pgsql
+ versions:
+ '9.0': 'Yes'
+ description: allows the execution of anonymous code blocks in pl/pgsql
+ - name: EXCEPTION support in PL/pgSQL
+ versions:
+ '8.1': 'Yes'
+ description: full exception handling support in pl/pgsql
+ - name: EXECUTE USING in PL/pgSQL
+ versions:
+ '8.4': 'Yes'
+ description: ''
+ - name: FOREACH IN ARRAY in pl/pgsql
+ versions:
+ '9.1': 'Yes'
+ description: This is more efficient and readable than previous methods of iterating
+ through the elements of an array value.
+ - name: IN/OUT/INOUT parameters for pl/pgsql and PL/SQL
+ versions:
+ '8.1': 'Yes'
+ description: ''
+ - name: Named parameters
+ versions:
+ '8.1': 'Yes'
+ description: allows the use of named parameters in pl/pgsql
+ - name: Non-superuser language creation
+ versions:
+ '8.3': 'Yes'
+ description: database owners can now create trusted languages
+ - name: pl/pgsql installed by default
+ versions:
+ '9.0': 'Yes'
+ description: pl/pgsql is now installed by default in all newly created database
+ - name: Polymorphic functions
+ versions:
+ '8.1': 'Yes'
+ description: ''
+ - name: Python 3 support for pl/python
+ versions:
+ '9.0': 'Yes'
+ description: support for Python 3 in pl/python
+ - name: 'Qualified function parameters '
+ versions:
+ '8.3': 'Yes'
+ description: ''
+ - name: Query parallelism for RETURN QUERY
+ versions:
+ '14': 'Yes'
+ description: The `RETURN QUERY` directive in PL/pgSQL supports executing queries
+ with parallelism.
+ - name: RETURN QUERY in pl/pgsql
+ versions:
+ '8.3': 'Yes'
+ description: simply way to return the result of an arbitrary query in pl/pgsql
+ - name: ROWS and COST specification for functions
+ versions:
+ '8.3': 'Yes'
+ description: CPU costs and the number of expected rows can now be specified for
+ procedural functions to give better hints to the planner
+ - name: Scrollable and updatable cursor support for pl/pgsql
+ versions:
+ '8.3': 'Yes'
+ description: support for scroll- and updatable cursors in pl/pgsql functions
+ - name: SQLERRM/SQLSTATE for pl/pgsql
+ versions:
+ '8.1': 'Yes'
+ description: allows simple access to the SQL error state and the associated error
+ text if an exception happened
+ - name: Unicode object support in PL/python
+ versions:
+ '9.0': 'Yes'
+ description: ''
+ - name: User defined exceptions
+ versions:
+ '8.4': 'Yes'
+ description: allows to generate user defined exceptions through RAISE
+ - name: Validator function for pl/perl
+ versions:
+ '8.1': 'Yes'
+ description: compile time validation of pl/pgsql code
+ Extensions:
+ - name: CREATE EXTENSION .. CASCADE
+ versions:
+ '9.6': 'Yes'
+ description: Ability to automatically pull in required additional extensions for
+ an extension dependency tree.
+ - name: Extension Installation
+ versions:
+ '9.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/external-extensions.html
+ - name: Trusted Extensions
+ versions:
+ '13': 'Yes'
+ description: "Extensions that are marked as \"trusted\" by a superuser can subsequently\
+ \ be installed via `CREATE EXTENSION` by unprivileged users. Some functions\
+ \ are marked as \"trusted\" by default.\r\n\r\nFor more information, please\
+ \ see the [`CREATE EXTENSION`](https://www.postgresql.org/docs/current/sql-createextension.html)\
+ \ documentation."
+ Internationalisation:
+ - name: Built-in, platform independent immutable collation
+ versions:
+ '17': 'Yes'
+ description: PostgreSQL has a built-in, platform independent immutable collation
+ provider that supports C and C.UTF-8 collations. For more information, see [standard
+ collations](https://www.postgresql.org/docs/17/collation.html#COLLATION-MANAGING-STANDARD).
+ - name: Column-level collation support
+ versions:
+ '9.1': 'Yes'
+ description: Previously collation could only be set at database creation. Collation
+ can now be set per column, domain, index, or expression, via the SQL-standard
+ COLLATE clause.
+ - name: Database level Collation
+ versions:
+ '8.4': 'Yes'
+ description: Support for different collation order and character categories on
+ a per database level
+ - name: Default ICU collations for clusters/databases
+ versions:
+ '15': 'Yes'
+ description: ICU collations can be set as the default collation type for an entire
+ PostgreSQL clusters or for individual databases.
+ - name: EUC_JIS_2004/ SHIFT_JIS_2004 support
+ versions:
+ '8.3': 'Yes'
+ description: ''
+ - name: ICU collations
+ versions:
+ '10': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/collation.html#id-1.6.10.4.5.7.5
+ - name: Multibyte encoding support, incl. UTF8
+ versions:
+ '8.1': 'Yes'
+ description: full support for using UTF8 and other multibyte encodings
+ - name: Multiple language support
+ versions:
+ '8.1': 'Yes'
+ url: https://babel.postgresql.org/
+ - name: Nondeterministic collations
+ versions:
+ '12': 'Yes'
+ url: https://www.postgresql.org/docs/12/collation.html#COLLATION-NONDETERMINISTIC
+ - name: Unicode string literals and identifiers
+ versions:
+ '8.4': 'Yes'
+ description: allows specification of unicode string literals and identifiers using
+ code points
+ - name: UTF8 support on Windows
+ versions:
+ '8.1': 'Yes'
+ description: full support for using UTF8 on microsoft windows
+ Client Applications:
+ - name: pgbench
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/pgbench.html
+ - name: pg_combinebackup
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/app-pgcombinebackup.html
+ - name: pg_createsubscriber
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/app-pgcreatesubscriber.html
+ - name: pg_prewarm
+ versions:
+ '9.4': 'Yes'
+ url: https://www.postgresql.org/docs/9.4/static/pgprewarm.html
+ - name: pg_rewind
+ versions:
+ '9.5': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/app-pgrewind.html
+ - name: pg_standby
+ versions:
+ '8.3': 'Yes'
+ '14': Obsolete
+ description: Was used to initialize standbys. Removed in PostgreSQL 14.
+ - name: pg_upgrade
+ versions:
+ '9.0': 'Yes'
+ url: https://www.postgresql.org/docs/current/pgupgrade.html
+ - name: pg_waldump
+ versions:
+ '10': 'Yes'
+ url: https://www.postgresql.org/docs/current/pgwaldump.html
+ - name: pg_walsummary
+ versions:
+ '17': 'Yes'
+ url: https://www.postgresql.org/docs/17/app-pgwalsummary.html
+ - name: pg_xlogdump
+ versions:
+ '9.3': 'Yes'
+ '10': Obsolete
+ description: Renamed to [`pg_waldump`](https://www.postgresql.org/docs/current/pgwaldump.html)
+ in PostgreSQL 10.
+ - name: psql \bind
+ versions:
+ '16': 'Yes'
+ url: https://www.postgresql.org/docs/16/app-psql.html#APP-PSQL-META-COMMAND-BIND
+ - name: psql \dconfig
+ versions:
+ '15': 'Yes'
+ description: The [`psql`](https://www.postgresql.org/docs/15/app-psql.html) client
+ includes a `\dconfig` command for inspecting and finding the values of configuration
+ parameters.
+ - name: Version aware psql
+ versions:
+ '8.4': 'Yes'
+ description: Allows [psql](https://www.postgresql.org/docs/current/app-psql.html)
+ to work with older versions of PostgreSQL.
+ Additional Modules (contrib):
+ - name: adminpack
+ versions:
+ '8.2': 'Yes'
+ '17': 'No'
+ url: https://www.postgresql.org/docs/current/static/adminpack.html
+ - name: auth_delay
+ versions:
+ '9.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/auth-delay.html
+ - name: auto_explain
+ versions:
+ '8.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/auto-explain.html
+ - name: btree_gin
+ versions:
+ '8.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/btree-gin.html
+ - name: btree_gist
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/8.3/static/btree-gist.html
+ - name: citext
+ versions:
+ '8.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/citext.html
+ - name: dblink
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/dblink.html
+ - name: dblink asyncronous notification support
+ versions:
+ '9.0': 'Yes'
+ description: Add the ability to retrieve asynchronous notifications using dblink
+ - name: file_fdw
+ versions:
+ '9.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/file-fdw.html
+ - name: fuzzystrmatch
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/fuzzystrmatch.html
+ - name: hstore
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/hstore.html
+ - name: intarray
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/intarray.html
+ - name: isn (ISBN)
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/isn.html
+ - name: KNN support for CUBE
+ versions:
+ '9.6': 'Yes'
+ description: KNN indexing support for the CUBE module. Supports n-dimensional
+ nearest neighbor searches.
+ - name: ltree
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/ltree.html
+ - name: pageinspect
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/pageinspect.html
+ - name: passwordcheck
+ versions:
+ '9.0': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/passwordcheck.html
+ - name: pg_buffercache
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/pgbuffercache.html
+ - name: pg_freespacemap
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/pgfreespacemap.html
+ - name: pg_stat_statements
+ versions:
+ '8.4': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/pgstatstatements.html
+ - name: pg_stat_statements improvements
+ versions:
+ '9.2': 'Yes'
+ description: pg_stat_statements now aggregates similar queries so that such data
+ is no longer confined to just prepared queries.
+ - name: pgstattuple
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/pgstattuple.html
+ - name: pg_trgm
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/pgtrgm.html
+ - name: pg_trgm regular expressions indexing
+ versions:
+ '9.3': 'Yes'
+ description: Regular expressions can now be indexed using GIN in [`pg_trgm`](https://www.postgresql.org/docs/current/pgtrgm.html).
+ - name: pg_walinspect
+ versions:
+ '15': 'Yes'
+ description: '[`pg_walinspect`](https://www.postgresql.org/docs/15/pgwalinspect.html)
+ allows for the contents of write-ahead logs (WAL) files to be inspected from
+ SQL.'
+ - name: seg
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/seg.html
+ - name: sepgsql
+ versions:
+ '9.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/sepgsql.html
+ - name: sslinfo
+ versions:
+ '8.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/sslinfo.html
+ - name: tablefunc
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/tablefunc.html
+ - name: tcn
+ versions:
+ '9.2': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/tcn.html
+ - name: tsearch2 compatibility wrapper
+ versions:
+ '8.3': 'Yes'
+ '10': Obsolete
+ description: compatibility wrapper for migrating from contrib/tsearch2 to the
+ integrated full text search in 8.3
+ - name: unaccent
+ versions:
+ '9.0': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/unaccent.html
+ - name: uuid-ossp
+ versions:
+ '8.3': 'Yes'
+ url: https://www.postgresql.org/docs/current/uuid-ossp.html
+ - name: xml2
+ versions:
+ '8.1': 'Yes'
+ '8.4': Obsolete
+ url: https://www.postgresql.org/docs/current/xml2.html
+ Network:
+ - name: Full SSL support
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/ssl-tcp.html
+ - name: IPv6 Support
+ versions:
+ '8.1': 'Yes'
+ description: Full Support for IPv6
+ - name: V2 client protocol
+ versions:
+ '8.1': Obsolete
+ '14': 'No'
+ description: obsoleted client protocol interface
+ - name: V3 client protocol
+ versions:
+ '8.1': 'Yes'
+ url: https://www.postgresql.org/docs/current/static/protocol.html
+ Platforms:
+ - name: Microsoft Visual C++ Support
+ versions:
+ '8.3': 'Yes'
+ description: allows the backend to be compiled with Microsoft Visual Studio
+ - name: Native Windows Port
+ versions:
+ '8.1': 'Yes'
+ description: Native Port to the Microsoft Windows Platform
+ - name: Spinlock support for the SuperH hardware platform
+ versions:
+ '9.0': 'Yes'
+ description: s_lock support for the SuperH CPU
+ - name: Sun Studio compiler on Linux
+ versions:
+ '8.4': 'Yes'
+ description: support for compiling PostgreSQL using the Sun Studio compiler on
+ Linux
+ - name: Windows x64 support
+ versions:
+ '9.0': 'Yes'
+ description: support for compiling PostgreSQL as a 64bit binary on Microsoft Windows
+legacymap: # This maps old id based URLs to the new titles and will generate redirects to the new page
+ 4: Heap Only Tuples (HOT)
+ 8: Asynchronous Commit
+ 11: Distributed checkpointing
+ 13: Scrollable and updatable cursor support for pl/pgsql
+ 14: ROWS and COST specification for functions
+ 15: SQLERRM/SQLSTATE for pl/pgsql
+ 19: EUC_JIS_2004/ SHIFT_JIS_2004 support
+ 20: Per function GUC settings
+ 24: Partial sort capability (top-n sorting)
+ 26: Synchronized sequential scanning
+ 27: Loadable plugin infrastructure for monitoring the planner
+ 28: Multiple temporary tablespaces
+ 29: Arrays of compound types
+ 34: Automatic plan invalidation
+ 35: Microsoft Visual C++ Support
+ 38: NULLs in Array
+ 39: Non-blocking CREATE INDEX
+ 42: Outer Join reordering
+ 45: Row-wise comparison
+ 49: ROLES
+ 50: In-memory Bitmap Indexes
+ 53: Shared row level locking
+ 55: Per user/database connection limits
+ 56: Temporary VIEWs
+ 57: SELECT ... FOR UPDATE/SHARE NOWAIT
+ 58: ALTER TABLE ENABLE/DISABLE TRIGGER
+ 59: Native Windows Port
+ 63: Changing column types (ALTER TABLE .. ALTER COLUMN TYPE)
+ 67: IPv6 Support
+ 68: Inlining of SQL-functions
+ 73: Statement level triggers
+ 78: RETURN QUERY in pl/pgsql
+ 79: 'Qualified function parameters '
+ 80: IN/OUT/INOUT parameters for pl/pgsql and PL/SQL
+ 82: Validator function for pl/perl
+ 83: Named parameters
+ 84: EXCEPTION support in PL/pgSQL
+ 85: Polymorphic functions
+ 89: pg_standby
+ 100: UTF8 support on Windows
+ 108: Security Service Provider Interface (SSPI)
+ 110: Index support for IS NULL
+ 111: Cross datatype hashing support
+ 112: Type modifier support
+ 113: Non-superuser language creation
+ 117: V2 client protocol
+ 118: Concurrent GiST indexes
+ 119: Multibyte encoding support, incl. UTF8
+ 127: tsearch2 compatibility wrapper
+ 128: Statement level TRUNCATE triggers
+ 129: EXECUTE USING in PL/pgSQL
+ 130: CASE in pl/pgsql
+ 133: Database level Collation
+ 135: Hashing support for DISTINCT/UNION/INTERSECT/EXCEPT
+ 136: RETURNS TABLE
+ 137: Variadic functions
+ 138: User defined exceptions
+ 139: unnest/array_agg
+ 140: Disk based FSM
+ 141: Per function statistics
+ 142: RETURN QUERY EXECUTE
+ 143: SQL standard interval handling
+ 144: SSL certificate validation in libpq
+ 146: TABLE statement
+ 147: SSL client certificate authentication
+ 151: Column level permissions
+ 152: Parallel restore
+ 154: Version aware psql
+ 157: Unicode string literals and identifiers
+ 158: Visibility Map for Vacuuming
+ 161: Sun Studio compiler on Linux
+ 162: Column level triggers
+ 163: Deferrable unique constraints
+ 165: XML, JSON and YAML output for EXPLAIN
+ 166: Default permissions
+ 167: DO statement for pl/pgsql
+ 168: GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS
+ 170: Per user/database server configuration settings
+ 171: Unicode object support in PL/python
+ 175: dblink asyncronous notification support
+ 176: Spinlock support for the SuperH hardware platform
+ 178: WHEN clause for CREATE TRIGGER
+ 179: Exclusion constraints
+ 180: ORDER BY support within aggregates
+ 181: EXPLAIN (BUFFERS) support
+ 183: Large object access controls
+ 184: Search+bind mode operation for LDAP authentication
+ 185: pl/pgsql installed by default
+ 186: DO statement for pl/perl
+ 187: Python 3 support for pl/python
+ 188: Hot Standby
+ 189: Typed tables
+ 190: Payload support for LISTEN/NOTIFY
+ 191: Set costs specific to TABLESPACEs
+ 192: Streaming Replication
+ 193: Native RADIUS authentication
+ 195: Windows x64 support
+ 200: K-nearest neighbor GiST support
+ 201: Unlogged tables
+ 202: Hashing support for FULL OUTER JOIN, LEFT OUTER JOIN and RIGHT OUTER JOIN
+ 203: SSPI authentication via GSSAPI
+ 204: WAL Buffer auto-tuning
+ 205: Synchronous replication
+ 206: pg_basebackup tool
+ 207: Named restore points
+ 208: Writable WITH Queries (Common Table Expressions)
+ 209: Serializable Snapshot Isolation
+ 210: Column-level collation support
+ 212: Foreign Tables
+ 213: ALTER TABLE ... ADD UNIQUE/PRIMARY KEY USING INDEX
+ 214: Foreign keys marked as NOT VALID
+ 215: Triggers on views
+ 216: FOREACH IN ARRAY in pl/pgsql
+ 217: Index-only scans
+ 218: Multi-core scalability for read-only workloads
+ 219: Cascading streaming replication
+ 223: smallserial type
+ 226: pg_stat_statements improvements
+ 227: Background Checkpointer
+ 228: ALTER object IF EXISTS
+ 229: CREATE TABLE ... (LIKE) with foreign tables, views and composite types
+ 230: security_barrier option on views
+ 231: LATERAL clause
+ 232: 64-bit large objects
+ 233: Event triggers
+ 234: Updatable views
+ 235: Parallel pg_dump
+ 237: Writable Foreign Data Wrappers
+ 238: Foreign data wrappers
+ 240: Support for anonymous shared memory
+ 241: Custom background workers
+ 242: SELECT FOR NO KEY UPDATE/SELECT FOR KEY SHARE lock modes
+ 243: Checksum on data pages
+ 244: Streaming-only cascading replication
+ 245: pg_xlogdump
+ 246: pg_trgm regular expressions indexing
+ 247: SP-GiST indexes for range types
+ 248: COPY from/to STDIN/STDOUT
+ 249: Improved set of JSON functions and operators
+ 251: Materialized views with concurrent refresh
+ 253: krb5 authentication (without gssapi)
+ 254: Dynamic Background Workers
+ 256: GIN Index performance and size improvements
+ 257: Time-delayed Standbys
+ 258: Reduced lock levels for ALTER TABLE commands
+ 260: Base backup throttling
+ 263: FILTER clause for aggregate functions
+ 264: WITH CHECK clause
+ 266: ALTER TABLE ... SET LOGGED / UNLOGGED
+ 268: SKIP LOCKED clause
+ 270: Parallel vacuumdb jobs
+ 271: Foreign table inheritance
+ 273: Index-only scans on GiST
+ 275: Upsert (INSERT ... ON CONFLICT DO ...)
+ 276: JSONB-modifying operators and functions
+ 277: TABLESAMPLE clause
+ 279: Abbreviated Keys
+ 280: min_wal_size / max_wal_size
+ 281: Parallel query
+ 283: Parallel JOIN, aggregate
+ 284: postgres_fdw pushdown
+ 285: Multiple synchronous standbys
+ 286: remote_apply mode
+ 287: Frozen page map
+ 288: KNN support for CUBE
+ 289: Phrase search
+ 290: pg_config system view
+ 291: Generic WAL facility
+ 292: CREATE EXTENSION .. CASCADE
+ 295: SCRAM-SHA-256 Authentication
+ 296: Quorum commit for synchronous replication
+ 297: Parallel B-tree index scans
+ 298: Parallel bitmap heap scans
+ 299: Parallel merge joins
+ 300: WAL support for hash indexes
+ 302: Partitioning by a hash key
+ 303: Parallelized CREATE INDEX for B-tree indexes
+ 304: Support for PRIMARY KEY, FOREIGN KEY, indexes, and triggers on partitioned
+ tables
+ 311: Default Partition
+ 312: UPDATE on a partition key
+ 313: Covering Indexes for B-trees (INCLUDE)
+ 314: Covering indexes for GiST (INCLUDE)
+ 316: K-nearest neighbor SP-GiST Support
+ 317: CREATE STATISTICS - multicolumn
+ 318: CREATE STATISTICS - most-common values (MCV) statistics
+ 319: Foreign Key references for partitioned tables
+ 320: Accelerated partition pruning
+ 321: Inlined WITH Queries (Common Table Expressions)
+ 324: GSSAPI client and server-side encryption
+ 325: LDAP server discovery
+ 326: Multifactor authentication via valid client SSL/TLS certificate
+ 328: Enable/Disable page checksums in an offline cluster
+ 329: Fractional input for "integer" values
+ 330: COPY FROM ... WHERE
+ 332: Partition pruning during query execution
+ 335: CREATE STATISTICS - "OR" and "IN/ANY" statistics
+ 336: Hash aggregation can use disk
+ 339: Certificate authentication with postgres_fdw
+ 340: Parallelized VACUUM for Indexes
+ 341: Inserted data can trigger autovacuum
+ 345: Logical replication for partitioned tables
+ 346: 'SQL/JSON: datetime()'
+ 347: Trusted Extensions
+ 348: EXPLAIN (WAL) support
+ 349: Query parallelism for RETURN QUERY
+ 350: Parallel query execution on remote databases
+ 351: Incremental sort for window functions
+ 352: LZ4 compression for TOAST tables
+ 357: Logical replication stream in-progress transactions
+ 358: Foreign data wrapper query parallelism
+ 359: Import foreign table partitions
+ 360: Vacuum "emergency mode"
+ 366: range_agg range type aggregation function
+ 367: regexp_count, regexp_instr, regexp_like
+ 368: Improved performance for sorts exceeding working memory
+ 369: Parallel "SELECT DISTINCT"
+ 370: Improved window function performance
+ 373: pg_basebackup server-side compression
+ 374: pg_basebackup client decompression
+ 376: pg_walinspect
+ 380: Logical replication column lists
+ 381: ALTER SUBSCRIPTION ... SKIP
+ 382: Logical replication subscriber can disable on error
+ 383: '"jsonlog" logging format'
+ 384: psql \dconfig
+ 386: Server statistics in shared memory
+ 387: ALTER TABLE ... SET ACCESS METHOD
+ 389: SECURITY INVOKER views
+ 390: Privileges for setting configuration parameters
+ 391: Logical replication publish all tables in schema
+ 392: UNIQUE NULLS NOT DISTINCT
+ 393: BEGIN ATOMIC function bodies
+ 394: Default ICU collations for clusters/databases
+ 395: SQL/JSON constructors
+ 396: SQL/JSON IS JSON
+ 397: Parallel FULL and RIGHT joins
+ 398: Incremental sort for SELECT DISTINCT
+ 399: SIMD support for x86
+ 400: SIMD support for ARM
+ 402: Logical replication from standbys
+ 404: Logical replication lookups with additional indexes
+ 407: Non-decimal integer literals
+ 408: Underscores (_) for thousands separators
+ 413: Include directives for pg_hba.conf and pg_ident.conf
+ 414: Regular expression matching in pg_hba.conf and pg_ident.conf
+ 415: Support using the client's OS trusted CA.
+ 417: Page freezing optimizations
+ 419: Radix tree memory structure for vacuum
+ 421: Parallelized CREATE INDEX for BRIN indexes
+ 425: MERGE ... RETURNING
+ 426: Built-in, platform independent immutable collation
+ 429: pg_basebackup incremental backup
+ 432: Logical replication slots migrate through pg_upgrade migrate
+ 433: COPY ... ON_ERROR
+ 434: EXPLAIN (SERIALIZE) support
+ 435: EXPLAIN (MEMORY)
+ 437: pg_dump, pg_dumpall, pg_restore --filter