Zurück zum Blog

PostgreSQL installieren: Anleitung für Linux-Server

PostgreSQL installieren unter Linux: Rollen und Datenbanken anlegen, Zugriff über pg_hba.conf, Fernzugriff, Backups mit pg_dump und Performance-Tuning.

Nodesty-Team5 Min. LesezeitServer
Der Schriftzug PostgreSQL mit Roles, pg_hba und pg_dump auf dunklem Nodesty-Hintergrund

PostgreSQL ist eine leistungsfähige, quelloffene relationale Datenbank, bei der Datenintegrität großgeschrieben wird. Dank fortgeschrittener SQL-Funktionen, JSON-Unterstützung, der Geodaten-Erweiterung PostGIS und einer robusten Transaktionsverwaltung ist sie in Django-, Ruby-on-Rails-, Laravel- und Node.js-Projekten sehr beliebt. PostgreSQL auf dem eigenen Server zu installieren dauert nur wenige Minuten; was Sie wirklich verstehen müssen, ist, wie Rollen und Zugriffsregeln funktionieren.

In dieser Anleitung erklären wir, wie Sie PostgreSQL unter Ubuntu, Debian und AlmaLinux installieren, Rollen und Datenbanken anlegen, den Zugriff über pg_hba.conf steuern, sich sicher aus der Ferne verbinden, Backups erstellen und die wichtigsten Performance-Einstellungen vornehmen.

PostgreSQL und MariaDB im Vergleich

EigenschaftPostgreSQLMariaDB / MySQL
StärkenKomplexe Abfragen, Datenintegrität, JSON, PostGISEinfache, schnelle, leselastige Aufgaben
Typischer EinsatzDjango, Rails, moderne Node.js- und Laravel-ProjekteWordPress, PHP-Anwendungen, FiveM
BenutzermodellRollen und Regeln in pg_hba.confZuordnung von Benutzer und Host
Standardport54323306

Verwenden Sie die Datenbank, die Ihre Anwendung empfiehlt. Die Installation von MariaDB erklären wir in unserer Anleitung MySQL und MariaDB installieren.

PostgreSQL unter Ubuntu und Debian installieren

Nachdem Sie sich per SSH mit Ihrem Server verbunden haben:

sudo apt update
sudo apt install postgresql
sudo systemctl status postgresql

Das Repository der Distribution installiert die PostgreSQL-Version, die mit der jeweiligen Version der Distribution ausgeliefert wird. Wenn Sie eine neuere Hauptversion brauchen, können Sie das offizielle APT-Repository von PostgreSQL hinzufügen.

Unter AlmaLinux und Rocky Linux:

sudo dnf install postgresql-server
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql

Rollen und die erste Verbindung

In PostgreSQL heißen Benutzer Rollen. Bei der Installation werden eine Administratorrolle namens postgres und ein gleichnamiger Benutzer des Betriebssystems angelegt. Bei lokalen Verbindungen wird standardmäßig die Peer-Authentifizierung verwendet: Der Name Ihres Betriebssystem-Benutzers muss mit dem Namen der Rolle übereinstimmen. Als Administrator verbinden Sie sich deshalb so:

sudo -u postgres psql

Befehle, die Sie in psql häufig brauchen:

BefehlWas er tut
\lListet die Datenbanken auf
\duListet die Rollen auf
\c datenbankWechselt zu einer anderen Datenbank
\dtListet die Tabellen der aktuellen Datenbank auf
\qBeendet psql

Datenbank und Rolle anlegen

Legen Sie für jede Anwendung eine eigene Rolle und eine Datenbank an, die nur dieser Rolle gehört:

CREATE ROLE app WITH LOGIN PASSWORD 'ein-starkes-passwort';
CREATE DATABASE app OWNER app;

Die Rolle, der die Datenbank gehört, kann darin Tabellen anlegen und verwalten, hat aber keinen Zugriff auf Ihre anderen Datenbanken. Die Verbindungsadresse Ihrer Anwendung sieht so aus:

postgresql://app:ein-starkes-passwort@127.0.0.1:5432/app

