I Postgres kan du gøre meget med transaktioner der er rullet tilbage til sidst:
BEGIN;
UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...; -- even works for DDL statements
DROP TABLE def...;
ALTER TABLE ghi ...:
ROLLBACK; -- !
Mere i manualen:BEGIN
ROLLBACK
Vær dog opmærksom på, at nogle ting ikke kan rulles tilbage. For eksempel ruller sekvenser ikke tilbage. Eller nogle specielle kommandoer såsom dblink opkald.
Og nogle kommandoer kan ikke køres i en transaktion med andre. Ligesom CREATE DATABASE
eller VACUUM
.
Der kan også være bivirkninger ved samtidig belastning, såsom dødvande. Dog usandsynligt. Du kan indstille transaktionsisoleringsniveauet til dine krav for at udelukke eventuelle bivirkninger (til en vis pris for ydeevnen).
Jeg ville ikke gøre det her med fornuftige data. Risikoen for at begå ved et uheld er for stor. Og at lade brugere udføre vilkårlig kode er en risiko, der næppe kan indeholdes. Men til et træningsmiljø burde det være godt nok.
Sikkerhedskopier den med en skabelondatabase . Hvis noget skulle gå galt, er det den hurtigste måde at genoprette en grundlæggende tilstand. Eksempel (se det sidste kapitel):
Trunkering af alle tabeller i en Postgres-database
Dette kan også bruges som brute force alternativ :at give en uberørt ny database for hver praktikant.