Hero image.

PostgreSQL, originally named Postgres, is a powerful cross-platform database management system that is based on the object-relational database model. Postgres is distributed free of charge and is open source, allowing you to view and modify its code as you see fit.

Being a largely relational database, PostgreSQL uses the SQL standard. In fact, Postgres was renamed to PostgreSQL in order to highlight this conformance. Unlike other database management systems, Postgres not only implements SQL, but it also improves upon it by extending the SQL language with additional capabilities that aim to make large-scale complicated workloads easier to carry out. As a result of these modifications, some SQL queries may perform differently when used in a Postgres database or may have minor syntax differences.

Every Postgres database is able to handle common data types such as CHAR, VARCHAR, BOOLEAN, INTEGER, NUMERIC, TIMESTAMP, DATE, and INTERVAL. In addition, you can store complex objects such as geometric shapes, network addresses, JSON entries, bit strings, and text searches. On top of all that, you can store large binary objects like images, audio, and video inside a Postgres database.

All PostgreSQL transactions are ACID-compliant, which means that they are designed with Atomicity, Consistency, Isolation, and Durability in mind. What is more, you will find support for joins, foreign keys, triggers, views, and stored procedures. This makes every Postgres database highly extensible and very reliable.

Speaking of extensibility, PostgreSQL allows you to define your own custom data types and functions. There is also support for plugins, so potentially all parts of a Postgres database can be augmented and modified. And the best part is that you can use the programming language you are most comfortable with. PostgreSQL supports many popular protocols and programming languages out of the box, such as Java, Python, Perl, Go, Ruby, C, C++, ODBC, and TCL.

Lastly, Postgres databases are unique in that all sessions are process-based and not threaded. In other words, each new connection lives in its own process instead of a thread. This is great for multi-CPU servers since the various sessions will be automatically spread across all available CPU cores.