Postgres.app

Der schnellste Weg zu PostgreSQL am Mac

Postgres.app enthält eine vollständige Installation von PostgreSQL die keine Wünsche offen lässt. Mit dabei sind auch populäre Erweiterungen wie zB PostGIS für Geo-Daten und plv8 für Javascript.

Postgres.app hat eine innovative Benutzeroberfläche und ist über ein eigenes Statusmenü steuerbar. Die Verwendung des Terminals ist nicht notwendig, für fortgeschrittene User_innen sind jedoch sämtliche Command Line Tools und Header Dateien inkludiert.

Postgres.app hat eine automatische Updatefunktion. Neue Versionen werden zeitgleich mit neuen Releases von PostgreSQL bereitgestellt.

Die aktuelle Version erfordert macOS 10.10 oder neuer und wird mit den neuesten PostgreSQL Versionen ausgeliefert (10.1, 9.6.6, und 9.5.10). Wir bieten aber auch andere Versionen zum Download an.

Installation

  • Download   ➜   in den Programme-Ordner bewegen   ➜   Doppelklick

    Wenn du Postgres.app nicht in den Programme-Ordner bewegst, erscheint beim Öffnen eine Fehlermeldung dass „die Identität des Entwicklers nicht bestätigt werden konnte“.

  • Klicke auf "Initialize" um einen neuen Server zu erstellen

  • Optional: Um die Command Line Tools nutzen zu können, musst du deinen $PATH konfigurieren:

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

Fertig! Auf deinem Mac läuft nun ein PostgreSQL Server mit diesen Einstellungen:

Host localhost
Port 5432
User dein System User Name
Database gleich wie User
Passwort keines
Connection URL postgresql://localhost

Um eine Verbindung zu einer Datenbank herzustellen, doppelklicke auf das gewünschte Datenbank-Symbol. Wenn du dich mittels psql direkt aus dem terminal verbinden möchtest, gib psql ein. Eine Liste mit graphischen Datenbank-Clients findest du im folgenden Abschnitt.

WICHTIG: Diese Anleitung setzt voraus, dass du PostgreSQL zuvor noch nicht auf deinem Mac installiert hast. Falls du schon eine andere Version von PostgreSQL installiert hast (zb. homebrew, MacPorts, EnterpriseDB), dann empfehlen wir vorher die andere PostgreSQL-Installation zu entfernen. Wir haben auch eine Anleitung zum Upgrade von einer alten Version von Postgres.app.

Graphische Clients

Neben dem Terminal-Befehl psql gibt es noch eine Reihe graphischer Client-Apps, mit denen du dich mit deiner PostgreSQL Datenbank verbinden kannst. Zwei populäre Apps sind:

pgAdmin 4 ist ein Cross-Plattform Open Source PostgreSQL Client, welcher nahezu alle Features von PostgreSQL unterstützt. Der einzige Nachteil ist das etwas altmodische UI, welches nicht den Erwartungen einer modernen und nativen Mac App entspricht.

Postico ist eine moderne Mac App. Es wird von den selben Personen entwickelt, die auch Postgres.app betreuen. Wir haben bei der Entwicklung von Postico sehr viel Zeit investiert um dir bei der Verwendung von PostgreSQL viel Freude zu bereiten.

Abgesehen von diesen beiden Optionen findest du in der Dokumentation eine Liste mit zahlreichen anderen Mac Apps für PostgreSQL.

Verbindung zum Server

Nachdem dein PostgreSQL Server aufgesetzt wurde möchtest du vielleicht eine Verbindung von deiner Applikation aus herstellen. Die folgende Liste enthält einige Code-Beispiele für populäre Programmiersprachen und Frameworks:

PHP

Stelle zunächst sicher, dass deine PHP-Version PostgreSQL unterstützt. Da die in macOS integrierte PHP-Version PostgreSQL nicht unterstützt, empfehlen wir MAMP. Dieses kostenlose Programmpaket enthält neben den aktuellen PHP-Version auch viele Erweiterungen und ist sehr einfach zu installieren.

Verbindung mittels PDO (objektorientiert):

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

Verbindung mittels pg_connect() (prozedural):

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

Um via Python mit einem PostgreSQL verbinden zu können muss zunächst die psycopg2 library installiert werden:

