Grundlagen
Alle ansehen- 01 Was ist PostgreSQL? Open-Source-Datenbank mit über 35 Jahren Geschichte
- 02 Architektur-Überblick Wie Postgres intern aufgebaut ist
- 03 Installation unter Ubuntu PostgreSQL unter Ubuntu Linux einrichten
- 04 Installation unter macOS Drei Wege, Postgres auf dem Mac einzurichten
- 05 Installation im Docker Postgres als Container für reproduzierbare Setups
- 06 psql – Einstieg in den PostgreSQL-Client Der offizielle CLI-Client für PostgreSQL
- 07 GUI-Tools im Vergleich Welcher Client passt zu welchem Workflow?
- 08 Konfigurationsdateien Die drei zentralen Config-Dateien von Postgres
Server-Administration
Alle ansehen- 01 Rollen und Privilegien Das Postgres-Rollenmodell auf einen Blick
- 02 Rollen-Attribute Was eine Rolle darf, bevor man irgendetwas grantet
- 03 Gruppen-Rollen und Inheritance Rechte über Mitgliedschaft sauber verteilen
- 04 Ownership und Besitz Wem gehört was — und was heißt das überhaupt?
- 05 GRANT und REVOKE Privilegien vergeben und entziehen
- 06 Default Privileges Privilegien für Objekte, die es noch gar nicht gibt
- 07 Predefined Roles Postgres bringt fertige Rollen mit
- 08 Schemas und search_path Namespaces in Postgres und wie Postgres Tabellen findet
- 09 Tablespaces Wann eigene Tablespaces wirklich Sinn ergeben
- 10 Encoding und Collation Wie Postgres Zeichen kodiert und sortiert
- 11 Benutzer und Datenbank erstellen Neuen Benutzer und Datenbank in PostgreSQL anlegen
- 12 Benutzer-Rolle entfernen Benutzer-Rolle in PostgreSQL entfernen
- 13 Benutzer-Passwort ändern Passwort einer Rolle setzen, ändern, sicher hinterlegen
- 14 Webapp-Benutzer mit Least-Privilege Eine Web-Anwendung sicher an Postgres anbinden
- 15 Read-Only-Benutzer anlegen Lese-Zugang für Reporting und BI-Tools
- 16 Backup-Benutzer anlegen Dedizierte Rolle für pg_dump und Streaming-Replikation
- 17 Gruppe mit Mitgliedern anlegen Mehrere User über eine Gruppe verwalten
- 18 Rechte auf bestehende Objekte Rechte nachträglich an alle Objekte vergeben
- 19 Aktive Sessions beenden Hängende Connections sauber abräumen
- 20 Datenbank umbenennen und Owner wechseln Datenbank-Identität sauber ändern
Datentypen
Alle ansehen- 01 Übersicht der Datentypen Welcher Postgres-Typ wofür?
- 02 Numerische Typen Welcher Zahlen-Typ wofür?
- 03 SERIAL vs. IDENTITY Welche Auto-Increment-Variante wann?
- 04 text, varchar und char Welcher String-Typ ist die richtige Wahl?
- 05 boolean Wahrheitswerte mit drei Zuständen
- 06 Datum, Zeit und Zeitstempel Warum timestamptz fast immer richtig ist
- 07 UUID 128-Bit-IDs ohne zentrale Vergabe
- 08 Arrays Listen-Spalten ohne Zwischen-Tabelle
- 09 Ranges Wertebereiche als eigener Typ
- 10 Enum Aufzählungstypen mit fester Werte-Liste
- 11 bytea und Large Objects Wann Binär-Daten in die DB gehören (und wann nicht)
- 12 Geometrie und PostGIS Punkte, Linien, Flächen — und warum PostGIS
JSON & JSONB
Alle ansehen- 01 json vs. jsonb Zwei JSON-Typen — und einer ist fast immer richtig
- 02 JSONB-Operatoren Mit JSON-Werten arbeiten — der komplette Operator-Werkzeugkasten
- 03 JSONB Pfad-Queries Komplexe JSON-Selektionen mit Pfad-Ausdrücken
- 04 JSONB-Felder updaten Werte in jsonb gezielt setzen, hinzufügen, entfernen
- 05 JSONB-Indexe JSONB-Suchen schnell machen
- 06 JSON_TABLE Strukturiertes JSON wie eine Tabelle querien
SQL-Grundlagen
Alle ansehen- 01 SELECT und WHERE Daten lesen und filtern — die Basis von SQL
- 02 INSERT, UPDATE, DELETE Daten ändern — und worauf man dabei achtet
- 03 RETURNING-Klausel Schreibvorgang plus Lesen in einem Statement
- 04 UPSERT mit ON CONFLICT Insert oder Update — atomar, in einem Statement
- 05 MERGE-Statement SQL-Standard-Variante zu UPSERT
- 06 ORDER BY, LIMIT, OFFSET Sortieren, kürzen, paginieren — und warum OFFSET teuer wird
- 07 NULL und Three-Valued Logic Wie NULL die Logik in SQL verändert
- 08 COPY für Bulk-Import Hunderttausende Zeilen in Sekunden importieren
Joins & Subqueries
Alle ansehen- 01 INNER und OUTER Join Daten aus mehreren Tabellen verknüpfen
- 02 OUTER JOINs im Detail Was OUTER Joins wirklich tun — und wo's schiefgeht
- 03 CROSS und LATERAL Join Spezial-Joins: alles mit allem, oder pro Zeile eine Subquery
- 04 Self-Join Eine Tabelle mit sich selbst joinen
- 05 Subqueries in WHERE Verschachtelte SELECTs als Filter
- 06 EXISTS vs. IN vs. JOIN Drei Wege zum selben Ziel — wann was?
Aggregation & Window Functions
Alle ansehen- 01 GROUP BY und HAVING Zeilen zu Gruppen zusammenfassen und filtern
- 02 Standard-Aggregat-Funktionen Die wichtigsten Aggregate auf einen Blick
- 03 FILTER-Klausel Aggregate mit eingebautem WHERE pro Spalte
- 04 GROUPING SETS, ROLLUP und CUBE Mehrere Aggregations-Ebenen in einer Query
- 05 Window-Functions Überblick Aggregate ohne Gruppen-Kollaps
- 06 Window-Frame: ROWS, RANGE, GROUPS Welche Zeilen sieht das Window genau?
- 07 ROW_NUMBER, RANK, DENSE_RANK Drei Wege, Zeilen zu nummerieren — wann was
- 08 LEAD, LAG, FIRST_VALUE, LAST_VALUE Wert aus anderer Zeile in derselben Query
CTEs & Rekursion
Alle ansehenConstraints & Schema-Design
Alle ansehen- 01 Primary Key Eindeutige Identifikation einer Zeile
- 02 Foreign Key Verweise zwischen Tabellen abgesichert
- 03 Unique-Constraint Eindeutigkeit ohne Primary-Key-Status
- 04 CHECK-Constraint Domain-Logik direkt in der Tabelle erzwingen
- 05 NOT NULL und Defaults Pflichtfelder und sinnvolle Voreinstellungen
- 06 Exclusion Constraints Überschneidende Bereiche datenbankseitig blockieren
- 07 Generated Columns Berechnete Spalten als Schema-Feature
- 08 ALTER TABLE ohne Downtime Schema-Migrationen auf großen Live-Tabellen
Indexes
Alle ansehen- 01 B-tree-Index Der Default-Index für Gleichheit und Ranges
- 02 Hash-Index Nur Gleichheit, dafür kompakter
- 03 GIN-Index Der Index für Mehrwert-Spalten
- 04 GiST-Index Der Index für räumliche Daten und Range-Logik
- 05 BRIN-Index Klein und schnell für sortierte Massendaten
- 06 Partial Index Index nur für die relevanten Zeilen
- 07 Expression-Index Index auf berechneten Werten
- 08 Covering Index mit INCLUDE Index-Only-Scans ohne Tabellen-Zugriff
- 09 Index CONCURRENTLY erstellen Index ohne Tabellen-Lock anlegen