Postgres.app

The easiest way to get started with PostgreSQL on the Mac

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

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, some features may not work (more info)

  • 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>\n";
}
?>

Or the pg_connect() functions (procedural):

<?php
$conn = pg_connect("host=localhost");
$result = pg_query($conn, "SELECT datname FROM pg_database");
while ($row = pg_fetch_row($result)) {
    echo "<p>" . htmlspecialchars($row[0]) . "</p>\n";
}
?>
Go

To connect to postgres from Golang, you can download this library.

go get github.com/jackc/pgx/v5

Then you can connect like this:


package main

import (
  "database/sql"
  "fmt"
  _ "github.com/jackc/pgx/v5/stdlib"
)

func main() {
  dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", 
    <host>, <port>, <user>, <password>, <dbname>)
  db, err := sql.Open("pgx", dsn)
  if err != nil {
    panic(err)
  }
  defer db.Close()

  ...
}
			

Be sure to replace the placeholders with your actual connection details.

GORM

If you are using GORM, you can connect like this:


package main

import (
  "gorm.io/driver/postgres"
  "gorm.io/gorm"
)

func main() {
  dsn := fmt.Sprintf("host=%s port=%s user=%s password=%s dbname=%s sslmode=disable", 
    <host>, <port>, <user>, <password>, <dbname>)
  db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})
  if err != nil {
    panic(err)
  }
  defer db.Close()

  ...
}
			
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_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
  1. Download and install the PostgreSQL JDBC driver
  2. 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\n", 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, please 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 and PostgreSQL are released under the PostgreSQL License. The released binaries also include extensions and dependencies that are licensed under various open-source licences.

Postgres.app is maintained by Jakob Egger and Tobias Bussmann. It was originally created by Mattt Thompson.