Zum Hauptinhalt springen
Zurück zur Kategorie

PostgreSQL Installation und Grundlegende Verwaltung

PostgreSQL-Installation auf Ubuntu/Debian und RHEL/CentOS, Benutzer und Datenbanken erstellen, grundlegende SQL-Befehle, Remote-Verbindung konfigurieren und Backup-Strategien. Schritt-fur-Schritt-Anleitung.

Lesezeit: 15 min Datenbank
postgresqldatenbankinstallationubuntucentossqlbackuplinux
Autor
REXE Teknoloji Network & Security Team
Redaktion
REXE Teknoloji Technical Editorial
Erstveröffentlichung
Letzte Aktualisierung

PostgreSQL Installation und Grundlegende Verwaltung

PostgreSQL ist eines der leistungsstarksten Open-Source-Datenbankverwaltungssysteme der Welt. Mit ACID-Konformitat, erweiterten Datentypen, JSON-Unterstutzung und starker Erweiterbarkeit deckt es ein breites Anwendungsspektrum ab - von Unternehmensanwendungen bis hin zu kleinen Projekten. Diese Anleitung behandelt die Installation, grundlegende Verwaltung und Konfiguration von PostgreSQL.

Installation auf Ubuntu/Debian

Installation aus dem Paket-Repository

Auf Ubuntu- und Debian-Systemen kann PostgreSQL aus den offiziellen Repositories installiert werden:

hljs bash
# Paketliste aktualisieren
apt update

# PostgreSQL installieren
apt install -y postgresql postgresql-contrib

# Dienststatus pruefen
systemctl status postgresql

# Automatischen Start aktivieren
systemctl enable postgresql

Offizielles PostgreSQL-Repository verwenden

Fur eine neuere Version konnen Sie das offizielle PostgreSQL-Repository hinzufugen:

hljs bash
# Erforderliche Tools installieren
apt install -y curl ca-certificates

# PostgreSQL-Signaturschlussel hinzufugen
curl -fsSL https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor -o /etc/apt/trusted.gpg.d/postgresql.gpg

# Repository hinzufugen
echo 'deb https://apt.postgresql.org/pub/repos/apt '$(lsb_release -cs)'-pgdg main' > /etc/apt/sources.list.d/pgdg.list

# Aktualisieren und installieren
apt update
apt install -y postgresql-16

Installation auf RHEL/CentOS/AlmaLinux

hljs bash
# Offizielles PostgreSQL-Repository hinzufugen
dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Eingebautes PostgreSQL-Modul deaktivieren
dnf -qy module disable postgresql

# PostgreSQL 16 installieren
dnf install -y postgresql16-server postgresql16-contrib

# Datenbank initialisieren
/usr/pgsql-16/bin/postgresql-16-setup initdb

# Dienst starten und aktivieren
systemctl enable --now postgresql-16

# Dienststatus pruefen
systemctl status postgresql-16

PostgreSQL-Version verifizieren

hljs bash
psql --version
# Ausgabe: psql (PostgreSQL) 16.x

# Dienstinformationen
psql -U postgres -c 'SELECT version();'

Zum postgres-Benutzer wechseln und verbinden

Bei der Installation wird der Systembenutzer postgres erstellt. So verbinden Sie sich mit der Datenbank:

hljs bash
# Zum postgres-Systembenutzer wechseln
su - postgres

# Mit der PostgreSQL-Konsole verbinden
psql

# Direkt als Root verbinden
sudo -u postgres psql

# Mit einer bestimmten Datenbank verbinden
sudo -u postgres psql -d mydb

Benutzer und Datenbanken erstellen

Neuen Benutzer erstellen

hljs sql
-- In der PostgreSQL-Konsole
-- Neuen Benutzer erstellen
CREATE USER appuser WITH PASSWORD 'StarkesPasswort123!';

-- Superuser erstellen (mit Vorsicht verwenden)
CREATE USER adminuser WITH PASSWORD 'AdminPass!' SUPERUSER;

-- Benutzer auflisten
\du

-- Benutzerpasswort andern
ALTER USER appuser WITH PASSWORD 'NeuesPasswort456!';

-- Datenbankerstell-Berechtigung vergeben
ALTER USER appuser CREATEDB;

