public inbox for [email protected]  
help / color / mirror / Atom feed
From: Daniel Gustafsson <[email protected]>
To: David Rowley <[email protected]>
Cc: [email protected]
Cc: Magnus Hagander <[email protected]>
Subject: Re: Typos in the featurematrix
Date: Tue, 21 Oct 2025 14:09:19 +0200
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<CAApHDvpOXAOPEhXRnWimyWmuRf+gN=yx22AoP_WM3aZ0M=n6Vw@mail.gmail.com>
	<[email protected]>

> On 15 Oct 2025, at 15:22, Daniel Gustafsson <[email protected]> wrote:
> 
>> On 15 Oct 2025, at 13:00, David Rowley <[email protected]> wrote:
>> 
>> On Tue, 14 Oct 2025 at 20:46, Daniel Gustafsson <[email protected]> wrote:
>>> While working on something else I noticed that the featurematrix has a few
>>> typos, unless there are objections I'll go ahead with the attached.
>> 
>> Patch looks good.
>> 
>> I had a read and found a few more:
> 
> Thanks, I have incorporated all of these in the v2 attached.
> 
> When doing that I noticed that the capitilization of PL/pgSQL and other PL's
> was quite varied.  0002 in the attached corrects that to ensure consistency
> across the items in the featurematrix with corresponding names in the docs.

The featurematrix was a rabbithole that went deep, looking closer I realized
that links were using a variety of target versions: /current/, /devel/, or the
version which was current at the time of adding.  This means that for old
features we we still linking to the 9.x version of the docs, which clearly
isn't helpful to our users.  We also had quite a few /static/ links which 301
redirects since we don't have that level anymore.

On top of that, a few links in the descriptions were not markdown encoded and
thus rendered as plain text.

The attached v3 fixes these in 0003 and 0004.

--
Daniel Gustafsson



Attachments:

  [application/octet-stream] v3-0001-Fix-typos-in-feature-matrix.patch (6.9K, 2-v3-0001-Fix-typos-in-feature-matrix.patch)
  download | inline diff:
From df3e20a9937afdea5dc6c7009cea73a45d60d9bb Mon Sep 17 00:00:00 2001
From: Daniel Gustafsson <[email protected]>
Date: Tue, 14 Oct 2025 09:40:24 +0200
Subject: [PATCH v3 1/4] Fix typos in feature matrix

Author: Daniel Gustafsson <[email protected]>
Reviewed-by: David Rowley <[email protected]>
Discussion: https://postgr.es/m/[email protected]
---
 data/featurematrix.yaml | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/data/featurematrix.yaml b/data/featurematrix.yaml
index 3e471943..2a069b37 100644
--- a/data/featurematrix.yaml
+++ b/data/featurematrix.yaml
@@ -21,7 +21,7 @@ featurematrix:
     versions:
       '8.4': 'Yes'
     description: replaces the shared memory fixed size free space map with an on-disk
-      implemenation
+      implementation
   - name: Dynamic Background Workers
     versions:
       '9.4': 'Yes'
@@ -347,7 +347,7 @@ featurematrix:
       '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\
+      \ match of a regular expression in a string\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: Return OLD and NEW values from modified rows
     versions:
@@ -415,7 +415,7 @@ featurematrix:
     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.
+      conjunction with a RETURNING clause to pass data up to the containing query.
   Data Definition Language (DDL):
   - name: ALTER object IF EXISTS
     versions:
@@ -506,7 +506,7 @@ featurematrix:
   - name: Automatic plan invalidation
     versions:
       '8.3': 'Yes'
-    description: automatic invalidation of cached exceutions plans
+    description: automatic invalidation of cached executions plans
   - name: Background Checkpointer
     versions:
       '9.2': 'Yes'
@@ -537,8 +537,8 @@ featurematrix:
   - 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
+    description: Extended statistics can help the query planner generate 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:
@@ -657,7 +657,7 @@ featurematrix:
   - name: Parallel FULL and RIGHT joins
     versions:
       '16': 'Yes'
-    description: Ability to execute in parallell `FULL` and `RIGHT OUTER` joins.
+    description: Ability to execute in parallel `FULL` and `RIGHT OUTER` joins.
   - name: Parallel full table scans (sequential scans)
     versions:
       '9.6': 'Yes'
@@ -755,7 +755,7 @@ featurematrix:
     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
+      JSON data strings can now to be converted into records and new functions
       convert values, records, and hstore data to JSON.
   - name: JSONB data type
     versions:
@@ -884,7 +884,7 @@ featurematrix:
       '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.
+      view.  Using WITH CHECK OPTION will prevent any such changes from occurring.
   Replication:
   - name: ALTER SUBSCRIPTION ... SKIP
     versions:
@@ -973,7 +973,7 @@ featurematrix:
   - name: Logical replication write conflict logging
     versions:
       '18': 'Yes'