pip install psycopg2
		

Django

Füge einen Eintrag zu DATABASES in settings.py hinzu:

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "[YOUR_DATABASE_NAME]",
        "USER": "[YOUR_USER_NAME]",
        "PASSWORD": "",
        "HOST": "localhost",
        "PORT": "",
    }
}
		

Flask

Wenn du die Flask-SQLAlchemy Extension verwendest kannst du die Library folgendermaßen einbinden:

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

Bevor du das pg gem installierst musst du sicherstellen, dass dein $PATH korrekt gesetzt wurde (siehe Command-Line Tools). Führe im Anschluss folgenden Befehl aus:

sudo ARCHFLAGS="-arch x86_64" gem install pg

Rails

Füge folgende Parameter in config/database.yml ein:

development:
    adapter: postgresql
    database: [YOUR_DATABASE_NAME]
    host: localhost
		

Sinatra

Füge folgende Parameter in config.ru oder deinen Programmcode ein:

set :database, "postgres://localhost/[YOUR_DATABASE_NAME]"
		

ActiveRecord

Installiere das activerecord gem, binde 'active_record' ein und stelle eine Verbindung zum PostgreSQL Server her:

ActiveRecord::Base.establish_connection("postgres://localhost/[YOUR_DATABASE_NAME]")
		

DataMapper

Installiere und binde die datamapper und do_postgres gems ein und stelle eine Verbindung zum PostgreSQL Server her:

DataMapper.setup(:default, "postgres://localhost/[YOUR_DATABASE_NAME]")
		

Sequel

Installiere und binde das sequel gem ein und stelle eine Verbindung zum PostgreSQL Server her:

DB = Sequel.connect("postgres://localhost/[YOUR_DATABASE_NAME]")
		
Java
  1. Lade den PostgreSQL JDBC driver herunter und installiere diesen.
  2. Verbinde zur JDBC URL mittels jdbc:postgresql://localhost

Mehr Informationen findest du in der offiziellen PostgreSQL JDBC Dokumentation.

C

libpq ist die native C client library für PostgreSQL und ist sehr einfach zu verwenden:

#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);
}

Kompiliere das file mit clang und führe es aus:

clang main.c -I$(pg_config --includedir) -L$(pg_config --libdir) -lpq
./a.out
Swift

Swift erlaubt dir einen einfachen Zugriff auf das C API. Zunächst musst du libpq im bridging header einbinden:

#import <libpq-fe.h>

Stelle sicher dass du dein Projekt mit libpq linkst.

In iOS musst du libpq selbst bauen.

In macOS kannst du entweder die libpq des Systems (kein SSL Support) oder direkt die libpq von Postgres.app verwenden. Füge folgende build settings hinzu:

Other Linker Flags -lpq
Header Search Paths /Applications/Postgres.app/Contents/Versions/latest/include
Library Search Paths /Applications/Postgres.app/Contents/Versions/latest/lib

Jetztz kannst du auf die libpq C library zugreifen:

let conn = PQconnectdb("postgresql://localhost")
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

Eine Liste mit häufigen Fehlermeldungen findest du in der Dokumentation unter Troubleshooting.

Für allgemeine Fragen zu PostgreSQL solltest du einen Blick in die offizielle PostgreSQL Dokumentation werfen.

Solltest du eine Frage zu Postgres.app haben, die nicht in der Postgres.app Dokumentation beantwortet ist, kannst du entweder auf Twitter unter @PostgresApp eine Frage stellen, oder auf Github ein neues Issue eröffnen.

Wenn du uns Bugs übermitteln möchtest: Gib immer die Version von Postgres.app und macOS an und stelle sicher dass dein Bug Report IMMER eine detaillierte Fehlerbeschreibung enthält!

Lizenz

Postgres.app, PostgreSQL und alle verwendeten Extensions sind unter der PostgreSQL License veröffentlicht. Die veröffentlichten binaries enthalten auch noch OpenSSL (OpenSSL Lizenz), PostGIS (GPLv2), und plv8 (3 clause BSD).

Postgres.app wird derzeit von Jakob Egger und Chris Pastl weiterentwickelt und betreut. Postgres.app wurde ursprünglich von Mattt Thompson entwickelt.