Until now, Postgres was only available to Heroku customers for use with Heroku platform apps. Last week Heroku launched a new Postgres service that can be used from anywhere and with any Postgres client. Apps can connect from Heroku, Google App Engine, Microsoft Azure, Cloud Foundry, EC2, or from your local computer. Matthew Soldo explained:
With measured service uptime of four nines (99.99%), and designed data durability of eleven nines (99.999999999%), the service is trustworthy for mission-critical data. As of today, these production-quality Heroku Postgres databases are independently available for use from any cloud platform, provisioned instantly, metered by the second, and without contract.
This kind of operational metrics is achieved with Continuous Protection which is a set of technologies designed to prevent data loss even in the face of catastrophic failures. Changes to the data or schema are written to PostgreSQL’s WAL (write-ahead-log). In the event of unrecoverable hardware failure, these logs can be automatically 'replayed' to recover the database to within seconds of its last known state. Heroku Postgres also creates multiple, geographically distributed copies of all data changes as they are written. These copies are constantly checked for consistency and corruption.
Heroku Postgres is running off-the-shelf, community PostgreSQL - unforked and unmodified. This means that any standard libpq client will run readily and apps can be migrated back to an on premise database if needed.
Databases are multi-ingress and can be used from anywhere and with any Postgres client. PostgreSQL is supported by most modern programming languages - including Perl, Python, Ruby, Scala, Go, Tcl, C/C++, Java, .Net, and Javascript. It is also available via ODBC.
It is possible to fork a database: Heroku creates a byte-for-byte clone of databases with a single command. This is useful for instance for testing new schema migrations or perform some load testing activities.
Horizontal scalability is achieved with Followers which are read-only asynchronous replicas of a database. Followers stay up-to-date with changes to the database and can be queried. Followers are traditionally used for real-time analytics and to handle expensive queries.