Postgres.app is a full-featured PostgreSQL installation packaged as a standard Mac app. It includes everything you need to get started: we’ve even included popular extensions like PostGIS for geo data and plv8 for JavaScript.

Postgres.app has a beautiful user interface and a convenient menu bar item. You never need to touch the command line to use it – but of course we do include all the necessary command line tools and header files for advanced users.

Postgres.app can install minor updates automatically, so you get bugfixes as soon as possible.

Installing Postgres.app

Download ➜ Move to Applications folder ➜ Double Click If you don't move Postgres.app to the Applications folder, you will see a warning about an unidentified developer and won't be able to open it.

Click "Initialize" to create a new server

Configure your $PATH to use the included command line tools (optional): sudo mkdir -p /etc/paths.d &&

echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp

Done! You now have a PostgreSQL server running on your Mac with these default settings:

Host localhost Port 5432 User your system user name Database same as user Password none Connection URL postgresql://localhost

To connect with psql, double click a database. To connect directly from the command line, type psql . If you’d rather use a graphical client, see below.

NOTE: These instructions assume that you’ve never installed PostgreSQL on your Mac before. If you have previously installed PostgreSQL using homebrew, MacPorts, the EnterpriseDB installer, consider removing other PostgreSQL installations first. We also have instructions for upgrading from older versions of Postgres.app.

Graphical Clients

Postgres.app includes psql , a versatile command line client for PostgreSQL. But it’s not the only option; there are plenty of great graphical clients available for PostgreSQL. Two popular tools are:

pgAdmin 4 is a feature rich open source PostgreSQL client. It has support for almost every feature in PostgreSQL. The only downside is that the cross-plattform UI really doesn’t live up to the expectations of a native Mac app.

Postico on the other hand, is a very modern Mac app. It’s made by the same people that maintain Postgres.app, and we think you’ll like it! We put a lot of effort into making it a joy to use. However, it doesn’t have the extensive feature set of pgAdmin, and it’s a commercial app rather than open source.

Aside from those two options, there are a lot more to choose from! Check the documentation for a list of amazing Mac apps for PostgreSQL.

How to connect

After your PostgreSQL server is up and running, you’ll probably want to connect to it from your application. Here’s how to connect to PostgreSQL from popular programming languages and frameworks:

PHP To connect from PHP, make sure that it supports PostgreSQL. The version included with macOS doesn't support PostgreSQL. We recommend MAMP for an easy way to install a current version of PHP that works. You can use PDO (object oriented): <?php $db = new PDO('pgsql:host=localhost'); $statement = $db->prepare("SELECT datname FROM pg_database"); $statement->execute(); while ($row = $statement->fetch()) { echo "<p>" . htmlspecialchars($row["datname"]) . "</p>

"; } ?> Or the pg_connect() functions (procedural): <?php $conn = pg_connect("postgresql://localhost"); $result = pg_query($conn, "SELECT datname FROM pg_database"); while ($row = pg_fetch_row($result)) { echo "<p>" . htmlspecialchars($row[0]) . "</p>

"; } ?> Python To connect to a PostgreSQL server with Python, please first install the psycopg2 library: pip install psycopg2 Django In your settings.py, add an entry to your DATABASES setting: DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql_psycopg2", "NAME": "[YOUR_DATABASE_NAME]", "USER": "[YOUR_USER_NAME]", "PASSWORD": "", "HOST": "localhost", "PORT": "", } } Flask When using the Flask-SQLAlchemy extension you can add to your application code: from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://localhost/[YOUR_DATABASE_NAME]' db = SQLAlchemy(app) SQLAlchemy from sqlalchemy import create_engine engine = create_engine('postgresql://localhost/[YOUR_DATABASE_NAME]') Ruby To install the pg gem, make sure you have set up your $PATH correctly (see Command-Line Tools), then execute the following command: sudo ARCHFLAGS="-arch x86_64" gem install pg Rails In config/database.yml, use the following settings: development: adapter: postgresql database: [YOUR_DATABASE_NAME] host: localhost Sinatra In config.ru or your application code: set :database, "postgres://localhost/[YOUR_DATABASE_NAME]" ActiveRecord Install the activerecord gem and require 'active_record', and establish a database connection: ActiveRecord::Base.establish_connection("postgres://localhost/[YOUR_DATABASE_NAME]") DataMapper Install and require the datamapper and do_postgres gems, and create a database connection: DataMapper.setup(:default, "postgres://localhost/[YOUR_DATABASE_NAME]") Sequel Install and require the sequel gem, and create a database connection: DB = Sequel.connect("postgres://localhost/[YOUR_DATABASE_NAME]") Java Download and install the PostgreSQL JDBC driver Connect to the JDBC URL jdbc:postgresql://localhost For more information see the official PostgreSQL JDBC documentation. C libpq is the native C client library for connecting to PostgreSQL. It's really easy to use: #include <libpq-fe.h> int main() { PGconn *conn = PQconnectdb("postgresql://localhost"); if (PQstatus(conn) == CONNECTION_OK) { PGresult *result = PQexec(conn, "SELECT datname FROM pg_database"); for (int i = 0; i < PQntuples(result); i++) { char *value = PQgetvalue(result, i, 0); if (value) printf("%s

", value); } PQclear(result); } PQfinish(conn); } Now compile the file with clang and run it: clang main.c -I$(pg_config --includedir) -L$(pg_config --libdir) -lpq ./a.out Swift You can just use the C API in Swift! First include libpq in your bridging header: #import <libpq-fe.h> Then make sure to link with libpq. On iOS, you'll need to build libpq yourself. On macOS you can use the system provided libpq (does not support SSL) or use libpq provided by Postgres.app by adding the following build settings: Other Linker Flags -lpq Header Search Paths /Applications/Postgres.app/Contents/Versions/latest/include Library Search Paths /Applications/Postgres.app/Contents/Versions/latest/lib Now you can use the libpq C library to connect to PostgreSQL: let conn = PQconnectdb("postgresql://localhost".cString(using: .utf8)) if PQstatus(conn) == CONNECTION_OK { let result = PQexec(conn, "SELECT datname FROM pg_database WHERE datallowconn") for i in 0 ..< PQntuples(result) { guard let value = PQgetvalue(result, i, 0) else { continue } let dbname = String(cString: value) print(dbname) } PQclear(result) } PQfinish(conn)

Support

We have a list of common problems in the troubleshooting section in the documentation.

For general questions concerning PostgreSQL, have a look at the official PostgreSQL documentation.

If you have a question concerning Postgres.app that is not answered by the Postgres.app documentation, you can ask @PostgresApp on Twitter, or open an issue on GitHub.

When reporting bugs, let us know which version of Postgres.app & macOS you are using, and be sure to include detailed error messages, even if your issue seems similar to another one.

License

Postgres.app, PostgreSQL, and its extensions are released under the PostgreSQL License. The released binaries also include OpenSSL (OpenSSL License), PostGIS (GPLv2), and plv8 (3 clause BSD).

Postgres.app is maintained by Jakob Egger and Chris Pastl. It was originally created by Mattt Thompson.