In Postgres puoi fare molto con le transazioni che sono rollback alla fine:
BEGIN;
UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...; -- even works for DDL statements
DROP TABLE def...;
ALTER TABLE ghi ...:
ROLLBACK; -- !
Altro nel manuale:BEGIN
ROLLBACK
Tieni presente che alcune cose non possono essere ripristinate, però. Ad esempio, le sequenze non vengono ripristinate. O alcuni comandi speciali come dblink chiamate.
E alcuni comandi non possono essere eseguiti in una transazione con altri. Come CREATE DATABASE
o VACUUM
.
Inoltre, potrebbero esserci effetti collaterali con il carico simultaneo, come deadlock. Improbabile, però. Puoi impostare il livello di isolamento della transazione alle tue esigenze per escludere eventuali effetti collaterali (a un certo costo per le prestazioni).
Non lo farei con dati sensibili. Il rischio di commettere un incidente è troppo grande. E consentire agli utenti di eseguire codice arbitrario è un rischio difficilmente contenibile. Ma per un ambiente di formazione, dovrebbe essere abbastanza buono.
Eseguire il backup con un database di modelli . Se qualcosa dovesse andare storto, questo è il modo più veloce per ripristinare uno stato di base. Esempio (guarda l'ultimo capitolo):
Tronco di tutte le tabelle in un database Postgres
Questo può anche essere usato come forza bruta alternativa :per fornire un nuovo database incontaminato per ogni tirocinante.