Aufgabe 09 - Installation einer lokalen PostgreSQL-Datenbank
Aufgabe 09 - Installation einer lokalen PostgreSQL-Datenbank mit Docker
Abschnitt betitelt „Aufgabe 09 - Installation einer lokalen PostgreSQL-Datenbank mit Docker“Worum geht es?
Abschnitt betitelt „Worum geht es?“In dieser Übung entsteht die eigene Arbeitsumgebung: ein lokaler PostgreSQL-Server in Docker mit persistenten Daten (siehe Kapitel 5 - SQL-Grundlagen). Diese Datenbank wird in allen folgenden SQL-Übungen verwendet. Im Expertenteil werden Persistenz und Sicherheit tatsächlich überprüft.
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel 5 - SQL-Grundlagen (Einstieg).
- Eine Docker-Umgebung (Docker Desktop, Docker Engine oder Podman) auf dem HTL-Live-Image oder dem eigenen Betriebssystem.
- Ein PostgreSQL-Client (
psql, DBeaver, pgAdmin o. Ä.). - Grundlagen zum HTL-Live-Image: Übung A und Übung B.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie unterscheiden Datenbankserver und Datenbank-Client.
- Sie konfigurieren einen Container mit Image, Port-Mapping und Volume.
- Sie weisen die Persistenz der Daten über einen Neustart hinaus nach.
- Sie härten den Server ab und sichern Daten mit Backup und Restore.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: Docker prüfen und einen Container starten (Teil A).
- Reorganisation und Transfer: den Server konfigurieren und testen (Teile B und C).
- Reflexion, Problemlösung und Urteilsbildung: Persistenz und Sicherheit nachweisen und beurteilen (Teil D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Docker vorbereiten
Abschnitt betitelt „Teil A - Docker vorbereiten“- Zwischen HTL-Live-Image (VM) und nativem Betriebssystem entscheiden und ausreichende Rechte sicherstellen.
- Die Docker-Installation prüfen mit
docker versionunddocker ps.
Teil B - PostgreSQL-Container starten
Abschnitt betitelt „Teil B - PostgreSQL-Container starten“- Eine
docker-compose.ymlschreiben, die einenpostgres-Container startet, den Port mappt (z. B.5432:5432), ein Volume für die Daten einbindet und die UmgebungsvariablenPOSTGRES_PASSWORD,POSTGRES_USER,POSTGRES_DBsetzt. - Den Container mit
docker compose up -dstarten und mitdocker psunddocker logs <container>prüfen, dass er ohne kritische Fehler läuft.
Teil C - Verbindung und erster Test
Abschnitt betitelt „Teil C - Verbindung und erster Test“- Mit
psqloder einem GUI-Tool verbinden (Host, Port, Benutzer, Passwort, Datenbank). - Folgende Befehle ausführen und die Ergebnisse notieren:
CREATE DATABASE testdb;\c testdbSELECT version();CREATE TABLE test (id SERIAL PRIMARY KEY, name TEXT NOT NULL);INSERT INTO test (name) VALUES ('First entry');SELECT * FROM test;Teil D - Expertenteil: Persistenz und Sicherheit nachweisen
Abschnitt betitelt „Teil D - Expertenteil: Persistenz und Sicherheit nachweisen“-
Persistenz beweisen: Den Container mit
docker compose downstoppen und entfernen (das Volume bleibt), dann mitdocker compose up -dneu starten. Prüfen, ob die Tabelletestund ihr Datensatz noch vorhanden sind. Anschließend das Experiment mit einem anonymen Container ohne Volume wiederholen und den Unterschied dokumentieren. In zwei bis drei Sätzen erklären, warum das Volume den Unterschied macht. -
Least Privilege: Einen zusätzlichen Datenbankbenutzer
app_useranlegen, der kein Superuser ist, und ihm nur die Rechte auftestdbgeben, die eine Anwendung braucht (CONNECT, Rechte auf die Tabellen). Mitapp_userverbinden und nachweisen, dass einDROP DATABASE testdb;scheitert, einSELECTauftestaber funktioniert.CREATE ROLE app_user WITH LOGIN PASSWORD '...';GRANT CONNECT ON DATABASE testdb TO app_user;-- in testdb:GRANT SELECT, INSERT, UPDATE, DELETE ON test TO app_user; -
Port absichern: Das Port-Mapping so ändern, dass der Server nur lokal erreichbar ist (
127.0.0.1:5432:5432statt5432:5432). In zwei Sätzen begründen, warum ein offen ins Netz gebundener Datenbankport gefährlich ist. -
Backup und Restore: Mit
pg_dumpein Backup vontestdberstellen, danach eine frische Datenbankrestoredbanlegen und das Backup mitpsqleinspielen. Nachweisen, dass die Tabelletestsamt Datensatz inrestoredbankommt.Terminal-Fenster docker compose exec -T postgres pg_dump -U <user> testdb > backup_testdb.sqldocker compose exec -T postgres psql -U <user> -c "CREATE DATABASE restoredb;"docker compose exec -T postgres psql -U <user> -d restoredb < backup_testdb.sql
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Worin unterscheidet sich ein Datenbankserver von einem Datenbank-Client?
- Wozu dient ein Volume, und was passiert ohne Volume nach einem Neustart?
- Was bedeutet das Port-Mapping
5432:5432, und was ändert127.0.0.1:5432:5432? - Warum sollte eine Anwendung nicht mit dem Superuser auf die Datenbank zugreifen?
- Welche zwei Schritte gehören zu einem logischen Backup und Restore mit
pg_dump/psql?
- Eine Dokumentation (Word oder PDF) mit gewählter Umgebung,
docker-compose.yml, konfigurierten Einstellungen (Port, Benutzer, Datenbank, ohne Klartext-Passwort) und den aufgetretenen Problemen samt Lösung. - Screenshots: laufender Container in
docker ps, erfolgreiche Verbindung,SELECT * FROM test;, der Persistenz-Nachweis aus Teil D sowie der fehlgeschlageneDROP DATABASEmitapp_user.
HTL Villach, Schuljahr 2025-2026,
https://www.htl-villach.at