In case you somehow missed it, PostgreSQL 9.1 is out. There's a lot of good new features in this release, but I want to talk about the two things which have me really excited about 9.1. The two are related. First, PostgreSQL development is going faster than ever. Second, we have passed the other relational databases and our new features are primarily innovations: things nobody has seen before.

First, version 9.1 has more new major features than any previous PostgreSQL release. That's why there's a huge bullet list in the official announcement; those are all major features. In my professional practice, we've had more clients go to testing, or even to production, on the 9.1 betas than we've ever seen before. No matter how you use Postgres, 9.1 has at least one compelling feature for you.

This is a symptom of the huge development momentum in the community. In fact, our biggest community management problem is dealing fairly and promptly with the very large number of patch submissions we receive, well over 200 per year now. This is a good problem to have, as frustrating as it can be sometimes.

More excitingly, version 9.1 contains several innovations in the world of databases. The features below are ones which we are the first database system to have, or were in a race to be first. That's not "first open source database", but "first database system of any kind".

Serializable Snapshot Isolation: this new algorithm and system for managing conflicts between concurrent complex transactions takes away "deadlock frustration" by making sure that if a transaction runs correctly in isolation, it will run or fail cleanly concurrently. Thanks to Dan and Kevin, we are the first RDBMS to have this, and I look forward to working on TPCE using SSI.

Writetable Common Table Expressions: (i.e. "psychedelic queries") give developers the option of performing stored-procedure like mini-programs in a single query without using a stored procedure language, and letting cascading updates succeed or fail as a statement. We can use this to revolutionize ORMs. While other database systems have had some form of wCTEs before, our implementation goes much further than anyone else's.

K-Nearest Neighbor Indexing (KNN-GiST): this new form of index allows searching on "X is near Y", greatly simplifying and speeding up spatial, text matching, and future types of queries. Microsoft has this as well now, we were racing them to see who released first.

Transaction-Controlled Synchronous Replication: a Simon Riggs innovation, the ability to decide on a per-transaction basis whether a particular write should be synchronously or asynchronously replicated lets admins make a more granular decision about durability vs. performance than any other DBMS.

SE-Postgres: offers tight integration with SE-Linux, letting security-focused sysadmins set policies which apply to all data, inside or outside the database. PostgreSQL is the only DBMS offering this level of integration, and we expect adoption by security agencies because of it.

What all of the above shows is that PostgreSQL has gone well beyond "catching up" to major proprietary database vendors and is working hard at surpassing them in every respect (except maybe price). The innovation doesn't stop there, either, since folks are adding new stuff to 9.2 already:

Range Types: this new generic class of data types (by Jeff Davis) represents linear ranges such as a range of time, a series of integers or numerics, or an alpha filing set. Many operations, including uniqueness, an be performed on the range type which would have required slow procedural logic before. Nobody else has this.

Space-Partitioned Trees: yet another new index type from Oleg & Teodor, these indexes optimize prefix, suffix and substring searches, as well as enabling other complex index types. Invented just for PostgreSQL.

There will undoubtely be more to come before 9.2 comes out next year. If you want to know what's new with relational databases, then follow us!

The commentors above pretty much nailed it. Most application objects have their data in a tree of some kind; using wCTEs the entire tree can be updated as one statement, instead of needing to go back and forth to the application code.