SQL Academy · Lektion

Aktualisierbare Views und INSTEAD-OF-Trigger

Machen Sie Views direkt aktualisierbar oder verwenden Sie INSTEAD-OF-Trigger, wenn die View Daten aggregiert oder verknüpft.

Lektion 2 von 413 Schritte

Aktualisierbare Views und INSTEAD-OF-Trigger ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Automatisch aktualisierbare Views

PostgreSQL macht einfache Views automatisch aktualisierbar. INSERT/UPDATE/DELETE auf der View wird als derselbe Vorgang auf der Basistabelle umgeschrieben:

CREATE VIEW active_users AS
  SELECT id, email, full_name FROM users WHERE deleted_at IS NULL;

UPDATE active_users SET full_name = 'Alice' WHERE id = 1;
-- Translates to UPDATE on the users table.

Voraussetzungen für die automatische Aktualisierbarkeit

Die View muss:

  • genau EINE Basistabelle referenzieren
  • keine Aggregationen, kein GROUP BY, HAVING oder DISTINCT enthalten
  • kein LIMIT oder OFFSET enthalten
  • keine Mengenoperationen (UNION usw.) enthalten
  • Spalten direkt abbilden (keine Ausdrücke in der SELECT-Liste – oder nur in einigen Spalten)

WITH CHECK OPTION

Schreibvorgänge verhindern, durch die Zeilen entstehen würden, die in der View nicht sichtbar sind:

CREATE VIEW active_users AS
  SELECT * FROM users WHERE deleted_at IS NULL
  WITH CHECK OPTION;

INSERT INTO active_users (email, deleted_at) VALUES (..., NOW());
-- ERROR — would create a row outside the view's WHERE.

Komplexe Views benötigen INSTEAD OF

Views mit Joins, Aggregationen oder Ausdrücken sind nicht automatisch aktualisierbar. Sie müssen einen INSTEAD OF-Trigger schreiben, der festlegt, was ein Schreibvorgang bedeutet:

CREATE VIEW user_with_address AS
  SELECT u.id, u.email, a.city, a.country
  FROM users u JOIN addresses a ON a.user_id = u.id;

CREATE TRIGGER user_addr_update
INSTEAD OF UPDATE ON user_with_address
FOR EACH ROW EXECUTE FUNCTION update_user_addr();

INSTEAD OF-Triggerfunktion

Die Funktion entscheidet, in welche Basistabellen geschrieben wird:

CREATE FUNCTION update_user_addr() RETURNS TRIGGER AS $$
BEGIN
  UPDATE users SET email = NEW.email WHERE id = NEW.id;
  UPDATE addresses SET city = NEW.city, country = NEW.country WHERE user_id = NEW.id;
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

Wann INSTEAD OF die Anwendungslogik übertrifft

Wenn viele Verbraucher die View aktualisieren, sorgt eine Zentralisierung der Aktualisierungslogik in einem Trigger für Konsistenz. Wenn nur eine Anwendung aktualisiert, sollten Sie die Logik im Anwendungscode belassen.

SECURITY BARRIER

Verhindert, dass der Abfrageplaner Prädikate in nicht vertrauenswürdige View-Verbraucher durchreicht und dadurch Informationen über Kosten preisgibt:

CREATE VIEW my_things AS
SELECT * FROM things WHERE owner_id = current_user_id()
WITH (security_barrier);

Row-Level Security als Alternative

Modernes PostgreSQL unterstützt außerdem Row-Level Security (RLS) für Basistabellen – oft eine klarere Lösung als der Aufbau von Security-Views.

ALTER TABLE things ENABLE ROW LEVEL SECURITY;
CREATE POLICY owner_only ON things USING (owner_id = current_user_id());

Rekursive Views

PostgreSQL unterstützt rekursive Views, aus denen Sie beispielsweise eine Hierarchie abfragen können:

CREATE RECURSIVE VIEW tree (id, parent_id, depth) AS
  SELECT id, parent_id, 0 FROM nodes WHERE parent_id IS NULL
  UNION ALL
  SELECT n.id, n.parent_id, t.depth + 1
  FROM nodes n JOIN tree t ON n.parent_id = t.id;

Berechtigungen

Erteilen Sie die Berechtigung für die View, nicht für die Basistabellen:

GRANT SELECT, UPDATE ON active_users TO app_user;

Hinweis zur Performance

Ein INSTEAD OF-Trigger wird pro Zeile ausgelöst. Bei umfangreichen DML-Vorgängen ist das langsam. Häufig ist es besser, wenn Aufrufer direkt in die Basistabellen schreiben.

Rückblick

Views können beschreibbar sein.

  • Einfache Views: automatisch aktualisierbar
  • Komplexe Views: INSTEAD OF-Trigger
  • WITH CHECK OPTION erzwingt die Sichtbarkeit
  • RLS ist oft ein klareres Sicherheitsmodell

Kurzer Test

Sie definieren eine View, die zwei Tabellen verbindet. Können Sie standardmäßig über diese View UPDATE ausführen?

Kostenlos starten

Lerne SQL mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
46
Lektionen
183

Häufig gestellte Fragen

Ist die Lektion „Aktualisierbare Views und INSTEAD-OF-Trigger“ kostenlos?

Ja — der vollständige Text von „Aktualisierbare Views und INSTEAD-OF-Trigger“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Aktualisierbare Views und INSTEAD-OF-Trigger“?

Machen Sie Views direkt aktualisierbar oder verwenden Sie INSTEAD-OF-Trigger, wenn die View Daten aggregiert oder verknüpft. Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um SQL Academy zu starten?

Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Aktualisierbare Views und INSTEAD-OF-Trigger“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?

Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einfache Views: Logische Wiederverwendung
  2. Aktualisierbare Views und INSTEAD-OF-Trigger
  3. Materialisierte Views und REFRESH-Strategien
  4. Wann Sie voraggregieren sollten
← Zurück zu SQL Academy