PostgreSQL Installation & Grundlagen
PostgreSQL ist eine leistungsstarke, objektrelationale Open-Source-Datenbank. Sie wird oft für komplexe Anwendungen, GIS-Daten und als MySQL-Alternative eingesetzt.
Installation
# Ubuntu/Debian
sudo apt update
sudo apt install postgresql postgresql-contrib -y
# Status prüfen
sudo systemctl status postgresql
# Version prüfen
psql --version
Erster Zugriff
# Als postgres-Benutzer anmelden
sudo -u postgres psql
# In der PostgreSQL-Shell:
postgres=# \conninfo
postgres=# \q
Benutzer und Datenbank erstellen
sudo -u postgres psql
-- Benutzer erstellen
CREATE USER meinuser WITH PASSWORD 'sicheres_passwort';
-- Datenbank erstellen
CREATE DATABASE meine_db OWNER meinuser;
-- Alle Rechte vergeben
GRANT ALL PRIVILEGES ON DATABASE meine_db TO meinuser;
-- Benutzer auflisten
\du
-- Datenbanken auflisten
\l
\q
Oder via Kommandozeile
sudo -u postgres createuser --interactive meinuser
sudo -u postgres createdb -O meinuser meine_db
Verbindung testen
# Als Benutzer verbinden
psql -U meinuser -d meine_db -h localhost
# Oder
PGPASSWORD=sicheres_passwort psql -U meinuser -d meine_db -h localhost
Wichtige psql-Befehle
| Befehl |
Beschreibung |
\l |
Datenbanken auflisten |
\c dbname |
Zu Datenbank wechseln |
\dt |
Tabellen anzeigen |
\d tablename |
Tabellenschema anzeigen |
\du |
Benutzer anzeigen |
\q |
Beenden |
\? |
Hilfe |
Remote-Zugriff erlauben
sudo nano /etc/postgresql/16/main/postgresql.conf
# Ändern:
listen_addresses = '*'
sudo nano /etc/postgresql/16/main/pg_hba.conf
# Am Ende hinzufügen (für bestimmtes Subnetz):
host all all 192.168.1.0/24 scram-sha-256
# Oder für alle (Vorsicht!):
host all all 0.0.0.0/0 scram-sha-256
sudo systemctl restart postgresql
sudo ufw allow 5432/tcp
Backup und Restore
# Einzelne Datenbank sichern
pg_dump -U meinuser -d meine_db > backup.sql
# Mit Komprimierung
pg_dump -U meinuser -d meine_db | gzip > backup.sql.gz
# Alle Datenbanken
pg_dumpall -U postgres > all_databases.sql
# Wiederherstellen
psql -U meinuser -d meine_db < backup.sql
# Komprimiert
gunzip -c backup.sql.gz | psql -U meinuser -d meine_db
Performance-Tuning
sudo nano /etc/postgresql/16/main/postgresql.conf
# Für Server mit 4GB RAM:
shared_buffers = 1GB
effective_cache_size = 3GB
maintenance_work_mem = 256MB
work_mem = 64MB
max_connections = 100
PHP mit PostgreSQL
sudo apt install php-pgsql -y
sudo systemctl restart php8.3-fpm
<?php
$conn = pg_connect("host=localhost dbname=meine_db user=meinuser password=sicheres_passwort");
if (!$conn) {
die("Verbindung fehlgeschlagen");
}
$result = pg_query($conn, "SELECT * FROM users");
while ($row = pg_fetch_assoc($result)) {
print_r($row);
}
pg_close($conn);
?>
PostgreSQL vs. MySQL
| Aspekt |
PostgreSQL |
MySQL |
| SQL-Standard |
Strenger |
Flexibler |
| Komplexe Queries |
Besser |
Gut |
| JSON-Support |
Sehr gut |
Gut |
| Verbreitung |
Wachsend |
Höher |
Weitere Hilfe