Re: PostgreSQL 18 GA press release draft

From: Álvaro Herrera <alvherre(at)kurilemu(dot)de>
To: "Jonathan S(dot) Katz" <jkatz(at)postgresql(dot)org>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: PostgreSQL 18 GA press release draft
Date: 2025-09-12 19:24:40
Message-ID: 202509121846.xgt5moxcgoj6@alvherre.pgsql
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hello,

Thanks for putting this together! It's quite the monster. I read
through and found the following points worth mentioning:

I think almost all of the non-stock section titles Are Lacking Case
Title.

> The new [`io_method`](https://www.postgresql.org/docs/18/runtime-config-resource.html#GUC-IO-METHOD) setting lets you toggle between the AIO methods, including `worker` and `io_uring` (when built with PostgreSQL, available on certain Linux systems), or you can choose to maintain the current PostgreSQL behavior with the `sync` setting. There are now more parameters to consider tuning with AIO, which you can [learn more about in the documentation](https://www.postgresql.org/docs/18/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-IO).

I don't understand the "when built with PostgreSQL". Did you mean to
reference something else here?

> PostgreSQL 18 further accelerates query performance with features that automatically make your workloads faster. This release introduces "skip scan" lookups on [multicolumn B-tree indexes](https://www.postgresql.org/docs/18/indexes-multicolumn.html), which improves execution time for queries that omit an `=` condition on one or more prefix index columns. It can also optimize queries that use `OR` conditions in a `WHERE` to use an index, leading to significantly faster execution. There are also numerous improvements for how PostgreSQL plans and executes table joins, from boosting the performance of hash joins to allowing merge joins to use incremental sorts.

introduces "skip scan" lookups ..., which improve
(remove ending 's')

> PostgreSQL 18 now supports parallel builds for [GIN indexes](https://www.postgresql.org/docs/18/gin.html), joining B-tree and [BRIN indexes](https://www.postgresql.org/docs/current/brin.html) in supporting this capability. Additionally, [materialized views](https://www.postgresql.org/docs/18/rules-materializedviews.html) can now use unique indexes that aren't B-trees as partition keys, expanding how you can construct materialized views.

Materialized views can use non-btree indexes as partition keys? Sounds
cool, but the linked-to matview page doesn't talk about partitioning at
all. I think there's something wrong with the way this has been
written. [trawls the release notes] Hmm, the release notes have this
text:

"Allow non-btree unique indexes to be used as partition keys and in
materialized views"

I think the confusion stems from having missed the "and" there.

Actually I wonder if these two items (commits f278e1fe3 and 9d6db8bec)
are actually worthy of being in the press release. They are about using
unique indexes that aren't btrees, but as I understand, in stock
Postgres there isn't any other way to build unique indexes, so this is
about allowing out-of-core index AMs to be used in these contexts.

> PostgreSQL 18 makes text processing easier and faster with several new enhancements. This release adds the [`PG_UNICODE_FAST`](https://www.postgresql.org/docs/18/locale.html#LOCALE-PROVIDERS), which accelerates lookups using the `upper` and `lower` string comparison functions, and helps speed up the new [`casefold`](https://www.postgresql.org/docs/18/functions-string.html#FUNCTIONS-STRING-OTHER) function for case-insensitive comparisons. Additionally, PostgreSQL 18 now supports making `LIKE` comparisons over text that uses a [nondeterministic collation](https://www.postgresql.org/docs/18/collation.html#COLLATION-NONDETERMINISTIC), simplifying how you can perform more complex pattern matching. This release also changes [full text search](https://www.postgresql.org/docs/18/textsearch.html) to use the default collation provider of a cluster instead of always using libc, which may require you to reindex all [full text search](https://www.postgresql.org/docs/18/textsearch-tables.html#TEXTSEARCH-TABLES-INDEX) and [`pg_trgm`](https://www.postgresql.org/docs/18/pgtrgm.html#PGTRGM-INDEX) indexes after running [`pg_upgrade`](https://www.postgresql.org/docs/18/pgupgrade.html).

I think this should say "This release adds the PG_UNICODE_FAST local
provider", or something like that, because ending in just
"PG_UNICODE_FAST" seems to be unintelligible.

> ### Authentication and security features

In this section I would also mention that pgcrypto gained SHA-2 cipher
for passwords (commit 749a9e20c979).

> PostgreSQL 18 now supports reporting logical replication write conflicts in logs and in the [`pg_stat_subscription_stats`](https://www.postgresql.org/docs/18/monitoring-stats.html#MONITORING-PG-STAT-SUBSCRIPTION-STATS) view. Additionally, [`CREATE SUBSCRIPTION`](https://www.postgresql.org/docs/18/sql-createsubscription.html) now defaults to use parallel streaming for applying transactions, which can help improve performance. The [`pg_createsubscriber`](https://www.postgresql.org/docs/18/app-pgcreatesubscriber.html) now has an `--all` flag so you can create logical replicas for all databases in an instance with a single command. PostgreSQL 18 also lets you automatically [drop idle replication slots](https://www.postgresql.org/docs/18/runtime-config-replication.html#GUC-IDLE-REPLICATION-SLOT-TIMEOUT) to help prevent storing too many write-ahead log files on a publisher.

My English grammar fails me here. I would say "... now defaults to
using", but maybe your "now defaults to use" is correct.

"The pg_createsubscriber **utility**" ?

> Databases initialized with PostgreSQL 18 [`initdb`](https://www.postgresql.org/docs/18/app-initdb.html) now have page checksums enabled by default. This can affect upgrades from non-checksum enabled clusters, which would require you to create a new PostgreSQL 18 cluster with the `--no-data-checksums` option when using [`pg_upgrade`](https://www.postgresql.org/docs/18/pgupgrade.html).

I'm not sure that the relnotes really need to explain how to use
pg_upgrade. To me it seems enough to say that initdb now creates
checksum-enabled clusters by default.

Thanks!

--
Álvaro Herrera 48°01'N 7°57'E — https://www.EnterpriseDB.com/
"La fuerza no está en los medios físicos
sino que reside en una voluntad indomable" (Gandhi)

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Noah Misch 2025-09-12 20:18:47 Re: race condition in pg_class
Previous Message Jeff Davis 2025-09-12 19:13:23 Re: PostgreSQL 18 GA press release draft