PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Kann ich SQL-Befehle trocken ausführen/sandboxen?

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.