Um sich auf der Kommandozeile mit dieser Rolle zu verbinden, ergänzen Sie -h 127.0.0.1; so melden Sie sich statt per Peer mit Passwort über TCP an:

psql -h 127.0.0.1 -U app app

Zugriffsregeln mit pg_hba.conf

Wer sich von wo und mit welcher Methode verbinden darf, legt die Datei pg_hba.conf fest. Unter Ubuntu und Debian liegt sie unter /etc/postgresql/<version>/main/pg_hba.conf. Jede Zeile ist eine Regel, und es gilt die erste Regel, die von oben nach unten passt:

# TYP   DATENBANK   BENUTZER   ADRESSE           METHODE
local   all         postgres                     peer
local   all         all                          peer
host    all         all        127.0.0.1/32      scram-sha-256
host    all         all        ::1/128           scram-sha-256
  • local: Verbindungen über den Unix-Socket, also vom Server selbst aus.
  • host: Verbindungen über TCP/IP.
  • scram-sha-256: Sichere Authentifizierung mit Passwort. Verwenden Sie diese Methode statt des alten md5.

Laden Sie die Einstellungen nach einer Änderung der Datei neu:

sudo systemctl reload postgresql

Sicherer Fernzugriff

Empfohlen ist ein SSH-Tunnel. PostgreSQL lauscht weiterhin nur auf dem Server selbst, und der Port 5432 wird nie im Internet freigegeben:

ssh -L 5433:127.0.0.1:5432 benutzer@203.0.113.10

Solange dieser Befehl läuft, verbinden Sie sich mit pgAdmin oder DBeaver mit der Adresse 127.0.0.1:5433 auf Ihrem eigenen Computer. Beide Werkzeuge bieten in den Verbindungseinstellungen auch eine fertige Option für SSH-Tunnel.

Wenn eine direkte Verbindung nötig ist (etwa für eine Anwendung auf einem anderen Server):

  1. Ändern Sie in der Datei postgresql.conf die Zeile listen_addresses = 'localhost' in listen_addresses = '*'.
  2. Fügen Sie der Datei pg_hba.conf eine Regel nur für die IP-Adresse dieses Servers hinzu:
    host    app    app    198.51.100.7/32    scram-sha-256
    
  3. Starten Sie PostgreSQL neu und öffnen Sie den Port in der Firewall nur für diese Adresse:
    sudo systemctl restart postgresql
    sudo ufw allow from 198.51.100.7 to any port 5432 proto tcp
    

Wenn Sie den Port 5432 für alle öffnen, wird Ihr Server automatisierten Angriffen ausgesetzt, die Passwörter durchprobieren. Wie Ports funktionieren, erklären wir in unserem Artikel Was ist ein Port?.

Backup und Wiederherstellung

pg_dump erstellt ein konsistentes Backup einer laufenden Datenbank, ohne sie zu sperren. Das komprimierte Custom-Format (-Fc) ist sowohl klein als auch flexibel:

sudo -u postgres pg_dump -Fc app > app-$(date +%F).dump

So stellen Sie das Backup wieder her:

pg_restore -h 127.0.0.1 -U app -d app --clean app-2026-10-20.dump

Rollen und andere serverweite Einstellungen sind nicht im Backup von pg_dump enthalten; sichern Sie sie separat mit pg_dumpall --globals-only. Wie Sie Backups mit Cron automatisieren und unabhängig vom Server aufbewahren, erklären wir in unserem Artikel Server Backup.

Wichtige Performance-Einstellungen

Die Standardeinstellungen von PostgreSQL sind für sehr kleine Server gewählt. Diese Einstellungen in der Datei postgresql.conf machen einen großen Unterschied:

shared_buffers = 2GB
effective_cache_size = 6GB
work_mem = 16MB
maintenance_work_mem = 512MB

Die Beispielwerte gelten für einen Server mit 8 GB RAM, auf dem nur die Datenbank läuft:

  • shared_buffers: Der eigene Cache von PostgreSQL. Etwa ein Viertel des RAM ist ein guter Startwert.
  • effective_cache_size: Teilt dem Abfrageplaner mit, wie viel Arbeitsspeicher einschließlich des Dateicaches des Betriebssystems zur Verfügung steht; üblich ist ein Wert zwischen der Hälfte und drei Vierteln des RAM.
  • work_mem: Der Arbeitsspeicher, der jeder Sortier- und Join-Operation zugewiesen wird. Zu hohe Werte können bei vielen gleichzeitigen Abfragen den Arbeitsspeicher aufbrauchen.

