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.
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.
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.
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:
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";
}
?>
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.
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()
...
}
To connect to a PostgreSQL server with Python, please first install the psycopg2 library:
pip install psycopg2
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": "",
}
}
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)
from sqlalchemy import create_engine
engine = create_engine('postgresql://localhost/[YOUR_DATABASE_NAME]')
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
In config/database.yml, use the following settings:
development:
adapter: postgresql
database: [YOUR_DATABASE_NAME]
host: localhost
In config.ru or your application code:
set :database, "postgres://localhost/[YOUR_DATABASE_NAME]"
Install the activerecord gem and require 'active_record', and establish a database connection:
ActiveRecord::Base.establish_connection("postgres://localhost/[YOUR_DATABASE_NAME]")
Install and require the datamapper and do_postgres gems, and create a database connection:
DataMapper.setup(:default, "postgres://localhost/[YOUR_DATABASE_NAME]")
Install and require the sequel gem, and create a database connection:
DB = Sequel.connect("postgres://localhost/[YOUR_DATABASE_NAME]")
For more information see the official PostgreSQL JDBC documentation.
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
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)
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.
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.