CodeGym /Kurse /SQL SELF /Arbeiten mit temporären Tabellen in PostgreSQL

Arbeiten mit temporären Tabellen in PostgreSQL

SQL SELF
Level 18 , Lektion 3
Verfügbar

Temporäre Tabellen sind Tabellen, die nur während deiner aktuellen Session oder Transaktion existieren. Sobald deine Session vorbei ist (oder die Transaktion abgeschlossen wird), verschwinden die temporäre Tabelle und ihre Daten wie Spuren im Sand. Sie sind perfekt für das kurzfristige Speichern von Daten, Zwischenberechnungen oder das Vorbereiten von Daten für komplexe Operationen.

Wofür braucht man die?

  • Temporäres Speichern von Daten: Zum Beispiel hast du komplexe Berechnungen mit Daten, die du in mehreren Schritten machen musst. Anstatt die Haupttabelle zu belasten, kannst du temporäre Tabellen nutzen.
  • Datenanalyse: Du kannst Daten aus mehreren Quellen sammeln, sie verarbeiten und dann die temporäre Tabelle nach der Analyse löschen.
  • Optimierung von komplexen Queries: Manchmal ist es besser, eine Query in mehrere Schritte mit temporären Tabellen zu splitten, um sie schneller auszuführen.
  • Risiken minimieren: Es besteht keine Gefahr, versehentlich echte Tabellen zu zerschießen – temporäre Tabellen sind komplett isoliert.

Das Coole an temporären Tabellen: Die Daten darin siehst nur du! Andere User der Datenbank können da nicht reinschauen, was temporäre Tabellen super sicher für Experimente macht.

Temporäre Tabellen erstellen

Das Erstellen einer temporären Tabelle ist fast wie das Erstellen einer normalen Tabelle, nur dass du das Keyword TEMP oder TEMPORARY dazu packst.

Syntax:

CREATE TEMP TABLE table_name (
    column_name data_type constraints,
    ...
);

Easy, oder? Die temporäre Tabelle verschwindet automatisch, wenn deine Session vorbei ist.

Als Beispiel erstellen wir eine temporäre Tabelle, um Daten über Studierende zu speichern:

CREATE TEMP TABLE temp_students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INTEGER CHECK (age > 0)
);

Jetzt haben wir die temporäre Tabelle temp_students, in die du Daten einfügen und damit arbeiten kannst wie mit einer normalen Tabelle. Nur nicht vergessen – sie verschwindet, sobald du die Session schließt.

Temporäre Tabelle aus einer Query erstellen

Manchmal hast du keinen Bock, die Struktur der temporären Tabelle von Hand zu beschreiben – vor allem, wenn du einfach das Ergebnis einer Query speichern und damit arbeiten willst. Dann hilft dir diese Form:

CREATE TEMP TABLE tabellenname AS
SELECT ...;

Diese Konstruktion erstellt nicht nur die temporäre Tabelle, sondern füllt sie direkt mit Daten aus der Query.

Angenommen, du willst Studierende speichern, die in keinen Kurs eingeschrieben sind:

CREATE TEMP TABLE temp_unregistered_students AS
    SELECT s.id, s.name
    FROM students s
    LEFT JOIN enrollments e ON s.id = e.student_id
    WHERE e.student_id IS NULL;

Jetzt hast du die Tabelle temp_unregistered_students, die du in anderen Teilen deines Scripts nutzen kannst – ohne die Query zu wiederholen.

Warum das Ganze?

  • Du musst die Spalten und Typen nicht explizit angeben – PostgreSQL erkennt sie automatisch aus dem SELECT-Ergebnis.
  • Du kannst temporäre Daten mehrfach nutzen, ohne sie immer wieder neu zu berechnen.
  • Das ist besonders praktisch für Reports, ETL-Operationen und Analytics.

Temporäre Tabellen in Transaktionen

Du kannst temporäre Tabellen auch innerhalb von Transaktionen erstellen. Dann werden sie automatisch gelöscht, sobald die Transaktion vorbei ist. Das ist besonders praktisch, wenn du sicherstellen willst, dass temporäre Daten nicht in der DB bleiben. Mehr zu Transaktionen gibt’s ein paar Level später – bis dahin: Genieß das entspannte Leben :P

