В Postgres можете да правите много с транзакции които са върнати назад в края:
BEGIN;
UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...; -- even works for DDL statements
DROP TABLE def...;
ALTER TABLE ghi ...:
ROLLBACK; -- !
Повече в ръководството:BEGIN
ROLLBACK
Имайте предвид обаче, че някои неща не могат да бъдат върнати назад. Например, последователностите не се връщат назад. Или някои специални команди като dblink обаждания.
И някои команди не могат да се изпълняват в транзакция с други. Като CREATE DATABASE
или VACUUM
.
Освен това може да има странични ефекти при едновременно натоварване, като блокировки. Малко вероятно обаче. Можете да зададете ниво на изолация на транзакцията според вашите изисквания, за да изключите всякакви странични ефекти (с известна цена за производителността).
Не бих направил това с разумни данни. Рискът от случайно извършване е твърде голям. А позволяването на потребителите да изпълняват произволен код е риск, който трудно може да се ограничи. Но за тренировъчна среда това трябва да е достатъчно.
Архивирайте го с шаблонна база данни . Ако нещо се обърка, това е най-бързият начин за възстановяване на основно състояние. Пример (вижте последната глава):
Съкращение на всички таблици в база данни на Postgres
Това може да се използва и като алтернатива за груба сила :за предоставяне на чиста нова база данни за всеки обучаем.