Starten Sie PostgreSQL nach den Änderungen neu. Um langsame Abfragen zu finden, schreibt die Einstellung log_min_duration_statement = 500 alle Abfragen ins Log, die länger als 500 Millisekunden dauern; mit EXPLAIN ANALYZE sehen Sie, warum eine Abfrage langsam ist.

Nodesty-Server für PostgreSQL

Die Performance einer Datenbank hängt stark vom Arbeitsspeicher und von der Geschwindigkeit des Speichers ab. Die AMD EPYC 7763 vServer von Nodesty eignen sich mit ihrem großen RAM dafür, große Datenbanken im Arbeitsspeicher zu halten, die AMD Ryzen 9 9950X vServer mit ihrer hohen Single-Core-Leistung für Anwendungen, die schnell antworten müssen. Beide Pakete umfassen NVMe-Speicher, DDoS-Schutz durch nShield und kostenlose tägliche Backups, die 7 Tage lang aufbewahrt werden.

Häufig gestellte Fragen

Sollte ich PostgreSQL oder MariaDB verwenden?

Wählen Sie die Datenbank, die Ihre Software empfiehlt. WordPress und viele PHP-Anwendungen erwarten MySQL oder MariaDB. Für neue Projekte mit komplexen Abfragen, JSON-Daten, Geodaten und strenger Datenintegrität ist PostgreSQL eine starke Wahl. Beide sind Open Source und kostenlos.

Wie lautet das Passwort des Benutzers postgres?

Bei einer Standardinstallation hat der Benutzer postgres kein Passwort. Sie verbinden sich auf dem Server mit dem Befehl sudo -u postgres psql über den Benutzer des Betriebssystems (Peer-Authentifizierung). Legen Sie für Ihre Anwendungen statt postgres immer eine eigene Rolle mit Passwort an.

Woher kommt der Fehler „Peer authentication failed“?

Bei lokalen Verbindungen erwartet PostgreSQL standardmäßig, dass der Benutzername des Betriebssystems mit der Datenbankrolle übereinstimmt. Wenn Sie sich mit einer anderen Rolle verbinden, ergänzen Sie die Verbindung um -h 127.0.0.1, um sich über TCP mit Passwort anzumelden, oder ändern Sie die lokale Regel in der Datei pg_hba.conf.

Wie aktualisiere ich PostgreSQL auf eine neue Version?

Bei einem Upgrade auf eine neue Hauptversion sind die Datendateien nicht direkt mit der neuen Version kompatibel. Bei kleinen Datenbanken ist es am einfachsten, mit pg_dumpall einen Dump der alten Version zu erstellen und in die neue Version einzuspielen; bei großen Datenbanken verwenden Sie das Werkzeug pg_upgrade. Erstellen Sie in beiden Fällen vorher ein vollständiges Backup.

Wie verbinde ich mich sicher von außen mit der Datenbank?

Am sichersten ist ein SSH-Tunnel; damit verbinden Sie sich mit Werkzeugen wie pgAdmin oder DBeaver, ohne den Port 5432 im Internet freizugeben. Ist eine direkte Verbindung nötig, ändern Sie die Einstellung listen_addresses, fügen Sie der Datei pg_hba.conf eine Regel nur für die IP-Adresse hinzu, die sich verbinden soll, und öffnen Sie den Port in der Firewall nur für diese Adresse.

Wie viel RAM braucht PostgreSQL?

Eine kleine Anwendung kommt mit einigen hundert MB aus. Die Performance hängt vor allem von shared_buffers und dem Dateicache des Betriebssystems ab; wenn häufig genutzte Daten im Arbeitsspeicher bleiben, werden Abfragen spürbar schneller. Auf einem Server, auf dem nur die Datenbank läuft, ist etwa ein Viertel des RAM ein guter Startwert für shared_buffers.