Beispiel:

BEGIN;

CREATE TEMP TABLE temp_transactions (
    transaction_id SERIAL PRIMARY KEY,
    amount NUMERIC(10, 2) NOT NULL,
    status VARCHAR(50)
);

INSERT INTO temp_transactions (amount, status)
VALUES (100.50, 'Ausstehend');

-- Lass uns die Daten anschauen
SELECT * FROM temp_transactions;

COMMIT;
-- Jetzt ist die Tabelle temp_transactions weg!

Wenn du statt COMMIT ein ROLLBACK machst, werden die Daten und die Tabelle auch gelöscht.

Temporäre Tabellen im echten Einsatz

Beispiel 1: Temporäres Zusammenführen von Daten

Angenommen, wir haben zwei Tabellen: students und courses. Wir wollen rausfinden, welche Studierenden noch nicht in Kursen eingeschrieben sind. Wir können die Daten erst in eine temporäre Tabelle sammeln und dann analysieren.

CREATE TEMP TABLE temp_unregistered_students AS
	SELECT s.id, s.name
	FROM students s
	LEFT JOIN enrollments e ON s.id = e.student_id
	WHERE e.student_id IS NULL;

-- Jetzt können wir mit der temporären Tabelle temp_unregistered_students arbeiten.
SELECT * FROM temp_unregistered_students;

Beispiel 2: Daten für einen Report vorbereiten

Manchmal musst du Daten aus mehreren Tabellen sammeln, sie umwandeln und einen Report vorbereiten. Temporäre Tabellen sind dafür super geeignet.

CREATE TEMP TABLE temp_sales AS
	SELECT p.product_id, p.name, SUM(s.quantity) AS total_quantity
	FROM products p
	JOIN sales s ON p.product_id = s.product_id
	GROUP BY p.product_id, p.name;

-- Temporäre Tabelle mit dem Ergebnis erstellt. Jetzt kannst du darauf einen Report bauen:
SELECT name, total_quantity FROM temp_sales WHERE total_quantity > 50;

Tricks und Besonderheiten von temporären Tabellen

Benennung von temporären Tabellen: Wenn du schon eine normale Tabelle mit dem Namen students hast, kannst du trotzdem eine temporäre Tabelle mit demselben Namen erstellen! Die temporäre Tabelle hat in deiner Session Vorrang. Aber Vorsicht, das kann verwirren, wenn du vergisst, dass du mit einer temporären Tabelle arbeitest.

Optimierung von temporären Tabellen: PostgreSQL erstellt automatisch Indizes für Spalten mit PRIMARY KEY oder UNIQUE-Constraint, auch in temporären Tabellen. Wenn du die Arbeit mit den Daten beschleunigen willst, kannst du auch manuell Indizes hinzufügen:

CREATE INDEX idx_temp_students_age ON temp_students (age);

Temporäre Tabelle löschen: Wenn du eine temporäre Tabelle vor dem Ende der Session löschen willst, nutze DROP TABLE:

DROP TABLE temp_students;

Datenmenge in temporären Tabellen: Temporäre Tabellen werden im RAM gespeichert (wenn genug Ressourcen da sind), was sie richtig schnell macht. Aber denk dran: Zu viele Daten können anfangen, die Festplatte zu nutzen.

Typische Fehler und wie du sie vermeidest

Fehler 1: "Tabelle existiert bereits"

Wenn du versuchst, eine temporäre Tabelle mit einem Namen zu erstellen, der schon von einer anderen temporären Tabelle belegt ist, bekommst du einen Fehler. Nutze CREATE TEMP TABLE IF NOT EXISTS oder lösche die Tabelle vor dem Erstellen:

DROP TABLE IF EXISTS temp_students;
CREATE TEMP TABLE temp_students (...);

Fehler 2: "Tabelle verschwindet zu früh"

Wenn du eine temporäre Tabelle innerhalb einer Transaktion erstellst, denk dran: Sie verschwindet, sobald die Transaktion vorbei ist. Plan deine Schritte vorher!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION