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.
+These improvements also provide an overall reduction of index size for B-tree
+indexes that are frequently modified, in addition to a performance gain.
Additionally, PostgreSQL 12 adds the ability to rebuild indexes concurrently,
which lets you perform a [`REINDEX`](https://www.postgresql.org/docs/devel/sql-reindex.html) operation
without blocking any writes to the index. The inclusion of this feature should
-help with length index rebuilds that could cause potential downtime evens when
-administration a PostgreSQL database in a production environment.
+help with lengthy index rebuilds that could cause potential downtime when
+managing a PostgreSQL database in a production environment.
PostgreSQL 12 extends the abilities of several of the specialized indexing
mechanisms. The ability to create covering indexes, i.e. the `INCLUDE` clause
-that was introduced in PostgreSQL 11, have now been added to GiST indexes.
+that was introduced in PostgreSQL 11, havs now been added to GiST indexes.
SP-GiST indexes now support the ability to perform K-nearest neighbor (K-NN)
queries for data types that support the distance (`<->`) operation.
### 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
+in a query if they a) are not recursive, b) do not have any side-effects and
+c) are only referenced once in a later part of a query. This removes an
"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.
+If need be, you can force a `WITH` query to materialize using the `MATERIALIZED`
+clause, e.g.
```
-WITH c AS NOT MATERIALIZED (
+WITH c AS MATERIALIZED (
SELECT * FROM a WHERE a.x % 4
)
SELECT * FROM c JOIN d ON d.y = a.x;
### Partitioning
-PostgreSQL 12 improves on the performance of processing tables with thousands
+PostgreSQL 12 improves on the performance when processing tables with thousands
of partitions for operations that only need to use a small number of partitions.
-PostgreSQL 12 also provides improvements to the performance of both
-using `COPY` with a partitioned table as well as the `ATTACH PARTITION`
-operation. Additionally, the ability to use foreign keys to reference
-partitioned tables is now allowed in PostgreSQL 12.
+
+PostgreSQL 12 also provides improvements to the performance of both `INSERT` and
+`COPY` into a partitioned table. `ATTACH PARTITION` can now also be performed
+without blocking concurrent queries on the partitioned table. Additionally, the
+ability to use foreign keys to reference partitioned tables is now allowed in
+PostgreSQL 12.
### JSON path queries per SQL/JSON specification
-PostgreSQL 12 now lets you execute [JSON path queries](https://www.postgresql.org/docs/devel/functions-json.html#FUNCTIONS-SQLJSON-PATH)
+PostgreSQL 12 now allows execution of [JSON path queries](https://www.postgresql.org/docs/devel/functions-json.html#FUNCTIONS-SQLJSON-PATH)
per the SQL/JSON specification in the SQL:2016 standard. Similar to XPath
expressions for XML, JSON path expressions let you evaluate a variety of
arithmetic expressions and functions in addition to comparing values within JSON
documents.
-A subset of these expressions can be accelerated with GIN indexes, letting you
-execute highly performant lookups across sets of JSON data.
+A subset of these expressions can be accelerated with GIN indexes, allowing the
+execution of highly performant lookups across sets of JSON data.
### Collations
PostgreSQL 12 now supports case-insensitive and accent-insensitive collations
for ICU provided collations, also known as "[nondeterministic collations](https://www.postgresql.org/docs/devel/collation.html#COLLATION-NONDETERMINISTIC)".
When used, these collations can provide convenience for comparisons and sorts,
-but can also lead to a performance penalty depending as a collation may need to
-make additional checks on a string.
+but can also lead to a performance penalty as a collation may need to make
+additional checks on a string.
-### Most-common Value Statistics
+### Most-common Value Extended Statistics
[`CREATE STATISTICS`](https://www.postgresql.org/docs/devel/sql-createstatistics.html),
-introduced in PostgreSQL 10 to help collect more complex statistics to improve
-query planning, now supports most-common value statistics. This leads to
-improved query plans for distributions that are non-uniform.
+introduced in PostgreSQL 10 to help collect more complex statistics over multiple
+columns to improve query planning, now supports most-common value statistics.
+This leads to improved query plans for distributions that are non-uniform.
### Generated Columns
PostgreSQL 12 lets you create [generated columns](https://www.postgresql.org/docs/devel/ddl-generated-columns.html)
that compute their values based on the contents of other columns. This feature
-provides two types of generated columns:
-
-- Stored generated columns, which are computed on inserts and updated and are saved on disk
-- Virtual generated columns, which are computed only when a column is read as part of a query
+provides stored generated columns, which are computed on inserts and updated and
+are saved on disk. Virtual generated columns, which are computed only when a
+column is read as part of a query, are not implemented yet.
### Pluggable Table Storage Interface
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.
+access method, which currently is the only built-in method.
### Page Checksums
PostgreSQL cluster that is offline. Previously, page checksums could only be
enabled during the initialization of a cluster with `initdb`.
-### Authentication
+### Authentication & Connection Security
-GSSAPI now supports client and server-side encryption and can be specified in
+GSSAPI now supports client-side 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.
+allows for discovery of LDAP servers based on `DNS SRV` records if PostgreSQL
+was compiled with OpenLDAP.
Noted Behavior Changes
----------------------
2. Just-in-Time (JIT) compilation is now enabled by default.
+3. OIDs can no longer be added to user created tables using the `WITH OIDs`
+clause. Operations on tables that have columns that were created using
+`WITH OIDS` (i.e. columns named "OID") will need to be adjusted.
+
+Running a `SELECT *` command on a system table will now also output the OID for
+the rows in the system table as well, instead of the old behavior which required
+the OID column to be specified explicitly.
+
Additional Features
-------------------
Testing for Bugs & Compatibility
--------------------------------
-The stability of each PostgreSQL release greatly depends on your, the community,
+The stability of each PostgreSQL release greatly depends on you, the community,
to test the upcoming version with your workloads and testing tools in order to
-find bugs and regressions before the release of PostgreSQL 12. As this is a
-Beta, minor changes to database behaviors, feature details, and APIs are still
-possible. Your feedback and testing will help determine the final tweaks on the
-new features, so please test in the near future. The quality of user testing
-helps determine when we can make a final release.
+find bugs and regressions before the general availability of PostgreSQL 12. As
+this is a Beta, minor changes to database behaviors, feature details, and APIs
+are still possible. Your feedback and testing will help determine the final
+tweaks on the new features, so please test in the near future. The quality of
+user testing helps determine when we can make a final release.
A list of [open issues](https://wiki.postgresql.org/wiki/PostgreSQL_12_Open_Items)
is publicly available in the PostgreSQL wiki. You can