Dieses Dokument ist eine Schritt-für-Schritt-Anleitung, um PostgreSQL in Docker einzurichten, einschließlich der Initialisierung mit SQL-Daten und Benutzerrechten.
- 🐋 Docker installiert
- 📄 SQL-Skriptdateien zur Initialisierung der Datenbank und Benutzerrechte
- 📚 Grundlegendes Verständnis von Docker und PostgreSQL
Erstelle ein Verzeichnis, um alle benötigten Dateien abzulegen:
mkdir postgres-docker
cd postgres-docker
Füge folgende Dateien und Verzeichnisse hinzu:
postgres-docker/
├── Dockerfile
└── init-source/
├── 00_tables.sql
├── 01_data.sql
└── 02_users.sql
00_tables.sql
: Definition der Tabellenstruktur01_data.sql
: Initialdaten02_users.sql
: Benutzer und Rollen mit Berechtigungen
Erstelle eine Datei Dockerfile
im Verzeichnis postgres-docker
mit folgendem Inhalt:
# Verwende das offizielle PostgreSQL-Image
FROM postgres:latest
# Kopiere die SQL-Skripte in das Initialisierungsverzeichnis
COPY init-source/*.sql /docker-entrypoint-initdb.d/
Funktionen dieses Dockerfiles:
- Verwendet das offizielle PostgreSQL-Image.
- Kopiert die SQL-Skripte in das Verzeichnis
/docker-entrypoint-initdb.d/
, wo PostgreSQL sie bei der Initialisierung automatisch ausführt.
Baue das Docker-Image mit folgendem Befehl:
docker build -t postgres-with-data .
Falls du den Build-Cache umgehen möchtest, verwende:
docker build --no-cache -t postgres-with-data .
postgres-docker/
befindest.
Starte den Container mit dem folgenden Befehl:
docker run -p 5432:5432 --name my_postgres -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=admin -e POSTGRES_DB=postgreProjekt -d postgres-with-data
Parameterbeschreibung:
-p 5432:5432
: Mappt den PostgreSQL-Port auf den Host.--name my_postgres
: Benennt den Container.-e POSTGRES_USER
,-e POSTGRES_PASSWORD
,-e POSTGRES_DB
: Setzt Benutzer, Passwort und Datenbanknamen.-d
: Führt den Container im Hintergrund aus.
Prüfe die Container-Logs:
docker logs my_postgres
Falls die Initialisierung fehlschlägt, entferne den Container und das Volume, und erstelle sie neu:
docker rm -f my_postgres
docker volume prune -f
docker run -p 5432:5432 --name my_postgres -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=admin -e POSTGRES_DB=postgreProjekt -d postgres-with-data
docker exec -it my_postgres psql -U admin -d postgreProjekt
Prüfe die Datenbankinhalte mit PostgreSQL-Befehlen:
\l -- Listet alle Datenbanken
\c postgreProjekt -- Verbindet mit der Datenbank
\dt -- Zeigt alle Tabellen
- Öffne DBeaver.
- Gehe zu File > New > Database Connection.
- Wähle PostgreSQL und klicke auf Next.
- Host:
localhost
- Port:
5432
- Database:
postgreProjekt
- Username:
admin
- Password:
admin
Klicke auf Test Connection, um die Verbindung zu überprüfen. Wenn die Verbindung erfolgreich ist, klicke auf OK, um sie zu speichern.
Sobald die Verbindung hergestellt ist:
-
Navigiere in der linken Baumansicht zu deiner Datenbank (
postgreProjekt
). -
Öffne den SQL-Editor, um Abfragen auszuführen, z. B.:
-
Alle Datenbanken auflisten:
SELECT datname FROM pg_database;
-
Alle Tabellen in der aktuellen Datenbank anzeigen:
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
-
Daten einer bestimmten Tabelle anzeigen:
SELECT * FROM <table_name>;
Ersetze
<table_name>
durch den Namen der Tabelle, die du abfragen möchtest.
-
Die Datei 02_users.sql
definiert Rollen und Benutzer für die Datenbank. Hier ein Überblick:
- Rollen erstellt:
admin_role
,editor_role
,viewer_role
. - Benutzer definiert:
dominikmeyer
(Admin)petrameyer
(Editor)romygruber
(Viewer)
- Automatische Rechte auf zukünftige Tabellen sichergestellt.
- Validierung durch Abfrage der Rollen-Zuordnung:
SELECT r1.rolname AS role_name, r2.rolname AS member_name
FROM pg_roles r1
LEFT JOIN pg_auth_members ON r1.oid = pg_auth_members.roleid
LEFT JOIN pg_roles r2 ON r2.oid = pg_auth_members.member;
Kriterium | PostgreSQL | Oracle |
---|---|---|
Datentypen | Moderne Typen wie JSONB , ARRAY , UUID |
Proprietäre Typen wie VARCHAR2 , NUMBER |
Constraint-Syntax | Flexibel, SQL-Standardkonform | Umfangreiche Features für grosse, komplexe Tabellen |
Komplexität | Gut geeignet für einfache bis mittlere Strukturen, horizontal skalierbar | Starke vertikale Skalierung, optimiert für grosse Unternehmensdatenbanken |
Anwendungsbereiche | Ideal für Startups, Cloud-Umgebungen, Open-Source-Projekte | Perfekt für grosse Unternehmen, Hochverfügbarkeit und komplexe Geschäftsmodelle |
- PostgreSQL: Modern, flexibel, kosteneffizient. Perfekt für Startups und Cloud-Umgebungen.
- Oracle: Leistungsstark, aber teuer. Entwickelt für Grossunternehmen mit hohen Anforderungen.