-    description: "Write conflicts that occur during ogical replication are\
+    description: "Write conflicts that occur during logical replication are\
       \ reported both in logs and in the\
       \ [`pg_stat_subscription_stats`](https://www.postgresql.org/docs/18/monitoring-stats.html#MONITORING-PG-STAT-SUBSCRIPTION-STATS)\
       \ view."
@@ -992,7 +992,7 @@ featurematrix:
     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
+      available in order for standbys of the new primary to correctly switch to
       the new timeline.  This change removes this dependency.
   - name: Streaming Replication
     versions:
@@ -1043,7 +1043,7 @@ featurematrix:
   - name: Multiple synchronous standbys
     versions:
       '9.6': 'Yes'
-    description: Ability to require synch messages from multiple prioritized standbys
+    description: Ability to require sync messages from multiple prioritized standbys
       when committing a synchronous transaction.
   - name: Named restore points
     versions:
@@ -1265,7 +1265,7 @@ featurematrix:
   - name: Native RADIUS authentication
     versions:
       '9.0': 'Yes'
-    description: adds support for authentictaing against a RADIUS server
+    description: adds support for authenticating against a RADIUS server
   - name: OAuth Authentication / Authorization
     versions:
       '18': 'Yes'
@@ -1288,7 +1288,7 @@ featurematrix:
   - name: ROLES
     versions:
       '8.1': 'Yes'
-    description: replaces user and group concept by a more generalizes role based
+    description: replaces user and group concept with a more generalized role based
       concept
   - name: Row-Level Security
     versions:
@@ -1849,7 +1849,7 @@ featurematrix:
     versions:
       '8.1': 'Yes'
     url: https://www.postgresql.org/docs/current/static/dblink.html
-  - name: dblink asyncronous notification support
+  - name: dblink asynchronous notification support
     versions:
       '9.0': 'Yes'
     description: Add the ability to retrieve asynchronous notifications using dblink
@@ -2092,7 +2092,7 @@ legacymap:  # This maps old id based URLs to the new titles and will generate re
   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
+  175: dblink asynchronous notification support
   176: Spinlock support for the SuperH hardware platform
   178: WHEN clause for CREATE TRIGGER
   179: Exclusion constraints
-- 
2.39.3 (Apple Git-146)



  [application/octet-stream] v3-0002-Standardize-capitalization-of-procedural-language.patch (8.3K, 3-v3-0002-Standardize-capitalization-of-procedural-language.patch)
  download | inline diff:
From 42dd5063c7345e8878635d9d9820fc4780c96f9d Mon Sep 17 00:00:00 2001
From: Daniel Gustafsson <[email protected]>
Date: Wed, 15 Oct 2025 15:16:31 +0200
Subject: [PATCH v3 2/4] Standardize capitalization of procedural languages in
 featurematrix

Constistently use PL/pgSQL, PL/Python and PL/Perl throughout the
featurematrix.

Author: Daniel Gustafsson <[email protected]>
Discussion: https://postgr.es/m/[email protected]
---
 data/featurematrix.yaml | 66 ++++++++++++++++++++---------------------
 1 file changed, 33 insertions(+), 33 deletions(-)

diff --git a/data/featurematrix.yaml b/data/featurematrix.yaml
index 2a069b37..e0a20466 100644
--- a/data/featurematrix.yaml
+++ b/data/featurematrix.yaml
@@ -1563,7 +1563,7 @@ featurematrix:
     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
+  - name: CASE in PL/pgSQL
     versions:
       '8.4': 'Yes'
     description: allows the use of CASE as a conditional expression in addition to
@@ -1576,51 +1576,51 @@ featurematrix:
     versions:
       '9.5': 'Yes'
     url: https://www.postgresql.org/docs/9.5/static/sql-createtransform.html
-  - name: DO statement for pl/perl
+  - 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
+    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
+    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
+    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
+  - 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
+  - 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
+    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
+  - name: PL/pgSQL installed by default
     versions:
       '9.0': 'Yes'
-    description: pl/pgsql is now installed by default in all newly created database
+    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
+  - name: Python 3 support for PL/Python
     versions:
       '9.0': 'Yes'
-    description: support for Python 3 in pl/python
+    description: support for Python 3 in PL/Python
   - name: 'Qualified function parameters '
     versions:
       '8.3': 'Yes'
@@ -1630,25 +1630,25 @@ featurematrix:
       '14': 'Yes'
     description: The `RETURN QUERY` directive in PL/pgSQL supports executing queries
       with parallelism.
-  - name: RETURN QUERY in pl/pgsql
+  - name: RETURN QUERY in PL/pgSQL
     versions:
       '8.3': 'Yes'
-    description: simply way to return the result of an arbitrary query in pl/pgsql
+    description: simple 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
+  - 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
+    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
+  - name: Unicode object support in PL/Python
     versions:
       '9.0': 'Yes'
     description: ''
@@ -1656,10 +1656,10 @@ featurematrix:
     versions:
       '8.4': 'Yes'
     description: allows to generate user defined exceptions through RAISE
-  - name: Validator function for pl/perl
+  - name: Validator function for PL/Perl
     versions:
       '8.1': 'Yes'
-    description: compile time validation of pl/pgsql code
+    description: compile time validation of PL/pgSQL code
   Extensions:
   - name: CREATE EXTENSION .. CASCADE
     versions:
@@ -2016,9 +2016,9 @@ legacymap:  # This maps old id based URLs to the new titles and will generate re
   4: Heap Only Tuples (HOT)
   8: Asynchronous Commit
   11: Distributed checkpointing
-  13: Scrollable and updatable cursor support for pl/pgsql
+  13: Scrollable and updatable cursor support for PL/pgSQL
   14: ROWS and COST specification for functions
-  15: SQLERRM/SQLSTATE for pl/pgsql
+  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)
@@ -2044,10 +2044,10 @@ legacymap:  # This maps old id based URLs to the new titles and will generate re
   67: IPv6 Support
   68: Inlining of SQL-functions
   73: Statement level triggers
-  78: RETURN QUERY in pl/pgsql
+  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
+  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
@@ -2064,7 +2064,7 @@ legacymap:  # This maps old id based URLs to the new titles and will generate re
   127: tsearch2 compatibility wrapper
   128: Statement level TRUNCATE triggers
   129: EXECUTE USING in PL/pgSQL
-  130: CASE in pl/pgsql
+  130: CASE in PL/pgSQL
   133: Database level Collation
   135: Hashing support for DISTINCT/UNION/INTERSECT/EXCEPT
   136: RETURNS TABLE
@@ -2088,10 +2088,10 @@ legacymap:  # This maps old id based URLs to the new titles and will generate re
   163: Deferrable unique constraints
   165: XML, JSON and YAML output for EXPLAIN
   166: Default permissions
-  167: DO statement for pl/pgsql
+  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
+  171: Unicode object support in PL/Python
   175: dblink asynchronous notification support
   176: Spinlock support for the SuperH hardware platform
   178: WHEN clause for CREATE TRIGGER
@@ -2100,9 +2100,9 @@ legacymap:  # This maps old id based URLs to the new titles and will generate re
   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
+  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
@@ -2125,7 +2125,7 @@ legacymap:  # This maps old id based URLs to the new titles and will generate re
   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
+  216: FOREACH IN ARRAY in PL/pgSQL
   217: Index-only scans
   218: Multi-core scalability for read-only workloads
   219: Cascading streaming replication
-- 
2.39.3 (Apple Git-146)



  [application/octet-stream] v3-0003-featurematrix-Update-links-to-use-current-documen.patch (60.1K, 4-v3-0003-featurematrix-Update-links-to-use-current-documen.patch)
  download | inline diff:
From 41d0b0058f2a04f62e703b60a4bfc4fe7cc90c9e Mon Sep 17 00:00:00 2001
From: Daniel Gustafsson <[email protected]>
Date: Sat, 18 Oct 2025 20:06:07 +0200
Subject: [PATCH v3 3/4] featurematrix: Update links to use current
 documentation

The links from the featurematrix to the docs used a combination of
current, devel, and the specific latest version at the time the new
feature was added. This updates all links to use /current/ to make
sure that we never link to outdated versions of the docs.

While there, remove all /static/ links since we only have the static
docs these days.

Author: Daniel Gustafsson <[email protected]>
Discussion: https://postgr.es/m/[email protected]
---
 data/featurematrix.yaml | 364 ++++++++++++++++++++--------------------
 1 file changed, 182 insertions(+), 182 deletions(-)

diff --git a/data/featurematrix.yaml b/data/featurematrix.yaml
index e0a20466..a5bbd8be 100644
--- a/data/featurematrix.yaml
+++ b/data/featurematrix.yaml
@@ -11,7 +11,7 @@ featurematrix:
   - name: Advisory locks
     versions:
       '8.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/explicit-locking.html#ADVISORY-LOCKS
+    url: https://www.postgresql.org/docs/current/explicit-locking.html#ADVISORY-LOCKS
   - name: Custom background workers
     versions:
       '9.3': 'Yes'
@@ -43,17 +43,17 @@ featurematrix:
   - 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)."
