Trong Postgres, bạn có thể làm được nhiều điều với giao dịch được quay trở lại ở cuối:
BEGIN;
UPDATE foo ...:
INSERT bar ...;
SELECT baz FROM ...;
CREATE TABLE abc...; -- even works for DDL statements
DROP TABLE def...;
ALTER TABLE ghi ...:
ROLLBACK; -- !
Xem thêm trong hướng dẫn: BEGIN
ROLLBACK
Tuy nhiên, hãy lưu ý rằng một số thứ không thể quay trở lại. Đối với các trường hợp, trình tự không quay trở lại. Hoặc một số lệnh đặc biệt như dblink cuộc gọi.
Và một số lệnh không thể chạy trong giao dịch với những lệnh khác. Giống như CREATE DATABASE
hoặc VACUUM
.
Ngoài ra, có thể có các tác dụng phụ với tải đồng thời, như bế tắc. Tuy nhiên, không có khả năng. Bạn có thể đặt mức cách ly giao dịch theo yêu cầu của bạn để loại trừ bất kỳ tác dụng phụ nào (với một số chi phí cho hiệu suất).
Tôi sẽ không làm điều này với dữ liệu hợp lý. Rủi ro do tai nạn là quá lớn. Và việc để người dùng thực thi mã tùy ý là một rủi ro khó có thể tránh khỏi. Nhưng đối với một môi trường đào tạo, điều đó phải đủ tốt.
Sao lưu nó bằng cơ sở dữ liệu mẫu . Nếu xảy ra sự cố, đó là cách nhanh nhất để khôi phục trạng thái cơ bản. Ví dụ (xem chương cuối):
Cắt bớt tất cả các bảng trong cơ sở dữ liệu Postgres
Điều này cũng có thể được sử dụng làm thay thế bạo lực bạo lực :để cung cấp một cơ sở dữ liệu mới nguyên sơ cho mỗi học viên.