Datenbank erstellen und Berechtigungen vergeben

hljs sql
-- Datenbank erstellen
CREATE DATABASE myapp OWNER appuser ENCODING 'UTF8' LC_COLLATE 'de_DE.UTF-8' LC_CTYPE 'de_DE.UTF-8' TEMPLATE template0;

-- Datenbanken auflisten
\l

-- Mit einer Datenbank verbinden
\c myapp

-- Vollstandige Berechtigungen vergeben
GRANT ALL PRIVILEGES ON DATABASE myapp TO appuser;

-- Schema-Berechtigung (PostgreSQL 15+)
GRANT ALL ON SCHEMA public TO appuser;

-- Datenbank loschen
DROP DATABASE alte_datenbank;

Grundlegende SQL-Befehle

hljs sql
-- Tabelle erstellen
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  email VARCHAR(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Daten einfugen
INSERT INTO users (username, email) VALUES ('hans', 'hans@example.com');

-- Daten abfragen
SELECT * FROM users;
SELECT username, email FROM users WHERE id = 1;

-- Daten aktualisieren
UPDATE users SET email = 'neu@example.com' WHERE id = 1;

-- Daten loschen
DELETE FROM users WHERE id = 5;

-- Tabellen auflisten
\dt

-- Tabellenstruktur anzeigen
\d users

-- Index erstellen
CREATE INDEX idx_users_email ON users(email);

Konfiguration der Remote-Verbindung

Standardmassig akzeptiert PostgreSQL nur Verbindungen von localhost. Fur den Remote-Zugriff mussen zwei Dateien bearbeitet werden.

1. postgresql.conf bearbeiten

hljs bash
# Konfigurationsdatei-Speicherort finden
sudo -u postgres psql -c 'SHOW config_file;'

# Bearbeiten
nano /etc/postgresql/16/main/postgresql.conf
hljs ini
# listen_addresses-Zeile andern
listen_addresses = '*'

# Port (Standard 5432)
port = 5432

2. pg_hba.conf bearbeiten

hljs bash
nano /etc/postgresql/16/main/pg_hba.conf
# Zeile fur Remote-Verbindungen hinzufugen (am Ende der Datei)
# TYPE  DATABASE  USER      ADDRESS         METHOD
host    myapp     appuser   192.168.1.0/24  scram-sha-256
host    all       all       0.0.0.0/0       scram-sha-256

3. Dienst neu starten und Firewall konfigurieren

hljs bash
# Dienst neu starten
systemctl restart postgresql

# Port mit UFW offnen
ufw allow 5432/tcp

# Mit iptables
iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

Den PostgreSQL-Port (5432) dem Internet auszusetzen ist ein Sicherheitsrisiko. Verwenden Sie nach Moglichkeit einen SSH-Tunnel oder VPN. Falls Remote-Zugriff erforderlich ist, beschranken Sie ihn auf bestimmte IP-Adressen.

Backup und Wiederherstellung

Backup mit pg_dump

hljs bash
# Einzelne Datenbank sichern
pg_dump -U postgres myapp > myapp_backup.sql

# Komprimiertes Format (schnellere Wiederherstellung)
pg_dump -U postgres -Fc myapp > myapp_backup.dump

# Alle Datenbanken sichern
pg_dumpall -U postgres > all_databases.sql

# Von einem Remote-Server sichern
pg_dump -h 192.168.1.100 -U postgres myapp > myapp_remote.sql

Wiederherstellung aus Backup

hljs bash
# Aus SQL-Format wiederherstellen
psql -U postgres myapp < myapp_backup.sql

# Aus komprimiertem Format wiederherstellen
pg_restore -U postgres -d myapp myapp_backup.dump

# Alle Datenbanken wiederherstellen
psql -U postgres < all_databases.sql

Automatisches Backup mit Cron

hljs bash
# Crontab bearbeiten
crontab -e

# Jede Nacht um 02:00 Uhr Backup erstellen
0 2 * * * pg_dump -U postgres myapp | gzip > /backup/myapp_$(date +\%Y\%m\%d).sql.gz

# Backups alteren als 30 Tage loschen
0 3 * * * find /backup -name 'myapp_*.sql.gz' -mtime +30 -delete

Dienstverwaltung

hljs bash
# Dienst starten
systemctl start postgresql

# Dienst stoppen
systemctl stop postgresql

# Dienst neu starten
systemctl restart postgresql

# Konfiguration neu laden (kein Neustart erforderlich)
systemctl reload postgresql

# Protokolle anzeigen
journalctl -u postgresql -f
tail -f /var/log/postgresql/postgresql-16-main.log

Fazit

PostgreSQL ist ein zuverlassiges und hochleistungsfahiges Datenbanksystem. Vernachlassigen Sie nach der Installation nicht die Sicherheitskonfiguration, fuhren Sie regelmasige Backups durch und konfigurieren Sie die Authentifizierungsmethoden fur den Remote-Zugriff korrekt. PostgreSQL lauft problemlos auf REXE-Servern und liefert zuverlassige Leistung unter hohem Datenverkehr.

Häufig gestellte Fragen

Was ist der Hauptunterschied zwischen PostgreSQL und MySQL?

PostgreSQL bietet vollstandige ACID-Konformitat, erweiterte Datentypen (JSON, JSONB, Arrays, hstore), Window-Funktionen und starke Erweiterbarkeit. MySQL bietet im Allgemeinen einfachere Installation und Verwaltung, wahrend PostgreSQL bei komplexen Abfragen und grossen Datensatzen besser abschneidet. Fur neue Projekte wird PostgreSQL empfohlen.

Wie andere ich das Passwort des postgres-Benutzers?

Verbinden Sie sich mit sudo -u postgres psql mit der PostgreSQL-Konsole und fuhren Sie dann ALTER USER postgres WITH PASSWORD 'NeuesPasswort'; aus. Um das Systembenutzerpasswort zu andern, verwenden Sie sudo passwd postgres.

Ich kann keine Remote-Verbindung herstellen. Was soll ich pruefen?

Pruefen Sie drei Dinge: 1) Vergewissern Sie sich, dass listen_addresses = '*' in postgresql.conf gesetzt ist, 2) Pruefen Sie, ob Sie eine host-Zeile fur die entsprechende IP in pg_hba.conf hinzugefugt haben, 3) Vergewissern Sie sich, dass Port 5432 in der Firewall geoffnet ist (ufw status oder iptables -L). Denken Sie daran, den Dienst nach Anderungen neu zu starten.

Wie zuverlassig ist ein mit pg_dump erstelltes Backup?

pg_dump erstellt einen konsistenten Snapshot und ist sehr zuverlassig. Verwenden Sie fur grosse Datenbanken -Fc (benutzerdefiniertes Format); dieses Format unterstutzt parallele Wiederherstellung und erzeugt kleinere Dateigrossen. Fur kritische Systeme sollten Sie auch fortgeschrittenere Backup-Methoden wie WAL-Archivierung oder Streaming-Replikation in Betracht ziehen.

Welchen Port verwendet PostgreSQL und wie andere ich ihn?

PostgreSQL verwendet standardmassig Port 5432. Um ihn zu andern, aktualisieren Sie die Zeile port = 5432 in /etc/postgresql/16/main/postgresql.conf mit der gewunschten Portnummer und starten Sie den Dienst neu. Vergessen Sie nicht, pg_hba.conf und Ihre Verbindungszeichenfolgen ebenfalls zu aktualisieren.

Konnen mehrere PostgreSQL-Versionen auf demselben Server laufen?

Ja, jede Version kann auf einem anderen Port laufen. Zum Beispiel kann PostgreSQL 14 auf dem Standardport 5432 und PostgreSQL 16 auf Port 5433 laufen. Jede Version hat ihr eigenes Datenverzeichnis und ihre eigene Diensteinheit. Verwenden Sie den Befehl pg_lsclusters, um alle vorhandenen Cluster aufzulisten.

Verwandte Artikel

phpMyAdmin Installation und sicherer Zugriff

Schritt-fur-Schritt phpMyAdmin Installation auf Apache und Nginx, SSL-Konfiguration, Benutzerverwaltung, IP-Einschraenkungen und Sicherheitshaertung.

16 min
phpmyadminmysqlmariadb
NetzwerkverkehrEingehend GbpsAusgehend Gbps