+    description: "[EXPLAIN](https://www.postgresql.org/docs/current/sql-explain.html) can\
+      \ now track WAL usage information along with [auto_explain](https://www.postgresql.org/docs/current/auto-explain.html),\
+      \ [autovacuum](https://www.postgresql.org/docs/current/routine-vacuuming.html#AUTOVACUUM),\
+      \ and [pg_stat_statements](https://www.postgresql.org/docs/current/pgstatstatements.html).\r\
+      \n\r\nFor more information, please see the documentation on [EXPLAIN](https://www.postgresql.org/docs/current/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).
+    description: PostgreSQL logs can now be output in  [JSON](https://www.postgresql.org/docs/current/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-JSONLOG)
+      using the [`jsonlog`](https://www.postgresql.org/docs/current/runtime-config-logging.html#RUNTIME-CONFIG-LOGGING-JSONLOG)
+      parameter when setting [`log_destination`](https://www.postgresql.org/docs/current/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
@@ -69,15 +69,15 @@ featurematrix:
   - name: pg_stat_checkpointer system view
     versions:
       '17': 'Yes'
-    url: https://www.postgresql.org/docs/17/monitoring-stats.html#MONITORING-PG-STAT-CHECKPOINTER-VIEW
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/view-pg-wait-events.html
   - name: Server statistics in shared memory
     versions:
       '15': 'Yes'
@@ -87,7 +87,7 @@ featurematrix:
   - name: SQL-standard information schema
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/information-schema.html
+    url: https://www.postgresql.org/docs/current/information-schema.html
   - name: Support for anonymous shared memory
     versions:
       '9.3': 'Yes'
@@ -106,23 +106,23 @@ featurematrix:
   - name: Array support
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/arrays.html
+    url: https://www.postgresql.org/docs/current/arrays.html
   - name: ENUM data type
     versions:
       '8.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/datatype-enum.html
+    url: https://www.postgresql.org/docs/current/datatype-enum.html
   - name: GUID/UUID data type
     versions:
       '8.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/datatype-uuid.html
+    url: https://www.postgresql.org/docs/current/datatype-uuid.html
   - name: macaddr8 data type
     versions:
       '10': 'Yes'
-    url: https://www.postgresql.org/docs/10/static/datatype-net-types.html#datatype-macaddr8
+    url: https://www.postgresql.org/docs/current/datatype-net-types.html#DATATYPE-MACADDR8
   - name: Multiranges
     versions:
       '14': 'Yes'
-    url: https://www.postgresql.org/docs/14/rangetypes.html#RANGETYPES-BUILTIN
+    url: https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-BUILTIN
   - name: NULLs in Array
     versions:
       '8.2': 'Yes'
@@ -134,7 +134,7 @@ featurematrix:
   - name: Range types
     versions:
       '9.2': 'Yes'
-    url: https://www.postgresql.org/docs/9.2/static/rangetypes.html
+    url: https://www.postgresql.org/docs/current/rangetypes.html
   - name: smallserial type
     versions:
       '9.2': 'Yes'
@@ -147,24 +147,24 @@ featurematrix:
   - name: UUIDv7
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/functions-uuid.html#FUNC_UUID_GEN_TABLE
+    url: https://www.postgresql.org/docs/current/functions-uuid.html#FUNC_UUID_GEN_TABLE
   - name: XML data type
     versions:
       '8.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/datatype-xml.html
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/btree.html#BTREE-DELETION
   - name: B-tree deduplication
     versions:
       '13': 'Yes'
-    url: https://www.postgresql.org/docs/13/btree-implementation.html#BTREE-DEDUPLICATION
+    url: https://www.postgresql.org/docs/current/btree.html#BTREE-DEDUPLICATION
   - name: Concurrent GiST indexes
     versions:
       '8.1': 'Yes'
@@ -196,7 +196,7 @@ featurematrix:
   - name: GIN (Generalized Inverted Index) Indexes
     versions:
       '8.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/gin.html
+    url: https://www.postgresql.org/docs/current/gin.html
   - name: GIN indexes partial match
     versions:
       '8.4': 'Yes'
@@ -209,11 +209,11 @@ featurematrix:
   - name: GiST (Generalized Search Tree) Indexes
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/gist.html
+    url: https://www.postgresql.org/docs/current/gist.html
   - name: Indexes on expressions
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/indexes-expressional.html
+    url: https://www.postgresql.org/docs/current/indexes-expressional.html
   - name: Index-only scans
     versions:
       '9.2': 'Yes'
@@ -270,7 +270,7 @@ featurematrix:
   - name: Space-Partitioned GiST (SP-GiST) Indexes
     versions:
       '9.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/spgist.html
+    url: https://www.postgresql.org/docs/current/spgist.html
   - name: SP-GiST indexes for range types
     versions:
       '9.3': 'Yes'
@@ -291,19 +291,19 @@ featurematrix:
   - 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
+    url: https://www.postgresql.org/docs/current/functions-aggregate.html#id-1.5.8.27.6.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
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/sql-insert.html
   - name: LATERAL clause
     versions:
       '9.3': 'Yes'
@@ -312,7 +312,7 @@ featurematrix:
   - name: MERGE
     versions:
       '15': 'Yes'
-    url: https://www.postgresql.org/docs/15/sql-merge.html
+    url: https://www.postgresql.org/docs/current/sql-merge.html
   - name: MERGE ... RETURNING
     versions:
       '17': 'Yes'
@@ -322,7 +322,7 @@ featurematrix:
   - name: Multirow VALUES
     versions:
       '8.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-values.html
+    url: https://www.postgresql.org/docs/current/sql-values.html
   - name: Non-decimal integer literals
     versions:
       '16': 'Yes'
@@ -331,12 +331,12 @@ featurematrix:
   - name: ORDER BY NULLS FIRST/LAST
     versions:
       '8.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-select.html
+    url: https://www.postgresql.org/docs/current/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)
+      the [`range_agg`](https://www.postgresql.org/docs/current/functions-aggregate.html)
       function.
   - name: Recursive Queries
     versions:
@@ -348,11 +348,11 @@ featurematrix:
     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 string\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)"
+      \ if a regular expression has a match in a string.\r\n\r\n[https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-POSIX-REGEXP](https://www.postgresql.org/docs/current/functions-matching.html#FUNCTIONS-POSIX-REGEXP)"
   - name: Return OLD and NEW values from modified rows
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/dml-returning.html
+    url: https://www.postgresql.org/docs/current/dml-returning.html
   - name: Row-wise comparison
     versions:
       '8.2': 'Yes'
@@ -369,7 +369,7 @@ featurematrix:
   - 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
+    url: https://www.postgresql.org/docs/current/functions-info.html#id-1.5.8.33.3.4.2.2.26.1.1.1
   - name: TABLE statement
     versions:
       '8.4': 'Yes'
@@ -402,7 +402,7 @@ featurematrix:
   - name: WITHIN GROUP clause
     versions:
       '9.4': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-AGGREGATES
+    url: https://www.postgresql.org/docs/current/sql-expressions.html#SYNTAX-AGGREGATES
   - name: WITH ORDINALITY clause
     versions:
       '9.4': 'Yes'
@@ -430,8 +430,8 @@ featurematrix:
   - 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),
+    description: '[`ALTER TABLE`](https://www.postgresql.org/docs/current/sql-altertable.html)
+      can specify a different [access method](https://www.postgresql.org/docs/current/tableam.html),
       also known as a storage interface.'
   - name: ALTER TABLE ... SET LOGGED / UNLOGGED
     versions:
@@ -444,7 +444,7 @@ featurematrix:
   - name: CREATE ACCESS METHOD
     versions:
       '12': 'Yes'
-    url: https://www.postgresql.org/docs/12/sql-create-access-method.html
+    url: https://www.postgresql.org/docs/current/sql-create-access-method.html
   - name: CREATE TABLE ... (LIKE) with foreign tables, views and composite types
     versions:
       '9.2': 'Yes'
@@ -452,11 +452,11 @@ featurematrix:
   - name: DROP object IF EXISTS
     versions:
       '8.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-commands.html
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/sql-createtable.html
   - name: REINDEX CONCURRENTLY
     versions:
       '12': 'Yes'
@@ -469,10 +469,10 @@ featurematrix:
     versions:
       '18': 'Yes'
     description: "Temporal constraints are constraints over ranges. These are\
-      \ available for both [`PRIMARY KEY`](https://www.postgresql.org/docs/18/sql-createtable.html#SQL-CREATETABLE-PARMS-PRIMARY-KEY)\
-      \ and [`UNIQUE`](https://www.postgresql.org/docs/18/sql-createtable.html#SQL-CREATETABLE-PARMS-UNIQUE)\
+      \ available for both [`PRIMARY KEY`](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-PRIMARY-KEY)\
+      \ and [`UNIQUE`](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-UNIQUE)\
       \ constraints using the `WITHOUT OVERLAPS` clause, and\
-      \ [`FOREIGN KEY`](https://www.postgresql.org/docs/18/sql-createtable.html#SQL-CREATETABLE-PARMS-REFERENCES)\
+      \ [`FOREIGN KEY`](https://www.postgresql.org/docs/current/sql-createtable.html#SQL-CREATETABLE-PARMS-REFERENCES)\
       \ constraints using the `PERIOD` clause."
   - name: Typed tables
     versions:
@@ -502,7 +502,7 @@ featurematrix:
       \ concurrently instead of waiting for each to finish in sequence. This\
       \ expands existing readahead and improves overall throughput. AIO\
       \ supported in PostgreSQL 18 include sequential scans, bitmap heap scans,\
-      \ and vacuum. For more information see [`io_method`](https://www.postgresql.org/docs/18/runtime-config-resource.html#GUC-IO-METHOD)."
+      \ and vacuum. For more information see [`io_method`](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-IO-METHOD)."
   - name: Automatic plan invalidation
     versions:
       '8.3': 'Yes'
@@ -517,7 +517,7 @@ featurematrix:
   - name: Background Writer
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/runtime-config-resource.html
+    url: https://www.postgresql.org/docs/current/runtime-config-resource.html
   - name: Base backup throttling
     versions:
       '9.4': 'Yes'
@@ -539,7 +539,7 @@ featurematrix:
       '13': 'Yes'
     description: Extended statistics can help the query planner generate 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
+      more information, please see https://www.postgresql.org/docs/current/planner-stats.html#PLANNER-STATS-EXTENDED
   - name: Cross datatype hashing support
     versions:
       '8.3': 'Yes'
@@ -563,14 +563,14 @@ featurematrix:
   - name: Full Text Search
     versions:
       '8.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/textsearch.html
+    url: https://www.postgresql.org/docs/current/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)"
+      \ by two configuration parameters:\r\n\r\n- [enable_hashagg](https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-ENABLE-HASHAGG)\r\
+      \n- [hash_mem_multiplier](https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-HASH-MEM-MULTIPLIER)"
   - name: Hashing support for DISTINCT/UNION/INTERSECT/EXCEPT
     versions:
       '8.4': 'Yes'
@@ -598,15 +598,15 @@ featurematrix:
   - name: Incremental sort
     versions:
       '13': 'Yes'
-    url: https://www.postgresql.org/docs/13/runtime-config-query.html#GUC-ENABLE-INCREMENTAL-SORT
+    url: https://www.postgresql.org/docs/current/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).
+    description: Queries with `SELECT DISTINCT` can use [incremental sort](https://www.postgresql.org/docs/current/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)
+    description: '[Window functions](https://www.postgresql.org/docs/current/functions-window.html)
       can use incremental sorting'
   - name: Inlined WITH Queries (Common Table Expressions)
     versions:
@@ -616,7 +616,7 @@ featurematrix:
       \ 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)"
+      For more information, please visit [https://www.postgresql.org/docs/current/queries-with.html](https://www.postgresql.org/docs/current/queries-with.html)"
   - name: Inlining of SQL-functions
     versions:
       '8.1': 'Yes'
@@ -624,15 +624,15 @@ featurematrix:
   - 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
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/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)
+    description: The compression method for [TOAST](https://www.postgresql.org/docs/current/storage-toast.html)
       tables is now selectable and adds support for lz4 compression.
   - name: Multi-core scalability for read-only workloads
     versions:
@@ -691,7 +691,7 @@ featurematrix:
   - name: Query pipelining
     versions:
       '14': 'Yes'
-    url: https://www.postgresql.org/docs/14/libpq-pipeline-mode.html
+    url: https://www.postgresql.org/docs/current/libpq-pipeline-mode.html
   - name: Reduced lock levels for ALTER TABLE commands
     versions:
       '9.4': 'Yes'
@@ -739,7 +739,7 @@ featurematrix:
   - name: Tablespaces
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-createtablespace.html
+    url: https://www.postgresql.org/docs/current/sql-createtablespace.html
   - name: Unlogged tables
     versions:
       '9.1': 'Yes'
@@ -760,7 +760,7 @@ featurematrix:
   - name: JSONB data type
     versions:
       '9.4': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/datatype-json.html
+    url: https://www.postgresql.org/docs/current/datatype-json.html
   - name: JSONB-modifying operators and functions
     versions:
       '9.5': 'Yes'
@@ -769,11 +769,11 @@ featurematrix:
   - name: JSONB Subscripting
     versions:
       '14': 'Yes'
-    url: https://www.postgresql.org/docs/14/datatype-json.html#JSONB-SUBSCRIPTING
+    url: https://www.postgresql.org/docs/current/datatype-json.html#JSONB-SUBSCRIPTING
   - name: JSON data type
     versions:
       '9.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/datatype-json.html
+    url: https://www.postgresql.org/docs/current/datatype-json.html
   - name: SQL/JSON constructors
     versions:
       '16': 'Yes'
@@ -784,7 +784,7 @@ featurematrix:
       '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)"
+      \ PostgreSQL type.\r\n\r\nFor more information, see the [JSON path documentation](https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-OP-TABLE)"
   - name: SQL/JSON IS JSON
     versions:
       '16': 'Yes'
@@ -796,7 +796,7 @@ featurematrix:
   - name: SQL/JSON JSON_TABLE
     versions:
       '17': 'Yes'
-    url: https://www.postgresql.org/docs/17/functions-json.html#FUNCTIONS-SQLJSON-TABLE
+    url: https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-TABLE
   - name: SQL/JSON path expressions
     versions:
       '12': 'Yes'
@@ -804,7 +804,7 @@ featurematrix:
   - name: SQL/JSON query functions
     versions:
       '17': 'Yes'
-    url: https://www.postgresql.org/docs/17/functions-json.html#FUNCTIONS-SQLJSON-QUERYING
+    url: https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-QUERYING
   Partitioning & Inheritance:
   - name: Accelerated partition pruning
     versions:
@@ -814,7 +814,7 @@ featurematrix:
   - name: Declarative table partitioning
     versions:
       '10': 'Yes'
-    url: https://www.postgresql.org/docs/10/static/ddl-partitioning.html#ddl-partitioning-declarative
+    url: https://www.postgresql.org/docs/current/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE
   - name: Default Partition
     versions:
       '11': 'Yes'
@@ -848,7 +848,7 @@ featurematrix:
   - name: Table Partitioning
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/ddl-partitioning.html
+    url: https://www.postgresql.org/docs/current/ddl-partitioning.html
   - name: UPDATE on a partition key
     versions:
       '11': 'Yes'
@@ -858,7 +858,7 @@ featurematrix:
   - name: Materialized Views
     versions:
       '9.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/rules-materializedviews.html
+    url: https://www.postgresql.org/docs/current/rules-materializedviews.html
   - name: Materialized views with concurrent refresh
     versions:
       '9.4': 'Yes'
@@ -867,7 +867,7 @@ featurematrix:
   - name: SECURITY INVOKER views
     versions:
       '15': 'Yes'
-    description: '[Views](https://www.postgresql.org/docs/15/sql-createview.html)
+    description: '[Views](https://www.postgresql.org/docs/current/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
@@ -890,7 +890,7 @@ featurematrix:
     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)
+      a transaction. For more information, please read the section on handling [conflicts](https://www.postgresql.org/docs/current/logical-replication-conflicts.html)
       with logical replication.'
   - name: Cascading streaming replication
     versions:
@@ -900,23 +900,23 @@ featurematrix:
   - 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
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/logical-replication-failover.html
   - name: Logical replication
     versions:
       '10': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/logical-replication.html
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/sql-createsubscription.html#SQL-CREATESUBSCRIPTION-PARAMS-WITH-ORIGIN
   - name: Logical replication column lists
     versions:
       '15': 'Yes'
-    description: '[Publications](https://www.postgresql.org/docs/15/logical-replication-publication.html)
+    description: '[Publications](https://www.postgresql.org/docs/current/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
@@ -934,7 +934,7 @@ featurematrix:
   - 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
+    url: https://www.postgresql.org/docs/current/sql-createsubscription.html#SQL-CREATESUBSCRIPTION-PARAMS-WITH-BINARY
   - name: Logical replication lookups with additional indexes
     versions:
       '16': 'Yes'
@@ -943,17 +943,17 @@ featurematrix:
   - name: Logical replication parallel apply of transactions
     versions:
       '16': 'Yes'
-    url: https://www.postgresql.org/docs/16/sql-createsubscription.html#SQL-CREATESUBSCRIPTION-WITH-STREAMING
+    url: https://www.postgresql.org/docs/current/sql-createsubscription.html#SQL-CREATESUBSCRIPTION-PARAMS-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).
+      TABLES IN SCHEMA ...`](https://www.postgresql.org/docs/current/sql-createpublication.html).
   - name: Logical replication row filtering
     versions:
       '15': 'Yes'
-    url: https://www.postgresql.org/docs/15/logical-replication-row-filter.html
+    url: https://www.postgresql.org/docs/current/logical-replication-row-filter.html
   - name: Logical replication slots migrate through pg_upgrade migrate
     versions:
       '17': 'Yes'
@@ -968,14 +968,14 @@ featurematrix:
     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)
+      the [`disable_on_error`](https://www.postgresql.org/docs/current/logical-replication-conflicts.html)
       setting.
   - name: Logical replication write conflict logging
     versions:
       '18': 'Yes'
     description: "Write conflicts that occur during logical replication are\
       \ reported both in logs and in the\
-      \ [`pg_stat_subscription_stats`](https://www.postgresql.org/docs/18/monitoring-stats.html#MONITORING-PG-STAT-SUBSCRIPTION-STATS)\
+      \ [`pg_stat_subscription_stats`](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-SUBSCRIPTION-STATS)\
       \ view."
   - name: Quorum commit for synchronous replication
     versions:
@@ -987,7 +987,7 @@ featurematrix:
   - name: Replication Slots
     versions:
       '9.4': 'Yes'
-    url: https://www.postgresql.org/docs/9.4/static/warm-standby.html#STREAMING-REPLICATION-SLOTS
+    url: https://www.postgresql.org/docs/current/warm-standby.html#STREAMING-REPLICATION-SLOTS
   - name: Streaming-only cascading replication
     versions:
       '9.3': 'Yes'
@@ -1010,7 +1010,7 @@ featurematrix:
   - name: Archive modules
     versions:
       '15': 'Yes'
-    url: https://www.postgresql.org/docs/15/archive-modules.html
+    url: https://www.postgresql.org/docs/current/archive-modules.html
   - name: Checksum on data pages
     versions:
       '9.3': 'Yes'
@@ -1020,7 +1020,7 @@ featurematrix:
     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"
+      \ cluster via the pg_checksums command:\r\n\r\nhttps://www.postgresql.org/docs/current/app-pgchecksums.html"
   - name: Generic WAL facility
     versions:
       '9.6': 'Yes'
@@ -1033,7 +1033,7 @@ featurematrix:
   - 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
+    url: https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-WAL-COMPRESSION
   - name: min_wal_size / max_wal_size
     versions:
       '9.5': 'Yes'
@@ -1060,14 +1060,14 @@ featurematrix:
   - name: pg_basebackup client decompression
     versions:
       '15': 'Yes'
-    description: '[`pg_basebackup`](https://www.postgresql.org/docs/15/app-pgbasebackup.html)
+    description: '[`pg_basebackup`](https://www.postgresql.org/docs/current/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)
+      The new application [pg_combinebackup](https://www.postgresql.org/docs/current/app-pgcombinebackup.html)
       allows manipulation of base and incremental file system backups.
   - name: pg_basebackup server-side compression
     versions:
@@ -1089,15 +1089,15 @@ featurematrix:
   - name: pg_receivewal (formerly pg_receivexlog)
     versions:
       '9.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/app-pgreceivewal.html
+    url: https://www.postgresql.org/docs/current/app-pgreceivewal.html
   - name: Point-in-Time Recovery
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/continuous-archiving.html
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/runtime-config-wal.html#GUC-RECOVERY-PREFETCH
   - name: remote_apply mode
     versions:
       '9.6': 'Yes'
@@ -1111,11 +1111,11 @@ featurematrix:
   - name: Verify backup integrity (pg_verifybackup)
     versions:
       '13': 'Yes'
-    url: https://www.postgresql.org/docs/13/app-pgverifybackup.html
+    url: https://www.postgresql.org/docs/current/app-pgverifybackup.html
   - name: Warm Standby
     versions:
       '8.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/warm-standby.html
+    url: https://www.postgresql.org/docs/current/warm-standby.html
   Upgrade:
   - name: pg_upgrade --swap
     versions:
@@ -1123,7 +1123,7 @@ featurematrix:
     description: "The `--swap` option moves the data directories from the old\
       \ cluster to the new cluster and then replaces catalog files with those\
       \ generated for the new cluster. See\
-      [`pg_upgrade`](https://www.postgresql.org/docs/18/pgupgrade.html)\
+      [`pg_upgrade`](https://www.postgresql.org/docs/current/pgupgrade.html)\
       \ for more information."
   - name: Planner statistics preserved on major version upgrade
     versions:
@@ -1131,7 +1131,7 @@ featurematrix:
     description: "PostgreSQL now keeps planner statistics\
       \ through a major version upgrade, which helps an upgraded cluster\
       \ reach expected performance more quickly after the upgrade. See the\
-      \ statistics section in [`pg_upgrade`](https://www.postgresql.org/docs/18/pgupgrade.html)\
+      \ statistics section in [`pg_upgrade`](https://www.postgresql.org/docs/current/pgupgrade.html)\
       \ for more information."
   Data Import & Export:
   - name: COPY from/to STDIN/STDOUT
@@ -1153,16 +1153,16 @@ featurematrix:
   - name: COPY with arbitrary SELECT
     versions:
       '8.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-copy.html
+    url: https://www.postgresql.org/docs/current/sql-copy.html
   - name: CSV support for COPY
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-copy.html
+    url: https://www.postgresql.org/docs/current/sql-copy.html
   Configuration Management:
   - name: ALTER SYSTEM
     versions:
       '9.4': 'Yes'
-    url: https://www.postgresql.org/docs/9.4/static/sql-altersystem.html
+    url: https://www.postgresql.org/docs/current/sql-altersystem.html
   - name: Fractional input for "integer" values
     versions:
       '12': 'Yes'
@@ -1171,8 +1171,8 @@ featurematrix:
   - 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)
+    description: 'Both [`pg_hba.conf`](https://www.postgresql.org/docs/current/auth-pg-hba-conf.html)
+      and [`pg_ident.conf`](https://www.postgresql.org/docs/current/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
@@ -1187,8 +1187,8 @@ featurematrix:
   - 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)
+    description: Both [`pg_hba.conf`](https://www.postgresql.org/docs/current/auth-pg-hba-conf.html)
+      and [`pg_ident.conf`](https://www.postgresql.org/docs/current/auth-username-maps.html)
       allow for regular expression matching on usernames. `pg_hba.conf` also supports
       regular expression matching on database names.
   Security:
@@ -1199,11 +1199,11 @@ featurematrix:
   - name: Client can require SCRAM channel binding
     versions:
       '13': 'Yes'
-    url: https://www.postgresql.org/docs/13/libpq-connect.html#LIBPQ-CONNECT-CHANNEL-BINDING
+    url: https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-REQUIRE-AUTH
   - name: Column level permissions
     versions:
       '8.4': 'Yes'
@@ -1216,11 +1216,11 @@ featurematrix:
   - name: Direct TLS negotiation ("sslnegotiation")
     versions:
       '17': 'Yes'
-    url: https://www.postgresql.org/docs/17/libpq-connect.html#LIBPQ-CONNECT-SSLNEGOTIATION
+    url: https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-SSLNEGOTIATION
   - name: FIPS mode validation
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/pgcrypto.html#PGCRYPTO-OPENSSL-SUPPORT-FUNCS
+    url: https://www.postgresql.org/docs/current/pgcrypto.html#PGCRYPTO-OPENSSL-SUPPORT-FUNCS
   - name: GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS
     versions:
       '9.0': 'Yes'
@@ -1229,7 +1229,7 @@ featurematrix:
     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"
+      \ GSSAPI for authentication.\r\n\r\nhttps://www.postgresql.org/docs/current/gssapi-auth.html"
   - name: GSSAPI support
     versions:
       '8.3': 'Yes'
@@ -1237,7 +1237,7 @@ featurematrix:
   - name: Kerberos credential delegation
     versions:
       '16': 'Yes'
-    url: https://www.postgresql.org/docs/16/runtime-config-connection.html#GUC-GSS-ACCEPT-DELEGATION
+    url: https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-GSS-ACCEPT-DELEGATION
   - name: krb5 authentication (without gssapi)
     versions:
       '8.1': 'Yes'
@@ -1251,17 +1251,17 @@ featurematrix:
     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"
+      \ with OpenLDAP\r\n\r\nhttps://www.postgresql.org/docs/current/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, or the client name based on a map.\r\n\r\n[https://www.postgresql.org/docs/current/ssl-tcp.html#SSL-CLIENT-CERTIFICATES](https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/auth-methods.html#AUTH-LDAP
   - name: Native RADIUS authentication
     versions:
       '9.0': 'Yes'
@@ -1269,7 +1269,7 @@ featurematrix:
   - name: OAuth Authentication / Authorization
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/auth-oauth.html
+    url: https://www.postgresql.org/docs/current/auth-oauth.html
   - name: Per user/database connection limits
     versions:
       '8.1': 'Yes'
@@ -1282,7 +1282,7 @@ featurematrix:
   - 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)
+    description: Unprivileged users can be [granted permission](https://www.postgresql.org/docs/current/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
@@ -1293,7 +1293,7 @@ featurematrix:
   - name: Row-Level Security
     versions:
       '9.5': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-createpolicy.html
+    url: https://www.postgresql.org/docs/current/sql-createpolicy.html
   - name: SCRAM-SHA-256 Authentication
     versions:
       '10': 'Yes'
@@ -1320,7 +1320,7 @@ featurematrix:
   - name: SHA-2 encryption for password hashing
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/pgcrypto.html#PGCRYPTO-CRYPT-ALGORITHMS
+    url: https://www.postgresql.org/docs/current/pgcrypto.html#PGCRYPTO-CRYPT-ALGORITHMS
   - name: SSL certificate validation in libpq
     versions:
       '8.4': 'Yes'
@@ -1342,16 +1342,16 @@ featurematrix:
   - name: TLS v1.3 cipher suite allowlisting
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/runtime-config-connection.html#GUC-SSL-TLS13-CIPHERS
+    url: https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-SSL-TLS13-CIPHERS
   Transactions and Visibility:
   - name: Cursors
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-declare.html
+    url: https://www.postgresql.org/docs/current/sql-declare.html
   - name: Savepoints
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-savepoint.html
+    url: https://www.postgresql.org/docs/current/sql-savepoint.html
   - name: Serializable Snapshot Isolation
     versions:
       '9.1': 'Yes'
@@ -1361,11 +1361,11 @@ featurematrix:
   - name: Two Phase commit
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-prepare-transaction.html
+    url: https://www.postgresql.org/docs/current/sql-prepare-transaction.html
   - name: Updatable cursors
     versions:
       '8.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-declare.html
+    url: https://www.postgresql.org/docs/current/sql-declare.html
   VACUUM and Maintenance:
   - name: Inserted data can trigger autovacuum
     versions:
@@ -1376,7 +1376,7 @@ featurematrix:
   - name: Integrated autovacuum daemon
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/routine-vacuuming.html#AUTOVACUUM
+    url: https://www.postgresql.org/docs/current/routine-vacuuming.html#AUTOVACUUM
   - name: Page freezing optimizations
     versions:
       '16': 'Yes'
@@ -1405,8 +1405,8 @@ featurematrix:
       '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)
+      `](https://www.postgresql.org/docs/current/runtime-config-vacuum.html#GUC-VACUUM-FAILSAFE-AGE)
+      and [`vacuum_multixact_failsafe_age `](https://www.postgresql.org/docs/current/runtime-config-vacuum.html#GUC-VACUUM-MULTIXACT-FAILSAFE-AGE)
       configuration parameters.
   - name: Visibility Map for Vacuuming
     versions:
@@ -1417,9 +1417,9 @@ featurematrix:
   - name: Certificate authentication with postgres_fdw
     versions:
       '13': 'Yes'
-    description: "The [postgres_fdw](https://www.postgresql.org/docs/13/postgres-fdw.html)\
+    description: "The [postgres_fdw](https://www.postgresql.org/docs/current/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)"
+      \ mechanism.\r\n\r\nFor more information, please visit the [postgres_fdw documentation](https://www.postgresql.org/docs/current/postgres-fdw.html#POSTGRES-FDW-OPTIONS)"
   - name: CREATE FOREIGN TABLE ... LIKE
     versions:
       '18': 'Yes'
@@ -1430,7 +1430,7 @@ featurematrix:
     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)
+      scans in parallel. This is implemented in the [`postgres_fdw`](https://www.postgresql.org/docs/current/postgres-fdw.html)
   - name: Foreign data wrappers
     versions:
       '9.1': 'Yes'
@@ -1443,11 +1443,11 @@ featurematrix:
   - name: IMPORT FOREIGN SCHEMA
     versions:
       '9.5': 'Yes'
-    url: https://www.postgresql.org/docs/9.5/static/sql-importforeignschema.html
+    url: https://www.postgresql.org/docs/current/sql-importforeignschema.html
   - name: Import foreign table partitions
     versions:
       '14': 'Yes'
-    description: '[`IMPORT FOREIGN SCHEMA`](https://www.postgresql.org/docs/14/sql-importforeignschema.html)
+    description: '[`IMPORT FOREIGN SCHEMA`](https://www.postgresql.org/docs/current/sql-importforeignschema.html)
       can import the schema of partitioned tables.'
   - name: Parallel query execution on remote databases
     versions:
@@ -1458,7 +1458,7 @@ featurematrix:
   - 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
+    url: https://www.postgresql.org/docs/current/postgres-fdw.html#POSTGRES-FDW-OPTIONS-TRANSACTION-MANAGEMENT
   - name: postgres_fdw pushdown
     versions:
       '9.6': 'Yes'
@@ -1468,11 +1468,11 @@ featurematrix:
   - name: postgres_fdw SCRAM authentication passthrough
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/postgres-fdw.html#POSTGRES-FDW-OPTION-USE-SCRAM-PASSTHROUGH
+    url: https://www.postgresql.org/docs/current/postgres-fdw.html#POSTGRES-FDW-OPTION-USE-SCRAM-PASSTHROUGH
   - name: PostgreSQL Foreign Data Wrapper
     versions:
       '9.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/postgres-fdw.html
+    url: https://www.postgresql.org/docs/current/postgres-fdw.html
   - name: Writable Foreign Data Wrappers
     versions:
       '9.3': 'Yes'
@@ -1487,7 +1487,7 @@ featurematrix:
   - name: ALTER TABLE / ENABLE REPLICA TRIGGER/RULE
     versions:
       '8.3': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/sql-altertable.html
+    url: https://www.postgresql.org/docs/current/sql-altertable.html
   - name: BEGIN ATOMIC function bodies
     versions:
       '14': 'Yes'
@@ -1499,7 +1499,7 @@ featurematrix:
   - name: CALL syntax for executing procedures
     versions:
       '11': 'Yes'
-    url: https://www.postgresql.org/docs/11/static/sql-call.html
+    url: https://www.postgresql.org/docs/current/sql-call.html
   - name: Column level triggers
     versions:
       '9.0': 'Yes'
@@ -1508,7 +1508,7 @@ featurematrix:
   - name: CREATE PROCEDURE syntax for SQL stored procedures
     versions:
       '11': 'Yes'
-    url: https://www.postgresql.org/docs/11/static/sql-createprocedure.html
+    url: https://www.postgresql.org/docs/current/sql-createprocedure.html
   - name: Event triggers
     versions:
       '9.3': 'Yes'
@@ -1575,7 +1575,7 @@ featurematrix:
   - name: CREATE TRANSFORM
     versions:
       '9.5': 'Yes'
-    url: https://www.postgresql.org/docs/9.5/static/sql-createtransform.html
+    url: https://www.postgresql.org/docs/current/sql-createtransform.html
   - name: DO statement for PL/Perl
     versions:
       '9.0': 'Yes'
@@ -1669,7 +1669,7 @@ featurematrix:
   - name: Extension Installation
     versions:
       '9.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/external-extensions.html
+    url: https://www.postgresql.org/docs/current/external-extensions.html
   - name: Trusted Extensions
     versions:
       '13': 'Yes'
@@ -1684,11 +1684,11 @@ featurematrix:
       '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).
+      collations](https://www.postgresql.org/docs/current/collation.html#COLLATION-MANAGING-STANDARD).
   - name: casefold
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/functions-string.html#id-1.5.8.10.7.2.2.8.1.1.1
+    url: https://www.postgresql.org/docs/current/functions-string.html#id-1.5.8.10.7.2.2.8.1.1.1
   - name: Column-level collation support
     versions:
       '9.1': 'Yes'
@@ -1712,11 +1712,11 @@ featurematrix:
   - name: ICU collations
     versions:
       '10': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/collation.html#id-1.6.10.4.5.7.5
+    url: https://www.postgresql.org/docs/current/collation.html#id-1.6.10.4.5.7.5
   - name: LIKE comparisons for nondeterministic collations
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/collation.html#COLLATION-NONDETERMINISTIC
+    url: https://www.postgresql.org/docs/current/collation.html#COLLATION-NONDETERMINISTIC
   - name: Multibyte encoding support, incl. UTF8
     versions:
       '8.1': 'Yes'
@@ -1728,11 +1728,11 @@ featurematrix:
   - name: Nondeterministic collations
     versions:
       '12': 'Yes'
-    url: https://www.postgresql.org/docs/12/collation.html#COLLATION-NONDETERMINISTIC
+    url: https://www.postgresql.org/docs/current/collation.html#COLLATION-NONDETERMINISTIC
   - name: pg_unicode_fast collation
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/collation.html#COLLATION-MANAGING-STANDARD
+    url: https://www.postgresql.org/docs/current/collation.html#COLLATION-MANAGING-STANDARD
   - name: Unicode string literals and identifiers
     versions:
       '8.4': 'Yes'
@@ -1750,19 +1750,19 @@ featurematrix:
   - name: pg_combinebackup
     versions:
       '17': 'Yes'
-    url: https://www.postgresql.org/docs/17/app-pgcombinebackup.html
+    url: https://www.postgresql.org/docs/current/app-pgcombinebackup.html
   - name: pg_createsubscriber
     versions:
       '17': 'Yes'
-    url: https://www.postgresql.org/docs/17/app-pgcreatesubscriber.html
+    url: https://www.postgresql.org/docs/current/app-pgcreatesubscriber.html
   - name: pg_prewarm
     versions:
       '9.4': 'Yes'
-    url: https://www.postgresql.org/docs/9.4/static/pgprewarm.html
+    url: https://www.postgresql.org/docs/current/pgprewarm.html
   - name: pg_rewind
     versions:
       '9.5': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/app-pgrewind.html
+    url: https://www.postgresql.org/docs/current/app-pgrewind.html
   - name: pg_standby
     versions:
       '8.3': 'Yes'
@@ -1779,7 +1779,7 @@ featurematrix:
   - name: pg_walsummary
     versions:
       '17': 'Yes'
-    url: https://www.postgresql.org/docs/17/app-pgwalsummary.html
+    url: https://www.postgresql.org/docs/current/app-pgwalsummary.html
   - name: pg_xlogdump
     versions:
       '9.3': 'Yes'
@@ -1789,30 +1789,30 @@ featurematrix:
   - name: psql \bind
     versions:
       '16': 'Yes'
-    url: https://www.postgresql.org/docs/16/app-psql.html#APP-PSQL-META-COMMAND-BIND
+    url: https://www.postgresql.org/docs/current/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
+    description: The [`psql`](https://www.postgresql.org/docs/current/app-psql.html) client
       includes a `\dconfig` command for inspecting and finding the values of configuration
       parameters.
   - name: psql pipeline queries
     versions:
       '18': 'Yes'
     description: "psql can issue pipeline queries using the commands\
-      \ [`\\startpipeline`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
-      \ [`\\syncpipeline`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
-      \ [`\\sendpipeline`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
-      \ [`\\endpipeline`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
-      \ [`\\flushrequest`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
-      \ [`\\flush`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE), and\
-      \ [`\\getresults`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE)."
+      \ [`\\startpipeline`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
+      \ [`\\syncpipeline`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
+      \ [`\\sendpipeline`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
+      \ [`\\endpipeline`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
+      \ [`\\flushrequest`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE),\
+      \ [`\\flush`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE), and\
+      \ [`\\getresults`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-PIPELINE)."
   - name: psql named prepared statements
     versions:
       '18': 'Yes'
-    description: "psql can parse ([`\\parse`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-PARSE)),\
-      \ bind ([`\\bind_named`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-BIND-NAMED)),\
-      \ and close ([`\\close_prepared`](https://www.postgresql.org/docs/18/app-psql.html#APP-PSQL-META-COMMAND-CLOSE-PREPARED))\
+    description: "psql can parse ([`\\parse`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-PARSE)),\
+      \ bind ([`\\bind_named`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-BIND-NAMED)),\
+      \ and close ([`\\close_prepared`](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-CLOSE-PREPARED))\
       \ named prepared statements."
   - name: Version aware psql
     versions:
@@ -1824,7 +1824,7 @@ featurematrix:
     versions:
       '8.2': 'Yes'
       '17': 'No'
-    url: https://www.postgresql.org/docs/current/static/adminpack.html
+    url: https://www.postgresql.org/docs/16/adminpack.html
   - name: auth_delay
     versions:
       '9.1': 'Yes'
@@ -1836,11 +1836,11 @@ featurematrix:
   - name: btree_gin
     versions:
       '8.4': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/btree-gin.html
+    url: https://www.postgresql.org/docs/current/btree-gin.html
   - name: btree_gist
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/8.3/static/btree-gist.html
+    url: https://www.postgresql.org/docs/current/btree-gist.html
   - name: citext
     versions:
       '8.4': 'Yes'
@@ -1848,7 +1848,7 @@ featurematrix:
   - name: dblink
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/dblink.html
+    url: https://www.postgresql.org/docs/current/dblink.html
   - name: dblink asynchronous notification support
     versions:
       '9.0': 'Yes'
@@ -1868,7 +1868,7 @@ featurematrix:
   - name: intarray
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/intarray.html
+    url: https://www.postgresql.org/docs/current/intarray.html
   - name: isn (ISBN)
     versions:
       '8.2': 'Yes'
@@ -1881,7 +1881,7 @@ featurematrix:
   - name: ltree
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/ltree.html
+    url: https://www.postgresql.org/docs/current/ltree.html
   - name: pageinspect
     versions:
       '8.3': 'Yes'
@@ -1889,11 +1889,11 @@ featurematrix:
   - name: passwordcheck
     versions:
       '9.0': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/passwordcheck.html
+    url: https://www.postgresql.org/docs/current/passwordcheck.html
   - name: pg_buffercache
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/pgbuffercache.html
+    url: https://www.postgresql.org/docs/current/pgbuffercache.html
   - name: pg_freespacemap
     versions:
       '8.2': 'Yes'
@@ -1901,15 +1901,15 @@ featurematrix:
   - name: pg_logicalinspect
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/pglogicalinspect.html
+    url: https://www.postgresql.org/docs/current/pglogicalinspect.html
   - name: pg_overexplain
     versions:
       '18': 'Yes'
-    url: https://www.postgresql.org/docs/18/pgoverexplain.html
+    url: https://www.postgresql.org/docs/current/pgoverexplain.html
   - name: pg_stat_statements
     versions:
       '8.4': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/pgstatstatements.html
+    url: https://www.postgresql.org/docs/current/pgstatstatements.html
   - name: pg_stat_statements improvements
     versions:
       '9.2': 'Yes'
@@ -1918,11 +1918,11 @@ featurematrix:
   - name: pgstattuple
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/pgstattuple.html
+    url: https://www.postgresql.org/docs/current/pgstattuple.html
   - name: pg_trgm
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/pgtrgm.html
+    url: https://www.postgresql.org/docs/current/pgtrgm.html
   - name: pg_trgm regular expressions indexing
     versions:
       '9.3': 'Yes'
@@ -1930,13 +1930,13 @@ featurematrix:
   - name: pg_walinspect
     versions:
       '15': 'Yes'
-    description: '[`pg_walinspect`](https://www.postgresql.org/docs/15/pgwalinspect.html)
+    description: '[`pg_walinspect`](https://www.postgresql.org/docs/current/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
+    url: https://www.postgresql.org/docs/current/seg.html
   - name: sepgsql
     versions:
       '9.1': 'Yes'
@@ -1948,11 +1948,11 @@ featurematrix:
   - name: tablefunc
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/tablefunc.html
+    url: https://www.postgresql.org/docs/current/tablefunc.html
   - name: tcn
     versions:
       '9.2': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/tcn.html
+    url: https://www.postgresql.org/docs/current/tcn.html
   - name: tsearch2 compatibility wrapper
     versions:
       '8.3': 'Yes'
@@ -1962,7 +1962,7 @@ featurematrix:
   - name: unaccent
     versions:
       '9.0': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/unaccent.html
+    url: https://www.postgresql.org/docs/current/unaccent.html
   - name: uuid-ossp
     versions:
       '8.3': 'Yes'
@@ -1976,7 +1976,7 @@ featurematrix:
   - name: Full SSL support
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/ssl-tcp.html
+    url: https://www.postgresql.org/docs/current/ssl-tcp.html
   - name: IPv6 Support
     versions:
       '8.1': 'Yes'
@@ -1989,7 +1989,7 @@ featurematrix:
   - name: V3 client protocol
     versions:
       '8.1': 'Yes'
-    url: https://www.postgresql.org/docs/current/static/protocol.html
+    url: https://www.postgresql.org/docs/current/protocol.html
   Platforms:
   - name: Microsoft Visual C++ Support
     versions:
-- 
2.39.3 (Apple Git-146)



  [application/octet-stream] v3-0004-featurematrix-Use-Markdown-for-description-links.patch (3.3K, 5-v3-0004-featurematrix-Use-Markdown-for-description-links.patch)
  download | inline diff:
From 0018063ac3de22b4682d491241dee6d9a665109b Mon Sep 17 00:00:00 2001
From: Daniel Gustafsson <[email protected]>
Date: Tue, 21 Oct 2025 13:59:38 +0200
Subject: [PATCH v3 4/4] featurematrix: Use Markdown for description links

A few links in the description texts were not using Markdown syntax
for links rendering them as text rather than actual html links. Fix
by wrapping all links in []() syntax.

Author: Daniel Gustafsson <[email protected]>
Discussion: https://postgr.es/m/[email protected]
---
 data/featurematrix.yaml | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/data/featurematrix.yaml b/data/featurematrix.yaml
index a5bbd8be..7bd4aca2 100644
--- a/data/featurematrix.yaml
+++ b/data/featurematrix.yaml
@@ -531,15 +531,17 @@ featurematrix:
   - name: CREATE STATISTICS - multicolumn
     versions:
       '10': 'Yes'
-    description: "CREATE STATISTICS provides the ability to collect statistics over\
+    description: "[CREATE STATISTICS](https://www.postgresql.org/docs/current/sql-createstatistics.html)\
+      \ 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"
+      \ plans."
   - name: CREATE STATISTICS - "OR" and "IN/ANY" statistics
     versions:
       '13': 'Yes'
     description: Extended statistics can help the query planner generate 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/current/planner-stats.html#PLANNER-STATS-EXTENDED
+      more information, please see
+      [https://www.postgresql.org/docs/current/planner-stats.html#PLANNER-STATS-EXTENDED](https://www.postgresql.org/docs/current/planner-stats.html#PLANNER-STATS-EXTENDED)
   - name: Cross datatype hashing support
     versions:
       '8.3': 'Yes'
@@ -1020,7 +1022,7 @@ featurematrix:
     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/current/app-pgchecksums.html"
+      \ cluster via the [pg_checksums command](https://www.postgresql.org/docs/current/app-pgchecksums.html)"
   - name: Generic WAL facility
     versions:
       '9.6': 'Yes'
@@ -1229,7 +1231,7 @@ featurematrix:
     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/current/gssapi-auth.html"
+      \ [GSSAPI for authentication](https://www.postgresql.org/docs/current/gssapi-auth.html)"
   - name: GSSAPI support
     versions:
       '8.3': 'Yes'
@@ -1251,7 +1253,7 @@ featurematrix:
     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/current/auth-ldap.html"
+      \ with [OpenLDAP](https://www.postgresql.org/docs/current/auth-ldap.html)"
   - name: Multifactor authentication via valid client SSL/TLS certificate
     versions:
       '12': 'Yes'
-- 
2.39.3 (Apple Git-146)



reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected]
  Subject: Re: Typos in the featurematrix
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox