In Postgres können Sie viel mit Transaktionen machen die zurückgesetzt werden am Ende:
BEGIN;
UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...; -- even works for DDL statements
DROP TABLE def...;
ALTER TABLE ghi ...:
ROLLBACK; -- !
Mehr im Handbuch:BEGIN
ROLLBACK
Beachten Sie jedoch, dass einige Dinge nicht rückgängig gemacht werden können. Beispielsweise werden Sequenzen nicht zurückgesetzt. Oder einige spezielle Befehle wie dblink Anrufe.
Und einige Befehle können nicht in einer Transaktion mit anderen ausgeführt werden. Wie CREATE DATABASE
oder VACUUM
.
Außerdem kann es bei gleichzeitiger Last zu Nebenwirkungen wie Deadlocks kommen. Allerdings unwahrscheinlich. Sie können die Transaktionsisolationsstufe festlegen Ihren Anforderungen entsprechen, um Nebenwirkungen auszuschließen (auf Kosten der Leistung).
Mit sensiblen Daten würde ich das nicht machen. Das Risiko, sich versehentlich zu begehen, ist zu groß. Und Benutzer willkürlichen Code ausführen zu lassen, ist ein kaum eindämmbares Risiko. Aber für eine Trainingsumgebung sollte das gut genug sein.
Sichern Sie es mit einer Vorlagendatenbank . Wenn etwas schief gehen sollte, ist das der schnellste Weg, um einen Grundzustand wiederherzustellen. Beispiel (siehe letztes Kapitel):
Abschneiden aller Tabellen in einer Postgres-Datenbank
Dies kann auch als Brute-Force-Alternative verwendet werden :Bereitstellung einer makellosen neuen Datenbank für jeden Auszubildenden.