Nodesty

Über den Autor

Nodesty-Team · Infrastruktur und Support

Das Nodesty-Team betreibt unsere Server, unser Netzwerk und unseren DDoS-Schutz im Alltag und beantwortet Support-Anfragen rund um die Uhr. Diese Ratgeber entstehen aus dieser Arbeit.

Verwandte Artikel

Starte deinen Server jetzt.

Erstellen, wachsen und skalieren Sie Ihre Projekte grenzenlos auf der Premium-Infrastruktur von Nodesty.

                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                                                                                                                            
                                                                                                                             ············································                                                   
                                                ··································································································..........···························                                     
                                       ················..........................................................................................................................··············                             
                                  ·············.................::::::::::::::::::::::::::::::::::::::::::::::....................:::::::::::::::::::::::::::::::::::::::................···········                        
                             ············................:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::............·········                     
                         ············.................:::::::::::::::::::::::::::::::::::::::::::::::::::------------::::::::::::::::::::::::::::::----------------:::::::::::::::::::::..........········                  
                    ············......................::::::::::::::::::::::::::::::::::::------------------------------------------------------------------------------------:::::::::::::.........········                
                ··········.............................................::::::::::::::::::-------------==========================================-----------------------------------:::::::::::........·······               
             ········..................:.....................................::::::::::--------=======+++++++++++++++++++++++++++++++++++++=========================------------------::::::::::.......·······              
           ······.........::::::::::::::::::::................................:::::::-----=====++++xxxxxx**************************xxxxxxxxx++++++++++++++===================------------::::::::.......·······             
          ·····.......:::::::::::::::::::::::::::.............................:::::----===+++xxx****%%%%&&&&&&#############&&&&&&&%%%%%*******xxxxxxxx++++++++++++++==============----------:::::::......······             
         ····......::::::::-------------:::::::::::..........................::::---===+++xx***%%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@####&&&&&%%%%*******xxxxxxxxx+++++++++++++===========--------::::::......·····             
        ····.....:::::::--------------------:::::::::.......................::::---===++xxx**%%&&&###@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&%%%%%********xxxxxxxxxxx++++++++++++========------::::::.....······            
        ····.....:::::--------------------------::::::::....................::::---===++xx***%%&&&####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@###&&&&&%%%%%**********xxxxxxxxxxxxx+++++++++=======------:::::.....·····            
        ····....::::::-------=============---------:::::::::................:::::---===+++xx***%%%&&&#####@@@@@@@@@@@@@@@@@@@@@@@@@#####&&&&&%%%%%%*************xxxxxxxxxxxxxx+++++++++======-----:::::....·····            
         ····....:::::-------================---------:::::::::...............:::::----===++++xxx***%%%%&&&&&&#################&&&&&&%%%%%%%*******************xxxxxxxxxxxxxxxxx++++++++======----:::::....·····            
         ·····....:::::--------=================---------::::::::::..............:::::::-----====+++++xxxxxx**************************xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx++++++++=====-----::::....·····            
          ·····.....:::::--------=================----------:::::::::::.................:::::::::-------=============++++++++++++++++++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxx++++++++======-----::::....·····            
            ·····.....:::::::----------===========-------------::::::::::::.........................::::::::::::::::::------------------=============+++++++++++++++++++++++++++++++++=======-----::::.....·····            
              ······......:::::::---------------------------------:::::::::::::........................................:::::::::::::::-----------============+++++++++++++++++++++========------:::::.....·····             
                 ······........:::::::::---------------------------:::::::::::::::::...........................................:::::::::::::------------=============================--------::::::.....······              
                    ·········.........:::::::::::::::-------------::::::::::::::::::::::::.......................................::::::::::::::::--------------------------------------::::::::......·······                
                          ··········............::::::::::::::::::::::::::::::::::::::::::::::::::................................::::::::::::::::::::::::::-------------:::::::::::::::.........········                   
                                  ············..................:::::::::::::::::::::::::::::::::::::::::::.........................:::::::::::::::::::::::::::::::::::::................···········                        
                                             ················.............................................................................................................·················                                 
                                                           ······················................................................................···························                                                
                                                                               ·········································································