Re: PG 18 release notes draft committed
Bruce Momjian <bruce@momjian.us>
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
doc PG 18 relnotes: add AFTER trigger user change item
- 73e26cbeb592 18.0 landed
-
doc PG 18 relnotes: modify async I/O item for other improvements
- 03c53a73141a 18.0 landed
-
doc PG 18 relnotes: split apart log_connections item
- a1de1b0833b8 18.0 landed
-
doc PG 18 relnotes: move ANALYZE item,split ANALYZE/EXPLAIN item
- bf6034d00dd4 18.0 landed
-
doc PG 18 relnotes: clarify multiplication item
- c861092b0e0f 18.0 landed
-
doc PG 18 relnotes: add removal details to MD5 item
- 3e782ca32225 18.0 landed
-
doc PG 18 relnotes: fix markup
- 08b8aa174840 18.0 landed
-
doc PG 18 relnotes: clarify btree skip-scan item
- 44ce4e1593b1 18.0 landed
-
doc PG 18 relnotes: update to current
- 1ca583f6c0f9 18.0 landed
-
doc PG 18 relnotes: adjust CREATE SUBSCRIPTION attribution
- 883339c170d1 18.0 landed
-
doc PG 18 relnotes: clarify btree skip scan item
- 7ddfac79f2cd 18.0 landed
-
doc PG 18 relnotes: mv. hash joins and GROUP BY item to General
- 99ddf8615c21 18.0 landed
-
Add support for runtime arguments in injection points
- 371f2db8b05e 18.0 cited
-
doc PG 18 relnotes: fix missing parens for crc32c()
- 89372d0aaa4a 18.0 landed
-
PG 18 relnotes: adjust RETURNING new/old item
- 9d710a1ac091 18.0 landed
-
doc PG 18 relnotes: adjust pg_log_backend_memory_contexts()
- 9fef27a83b31 18.0 landed
-
doc PG 18 relnotes: add pg_log_backend_memory_contexts() mention
- f8d49aa130b2 18.0 landed
-
doc PG 18 relnotes: adjust pgbench per-script reporting item
- 69aca072ebf6 18.0 landed
-
doc PG 18 relnotes: mention GROUP SET fixes
- 3bd5271729c5 18.0 landed
-
doc PG 18 relnotes: adjust partition planning item
- b560ce7884a3 18.0 landed
-
doc PG 18 relnotes: small adjustments regarding options
- ada78f9bef2e 18.0 landed
-
doc PG 18 relnotes: move partition locking item to General Perf
- 575f6003eddb 18.0 landed
-
doc PG 18 relnotes: adjust partition items
- 45750c6cfe8d 18.0 landed
-
doc PG 18 relnotes: reword OAuth item
- c0e6aace02b6 18.0 landed
-
doc PG 18 relnotes: add mention of pg_stat_reset_backend_stats()
- 0de2e1c8b542 18.0 landed
-
doc PG 18 relnotes: adjust hash item
- 092e72a93023 18.0 landed
-
doc PG 18 relnotes: split partition optimizer item into two
- cf847d6340a6 18.0 landed
-
doc PG 18 relnotes: adjust COPY and REJECT_LIMIT items
- b3754dcc9ff7 18.0 landed
-
doc PG 18 relnotes: move and clarify constraint items
- d83981c24be7 18.0 landed
-
doc PG 18 relnotes: add commit for cancel key and protocol neg.
- 8c9eec540dc4 18.0 landed
-
doc PG 18 relnotes: fix libpq wording
- a675149e8770 18.0 landed
-
doc PG 18 relnotes: add GROUP BY column elimination item
- 24987c6f0687 18.0 landed
-
doc PG 18 relnotes: move protocol version item to "server"
- 04b269da56db 18.0 landed
-
doc PG 18 relnotes: adjust libpq trace & potocol version items
- 9f8fcadb2087 18.0 landed
-
doc PG 18 relnotes: reword and reorder items
- aa82ebdc2970 18.0 landed
-
doc: Fix memory context level in pg_log_backend_memory_contexts() example.
- 706cbed35103 18.0 cited
-
Make levels 1-based in pg_log_backend_memory_contexts()
- d9e03864b6b4 18.0 cited
-
Introduce file_copy_method setting.
- f78ca6f3ebbb 18.0 cited
-
libpq: Handle NegotiateProtocolVersion message differently
- 5070349102af 18.0 cited
-
Add timingsafe_bcmp(), for constant-time memory comparison
- 09be39112654 18.0 cited
-
Optimization for lower(), upper(), casefold() functions.
- 27bdec06841d 18.0 cited
-
Fix ALTER SUBSCRIPTION ... SET PUBLICATION ... command.
- 7c99dc587a01 18.0 cited
-
Add connection establishment duration logging
- 18cd15e706ac 18.0 cited
-
Modularize log_connections output
- 9219093cab26 18.0 cited
-
Ensure that AFTER triggers run as the instigating user.
- 01463e1cccd3 18.0 cited
-
Detect redundant GROUP BY columns using UNIQUE indexes
- bd10ec529796 18.0 cited
-
Move cancel key generation to after forking the backend
- 9d9b9d46f3c5 18.0 cited
On Tue, Sep 16, 2025 at 01:59:07PM -0400, Peter Geoghegan wrote: > On Fri, May 23, 2025 at 5:03 PM Bruce Momjian <bruce@momjian.us> wrote: > > I was able to squeeze in this detail in the attached, applied patch. > > I noticed that Crunchy Data had a blog post about the skip scan, where > the author got tripped up by the description of skip scan that current > appears in the release notes. > > See: https://www.crunchydata.com/blog/get-excited-about-postgres-18 > > The blog post incorrectly says "Note that this optimization only works > for queries which use the = operator, so it will not work with > inequalities or ranges". This is incorrect; skip scan works perfectly > fine with inequality operators. I'm sure that this confusion arose > because of the wording from the release notes. > > Adding to the confusion, Crunchy also had a Tweet about skip scan that > used an inequality operator (which will work correctly): > > https://x.com/crunchydata/status/1965751871848468499 > > I'm sure that this was due to the release note description, since > there was some discussion of it on a LinkedIn post that promoted the > blog post. Yes, clearly we need to fix the description we have now. However, we have already updated this item twice, so I think we need to be careful to get it right this time: https://www.postgresql.org/message-id/aC_ccwyZj1ijlM5l%40momjian.us https://www.postgresql.org/message-id/aDDiuUv4Zk4IyFR2%40momjian.us > In light of all this, I propose that we change the current feature > description, from: > > "This allows multi-column btree indexes to be used by queries that > only equality-reference the second or later indexed columns." > > to: > > "This allows multi-column btree indexes to be used by queries that > only specify conditions on the second or later indexed columns." I think your new text is inaccurate because you state here that the first column can be referenced and skip-scan still be used: https://www.postgresql.org/message-id/CAH2-Wzko57%2BsT%3DFcxHHo7jnPLhh35up_5aAvogLtj_D9bATsgQ%40mail.gmail.com I think that your wording is a big improvement. I personally would have emphasized the absence of a "=" condition, rather than the presence of another condition on a later column, since there are cases where the first column is referenced but skip scan can still be used (e.g., when there one or more inequalities on the first column, plus a "=" condition on the second column). I can live with this wording, though. I think we need to highlight new cases where indexes can now be used by skip scan: * missing early indexed column references * early indexed column references that use non-equality comparisons and the comparisons are not sufficiently restrictive on their own to use the index. And, at the same time, not fall into the trip of saying the later column references must be equality-only. I am coming to the conclusion I am trying to be too clever here, and I need to be more verbose. Here is what I have so far: Previously, multi-column btree indexes could only be used by queries that either equality-referenced the first indexed column or referenced that column in a restrictive-enough way for index lookups to be efficient. With skip scans, references to the first indexed btree column, or multiple early indexed columns, can be missing or insufficiently restrictive as long as these columns have low cardinality, and later indexed columns are restrictive enough for index lookups to be efficient. I apologize for people who got the wrong impression of the feature and I hope they see this email thread or the updated text. -- Bruce Momjian <bruce@momjian.us> https://momjian.us EDB https://enterprisedb.com Do not let urgent matters crowd out time for investment in the future.