Thursday 9 August 2012

PostgreSQL: The Multi-Model Database Server

I'd like to change the way we describe PostgreSQL.

Calling PostgreSQL and Object Relational database is misleading and years out of date. Yes, PostgreSQL is Relational and the project follows the SQL Standard very closely, but that's not all it does.

PostgreSQL supports all of the following:

* Relational
* Object Relational
* Nested Relational (record types)
* Array Store
* Key-Value Store (hstore)
* Document Store (XML, JSON)

and 9.2 adds

* Range Types

So what do we call it?

We support multiple models, so I guess we should call it a "Multi-Model Database".

The good thing here is that we support them all, in one platform, allowing you to join data together no matter what shape the data is held in.

Which means that PostgreSQL is a great General Purpose database and a great default choice for use by applications. Stonebraker has spoken out against the idea of a General Purpose database, but his interest is in bringing VC-funded startups to market, not in supporting production systems and catering to a range of business requirements with flexibility and speed. The reality is that if you pick a specialised database that fits your current requirements you're completely stuck when things change, like they always do.

3 comments:

  1. "The reality is that if you pick a specialised database that fits your current requirements you're completely stuck when things change, like they always do."

    So very true. Great blog post!

    ReplyDelete
  2. This is exactly what an "object-relational database" is supposed to be, isn't it?

    From Wikipedia:
    "In addition, just as with proper relational systems, it [an object-relational database] supports extension of the data model with custom data-types and methods."

    http://en.wikipedia.org/wiki/Object-relational_database

    ReplyDelete
  3. One more comment: I admit that the term "object-relational database" is quite old-fashioned and not very descriptive. For marketing purposes, a better term is probably necessary. Something like "extensible relational database" or "NewSQL relational database".

    ReplyDelete