Hi, > ### Indexing Performance, Functionality, and Management > > PostgreSQL 12 improves the overall performance of the standard B-tree indexes > with improvements to the overall space management of these indexes as well. > These improvements also provide an overall reduction of bloating when using > B-tree for specific use cases, in addition to a performance gain.
I'm not sure everyone will understand bloating as a term? Perhaps just saying 'also reduce index size when the index is modified frequently' or such? > ### Inlined WITH queries (Common table expressions) > > Common table expressions (aka `WITH` queries) can now be automatically inlined > in a query if they are a) not recursive, b) do not have any side-effects and > c) are only referenced once in a later part of a query. These removes a known > "optimization fence" that has existed since the introduction of the `WITH` > clause in PostgreSQL 8.4 > > You can force a `WITH` query to be inlined using the `NOT MATERIALIZED` > clause, > e.g. > > ``` > WITH c AS NOT MATERIALIZED ( > SELECT * FROM a WHERE a.x % 4 > ) > SELECT * FROM c JOIN d ON d.y = a.x; > ``` Wouldn't it be more important to reference how they can be *forced* to be materialized? Because that'll be what users will need. And I think if we reference NOT MATERIALIZED it also sounds like CTEs will not automatically inlined ever. > ### Pluggable Table Storage Interface > > PostgreSQL 12 introduces the pluggable table storage interface that allows for > the creation and use of different storage mechanisms for table storage. New > access methods can be added to a PostgreSQL cluster using the [`CREATE > ACCESS > METHOD`](https://www.postgresql.org/docs/devel/sql-create-access-method.html) > and subsequently added to tables with the new `USING` clause on `CREATE > TABLE`. > > A table storage interface can be defined by creating a new [table access > method](https://www.postgresql.org/docs/devel/tableam.html). > > In PostgreSQL 12, the storage interface that is used by default is the `heap` > access method, which is currently the only supported method. I think s/which is currently the only supported method/which currently is the only built-in method/ or such would be good. I don't know what "supported" would actually mean here. > ### Authentication > > GSSAPI now supports client and server-side encryption and can be specified in > the > [`pg_hba.conf`](https://www.postgresql.org/docs/devel/auth-pg-hba-conf.html) > file using the `hostgssenc` and `hostnogssenc` record types. PostgreSQL 12 > also > allows for LDAP servers to be discovered based on `DNS SRV` records if > PostgreSQL was compiled with OpenLDAP. Is this really accurately categorized under authentication? Because it's really ongoing encryption, as an alternative to tls? > Noted Behavior Changes > ---------------------- > > There are several changes introduced in PostgreSQL 12 that can affect the > behavior as well as management of your ongoing operations. A few of these are > noted below; for information about other changes, please review the > "Migrating to Version 12" section of the [release > notes](https://www.postgresql.org/docs/devel/release-12.html). > > 1. The `recovery.conf` configuration file is now merged into the main > `postgresql.conf` file. PostgreSQL will not start if it detects that > `recovery.conf` is present. To put PostgreSQL into a non-primary mode, you can > use the `recovery.signal` and the `standby.signal` files. > > You can read more about [archive > recovery](https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY) > here: > > https://www.postgresql.org/docs/devel/runtime-config-wal.html#RUNTIME-CONFIG-WAL-ARCHIVE-RECOVERY > > 2. Just-in-Time (JIT) compilation is now enabled by default. I think we should probably list the removal of WITH OIDs. Greetings, Andres Freund