W Postgresie możesz wiele zrobić z transakcjami które są cofane na końcu:
BEGIN;
UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...; -- even works for DDL statements
DROP TABLE def...;
ALTER TABLE ghi ...:
ROLLBACK; -- !
Więcej w instrukcji:BEGIN
ROLLBACK
Pamiętaj jednak, że niektórych rzeczy nie można cofnąć. Na przykład sekwencje nie cofają się. Lub kilka specjalnych poleceń, takich jak dblink połączeń.
Niektórych poleceń nie można uruchomić w transakcji z innymi. Podobnie jak CREATE DATABASE
lub VACUUM
.
Mogą również wystąpić efekty uboczne przy jednoczesnym obciążeniu, takie jak zakleszczenia. Jednak mało prawdopodobne. Możesz ustawić poziom izolacji transakcji zgodnie z Twoimi wymaganiami, aby wykluczyć wszelkie skutki uboczne (przy pewnym koszcie wydajności).
Nie zrobiłbym tego z rozsądnymi danymi. Ryzyko popełnienia przez przypadek jest zbyt duże. A pozwolenie użytkownikom na wykonywanie dowolnego kodu jest ryzykiem, którego trudno jest powstrzymać. Ale dla środowiska szkoleniowego to powinno wystarczyć.
Utwórz kopię zapasową za pomocą bazy danych szablonów . Jeśli coś pójdzie nie tak, jest to najszybszy sposób na przywrócenie stanu podstawowego. Przykład (spójrz na ostatni rozdział):
Obcinanie wszystkich tabel w bazie danych Postgres
Może to być również użyte jako alternatywa brutalnej siły :aby zapewnić nieskazitelną nową bazę danych dla każdego stażysty.